
ちょっとした自動処理をするのにPC1台を稼働させると電気代が〜、と思ってしまう今日この頃。そんな時に重宝しするラズパイゼロですが、SSH接続できないときがある。
Chatさんに聞いても、bootパーティションに空のsshというファイルを作成しろって言ってくるだけで、全く解決しない。そんなわけで、繋がったり繋がらなくなったりと、よく判らんなと放置していましたが、ようやく原因が判明しました。(うちでの場合ですが。)
きっかけは、年末の片付けで出てきた「HDMI端子付き5インチTFT液晶モニター」と、アリエクで買った2000円のメカニカルキーボード。ANSI配列のキーボードのおかげでコードを書くのが楽になった。モニターもPCと共用で切り替えながらじゃないので楽。この「楽(ラク)」ってのがないと原因を調べるのが億劫なのだ。
SSH接続できない原因の究明
Raspberry Pi Zero 2 Wのセットアップには、「Raspberry Pi Imager」を使っています。これを使えばWi-Fiを設定するのも簡単。Chatさんに2.4GHzの他に5GHzも使えるよって騙されたりしなければ、ルータのWi-Fiに簡単に接続できます。

Wi-Fiにはすぐに接続するのに、なぜSSHでは接続できないのか? そこで、ラズパイゼロからMacにPingを打ってみた。
$ ping 192.168.11.12
PING 192.168.11.12 (192.168.11.12) 56(84) bytes of data.
↑この状態でしばらく止まる。
64 bytes from 192.168.11.12: icmp_seq=55 ttl=64 time=1.44 ms
64 bytes from 192.168.11.12: icmp_seq=56 ttl=64 time=1.56 ms
64 bytes from 192.168.11.12: icmp_seq=57 ttl=64 time=1.54 ms
・
・
64 bytes from 192.168.11.12: icmp_seq=67 ttl=64 time=1.24 ms
10秒ぐらいでまた止まる。
そして更に長く止まり、以下のように動き出す。
64 bytes from 192.168.11.12: icmp_seq=214 ttl=64 time=1.48 ms
64 bytes from 192.168.11.12: icmp_seq=215 ttl=64 time=1.36 ms
64 bytes from 192.168.11.12: icmp_seq=216 ttl=64 time=1.54 ms
64 bytes from 192.168.11.12: icmp_seq=217 ttl=64 time=1.24 ms
このようにPingを打っていると、そのうちSSH接続できる状態になっている。ちなみに、sudo systemctl status sshは、起動直後からActiveですよ。
そしてこのPingの状態は、Wi-Fi接続できているルータに対しても同様の反応でした。
ルータに原因があるのでは?
Buffaloのルータに原因がありそうなので、古いASUSのルータを引っ張り出して実験を開始。別のSDカードを用意してRaspberry Pi ImagerでWi-Fiの接続先以外同じ状態でOSを書き込んでテストします。
サクッと繋がる。ということは、やはりBuffaloのルータ設定に問題ありか!?
しかし、ルータの設定は特に難しいことはさせていないので、変更できる部分が思い当たらない。ファイヤーウォールはWAN側からのものなので変更してもしょうがないし、Snooping 機能やQoS設定をいじってみたが変化はなし。
2.4GHzの項目を見比べてみた。すると帯域の部分に違いがありました。ASUSは20/40 MHzだが、Buffaloは20 MHzとなっている。


Buffaloの帯域を40 MHzへ変更してみた。すると接続するではないですか!
考察
Raspberry Pi Zero 2 WのWi-FiチップはCYW43439。Wi-Fi 4 (802.11n)、シングルバンド (2.4GHz)、20MHzチャネル。なので基本的に、20MHzのチャンネル帯域幅を40MHzにしたところで速度の変化はない。
しかし、今回チャンネル帯域を20MHzから40MHzにすることでSSH接続がスムーズになった。
古いASUSのルーターの2.4GHzの周波数帯は、Wi-Fi 4(802.11n)であり、今使っているBuffaloのルーターの2.4GHzの周波数帯は、Wi-Fi 6(802.11ax)を使用しています。
このことから、Wi-Fi 4(802.11n)とWi-Fi 6(802.11ax)の規格の違いに起因するものだったと推測できる。細かい原因はわかりませんが、40MHzとチャンネル帯域幅を増やすことでスムーズにデータが流れるということでしょう。
チャンネル帯域幅が少ないと、たまたま干渉しやすいチャンネルだったなども考えられるので、電波状況を確認できるアプリを試してみるもの良いのかもしれない。