Raspberry 3B+でWi-Fiルータを作った

f:id:plonk123:20090111231130j:plain
RasPiルータ

raspberrypi.stackexchange.com

ここの手順をそのままやった。Wi-Fiと既存のイーサネットLANのブリッジ接続になるので、正確にはWi-Fiブリッジ。

既存のLANは192.168.0.0/24で、ゲートウェイは192.168.0.1。このルータ(Planex BLW-54CW2)がWi-Fi機能をオンにするとたまに勝手に再起動して不安定なのと、別の部屋のPCへの電波の入りが悪くてping 3秒とかになるので、普段はWi-Fiを使わずケーブルでPCを接続していた。

ところがひょんなことからスマートフォンを手に入れて、これにイーサネットケーブルは刺せないからWi-Fiを使う必要が生じたのでWi-Fiルータが欲しかった。IPレベルでのネットワークが2つになるのはめんどくさいのでブリッジ動作にして、IP割り当て(DHCP)は前からあるPlanexにやってもらうことにした。

# 昔ながらのネットワークツールを削除
rpi ~$ sudo -Es
rpi ~# apt --autoremove purge ifupdown dhcpcd5 isc-dhcp-client isc-dhcp-common
rpi ~# rm -r /etc/network /etc/dhcp

# systemd-resolvedのセットアップ
rpi ~# apt --autoremove purge avahi-daemon
rpi ~# apt install libnss-resolve
rpi ~# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
rpi ~# systemctl enable systemd-resolved.service

# systemd-networkdのセットアップ
rpi ~# systemctl enable systemd-networkd.service
rpi ~# cat > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="RPiNet"
    mode=2
    frequency=2437
    #key_mgmt=NONE   # オープンなホットスポットにする場合はアンコメント
    # key_mgmt=NONEにする場合は次の3行を削除せよ
    key_mgmt=WPA-PSK
    proto=RSN WPA
    psk="password"
}
EOF

実際にはcountryはJP、ssidは「盆栽🌲」にしてpsk(パスワード)も変えた。

rpi ~# chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# systemctl enable wpa_supplicant@wlan0.service
rpi ~# cat > /etc/systemd/network/02-br0.netdev <<EOF
[NetDev]
Name=br0
Kind=bridge
EOF

rpi ~# cat > /etc/systemd/network/04-br0_add-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Bridge=br0
EOF

rpi ~# cat > /etc/systemd/network/12-br0_up.network <<EOF
[Match]
Name=br0
[Network]
MulticastDNS=yes
DHCP=yes
# 静的IPを使う場合はDHCP=yesをコメントアウトして、次の3行をアンコメント
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF

RasPiにログインするために静的IPにしたかったので最後の5行を下のようにした。

#DHCP=yes
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1 8.8.8.8
rpi ~# systemctl edit wpa_supplicant@wlan0.service

エディタに次の内容を入力する:

[Service]
ExecStartPre=/sbin/iw dev %i set type __ap
ExecStartPre=/bin/ip link set %i master br0

ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0

ExecStopPost=-/bin/ip link set %i nomaster
ExecStopPost=-/sbin/iw dev %i set type managed

再起動したらブリッジとして動作する。

f:id:plonk123:20200213134905p:plain
Android Wifi接続
f:id:plonk123:20200213134933p:plain
PC Wifi接続
ネットワーク関連のツールが置き換わるので、RasPiのデスクトップではネットワークアイコンがエラーになってるけど、ちゃんとつながってる。

f:id:plonk123:20200213133723p:plain
RasPi 3B+ network icon