RaspberryPiをWifiのアクセスポイントとして使う

2024-01-12 raspi linux

構成と準備

RaspberryPi4 + RaspberryPiOS(64bit) を無線LAN(wifi)のアクセスポイントとして利用するための設定です。Raspi本体は有線LAN経由で別のルータ配下につながっている想定です。通常、ここもNATでインターネットに出ていくので、2重にIP変換がかかってしまうことにはなるのですが、色々と融通が効きやすそうということでこの構成にしています。

まずは必要なパッケージをインストールします。

apt update
apt install hostapd dnsmasq ufw -y
apt remove network-manager

以下、実際に書き換えた設定ファイルを列挙します。SSID,パスワード及びwifi側のIP(ネットワーク)アドレスは環境に応じて適宜読み替えてください。特に、IPが上位のネットワークと重複するとうまくいかなくなると思います。

アクセスポイントとしての設定

/etc/hostapd/hostapd.conf (新規) SSIDは任意の文字列に、パスワードは8文字以上に設定してください。

ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
interface=wlan0
driver=nl80211
hw_mode=g
country_code=JP
channel=11
ieee80211d=1
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
ssid=your-ssid
wpa_passphrase=your-password
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

設定を有効化します。

systemctl unmask hostapd
systemctl enable hostapd

DHCPサーバとしての設定

2024.12.07 追記 (Bookwormから?)/etc/network/interfacesの設定が使えなくなっているようです。ファイルを追加しても読み込まれませんでした。

# this is not available.
auto eth0
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet static
  address 192.168.0.1
  netmask 255.255.255.0

代わりに systemd-networkd を利用します。まず以下の2つの設定ファイルを新規作成してください。

/etc/systemd/network/01-eth0.network

[Match]
Name=eth0

[Network]
DHCP=yes

/etc/systemd/network/02-wlan0.network

[Match]
Name=wlan0

[Network]
Address=192.168.0.1/24

その後、デーモンを有効化します。

systemctl enable systemd-networkd
systemctl start systemd-networkd

/etc/dnsmasq.conf (該当行をコメントアウト)

interface=wlan0
dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h

ルータ(NAT)としての設定

/etc/sysctl.conf (該当行を変更)

net.ipv4.ip_forward=1

/etc/default/ufw (該当行を変更)

DEFAULT_INPUT_POLICY=“ACCEPT"
DEFAULT_FORWARD_POLICY=“ACCEPT"

/etc/ufw/before.rules (先頭または末尾に追加)

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
COMMIT
ufw enable

全ての設定が完了したら、reboot してアクセスポイントに他のデバイスから接続が可能かチェックします。

参考URL