有線LANで快調に動いていたサービスが、無線LANだとしばらくすると切れてしまう。
Raspberry Pi がハングアップしたとかではないらしい。有線LAN側からアクセスするとちゃんと動いている。
無線LANが切れているだけらしい。
環境
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
$ cat /proc/device-tree/model
Raspberry Pi 3 Model B Plus Rev 1.3
電波断?
アクセスポイントの不調で、一旦電波が途切れてしまうと復旧できていないのかな・・・
アクセスポイントの電波を止めてみます。
$ ifconfig wlah0
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:2f:6d:99 txqueuelen 1000 (Ethernet)
RX packets 3839 bytes 195589 (191.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 392 bytes 43210 (42.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
約3分後、電波をONにしてみます。
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.42.4 netmask 255.255.255.0 broadcast 192.168.42.255
inet6 240d:1a:cc6:7500:245b:c92b:680e:efbb prefixlen 64 scopeid 0x0<global>
inet6 fe80::f388:9c5d:a71f:f9c prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:2f:6d:99 txqueuelen 1000 (Ethernet)
RX packets 3886 bytes 199207 (194.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 427 bytes 48612 (47.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ちゃんと自動で再接続できていますね。アクセスポイントの電波断を10分、1時間と長くしてみても同様でした。
Power managemaent
$ iwconfig wlan0
wlan0 IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on
Power Management の項目が ON になってますね。この状態だと約1日で落ちるらしいです。
ぐぐってみたら、
「Linux Mint 18.1でWi-Fiの省電力機構を無効化する - afnf.net」
https://blog.afnf.net/blog/91
では、様々な解決策を試してうまくいかず、最終的に sudo pm-powersave false
でうまくいったとありました。
「Raspberry Piで時間が経過するとwifiが繋がらなくなる - Elsaの技術日記(徒然なるままに)」
https://elsammit-beginnerblg.hatenablog.com/entry/2021/02/16/213737
では、結局 cron で接続が切れたときに wlan0 up
を行うようにしています。
これらの知見を元に、RaspberryPiで動く仕組みを考えてみます。
推測
いろんなページで悩んでいる方々がいろんな解決策を試していますがそれらが動いたり動かなかったりしているのは、電波状況により接続/再接続のタイミングで適用が効いたり効かなかったりしているのではないかな?
であるからワンショットで $ sudo iwconfig wlan0 power off
でmなんとかなるけど、それを /etc/rc.local に書いたりしても動いたり動かなかったりしているのではないかな?
設定
そんなことを考えて、以下のページに書いてある仕組みを導入しました。
https://forums.raspberrypi.com/viewtopic.php?t=336276
/etc/dhcpcd.exit-hook を以下のように作ります;
[ -n ${disable_pm} ] || return 0
if [ “${interface}” = “wlan0” ]; then
case ${reason} in
CARRIER | NOCARRIER) iwconfig ${interface} power off ;;
STOP | STOPPED) iwconfig ${interface} power on ;;
esac
fi
再起動します。
$ iwconfig wlan0
wlan0 IEEE 802.11 ESSID:"hogehagehige"
Mode:Managed Frequency:2.462 GHz Access Point: D4:F7:56:B4:90:66
Bit Rate=65 Mb/s Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=65/70 Signal level=-45 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
うまくいったみたいです