raspberry pi zeroを過去にAP化することに成功しているので、今度は中継機を作成した。
今回想定する構成
サーバ(192.168.100.1)
↑↓ wlan0(内蔵WiFi)
中継機(192.168.101.1)
↑↓ wlan1(WiFIアダプタ)
端末
サーバの設定、中継機の初期設定は過去に設定したものとする
中継機のWiFi設定
wlan0 | wlan1 |
---|---|
内蔵WiFi | WiFIアダプタ |
サーバへ接続する | APの電波を発信する |
接続先設定
wpa_supplicant.confでサーバへのSSID、PWを設定しておく
中継機のための設定手順
①dhcpcd.confの設定
interface wlan1
static ip_address=192.168.101.1/24
static routers=192.168.101.1
static domain_name_servers=192.168.101.1
static broadcast 192.168.101.255
#これ大事
nohook wpa_supplicant
nohook wpa_supplicantとすることでWiFIアダプタがサーバへ接続することを防ぐ
②dnsmasq.confの設定
interface=wlan1
dhcp-range=192.168.101.2,192.168.101.140,255.255.255.0,24h
192.168.101.1は中継機のIPに割り当てるため、192.168.101.2からにする
③rc.localで起動時に実行されるようにする
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
sh -c "iptables-save > /etc/iptables.ipv4.nat"
他ブログでdnsmasqの設定をrc.localで実行されている方もいたが、特になしで良さそう
④おまじない
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
sudo systemctl restart dnsmasq
sudo systemctl restart hostapd
以上で、中継機として動作する。
SSIDはサーバのSSIDと中継機のSSIDの両方が共存しているはず。
中継機のSSIDに接続していてもサーバのデータにアクセスできればOK
接続先がサーバではなく家庭内のWiFiであれば、
ping www.google.co.jp
で中継機から接続確認できる。
参考文献
CCIE TOZAIとITを楽しむブログ 「Raspberry pi 4を無線の中継機(AP)にする手順」
2022/12/04 追記
上記のままでは、中継機のwlan1がwlan0に接続してしまう事象が発生した。
そこで、wpa_supplicant.conf内の設定を以下のように修正した。
#サーバー
network={
ssid="サーバと中継機と同一のSSID"
psk="password"
bssid="サーバのMACアドレス"
key_mgmt=WPA-PSK
}
以上の設定で指定のmacアドレスのssidにしか接続しない設定になる。
しかし、サーバとの接続が切れた場合に、中継機のwlan1がwlan0に接続してしまう事象が発生した。
詳細は不明だが、サーバとの通信が切断されたときにのみ起きる事象であることから、
再接続スクリプトをcronで実行するようにした。
再起動スクリプト
pingがサーバに通った場合はOKを出力
pingが通らなかった場合はWiFiの再接続コマンドを実行する。
WiFiの再接続コマンド実行後はwlan1がwlan0に接続することはない。
#!/bin/sh
if ping 192.168.100.1 -c 1 >> /dev/null
then
echo "OK"
else
sudo ifconfig wlan0 down
sleep 1
sudo ifconfig wlan0 up
echo "restart"
fi
中継機に中継機が接続する場合のスクリプト
#!/bin/sh
if ping 192.168.100.1 -c 1 >> /dev/null; then
echo "server OK"
else
if ping 192.168.101.1 -c 1 >> /dev/null; then
echo "bridge OK"
else
sudo ifconfig wlan0 down
sleep 1
sudo ifconfig wlan0 up
echo "restart"
fi
fi
定期実行設定
cron編集
crontab -e
* * * * * cd /home/pi/Desktop && sh reconnect.sh
* * * * * sudo chronyc -a makestep
cron再起動
sudo /etc/init.d/cron restart
以上の処理を追加することで、中継機が自分に接続することを防ぐことができる。