4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

raspberry pi をWiFiの中継機にする方法のメモ

Last updated at Posted at 2022-10-22

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の設定

/etc/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内の設定を以下のように修正した。

/etc/wpa_supplicant/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に接続することはない。

reconnct.sh
#!/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

中継機に中継機が接続する場合のスクリプト

reconnct.sh
#!/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
/etc/init.d/cron
* * * * * cd /home/pi/Desktop && sh reconnect.sh
* * * * * sudo chronyc -a makestep

cron再起動

sudo /etc/init.d/cron restart

以上の処理を追加することで、中継機が自分に接続することを防ぐことができる。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?