Raspberry pi を有線LAN経由でSSH接続してHeadless運用(モニタとかキーボードを接続しない)していたのですが、無線LANでSSHが使えれば離れたところにも設置できて便利です。そこでwifiで使うために、BUFFALOの無線アダプタを購入いたしました。型番はWLI-UC-GNM2。Amazon.co.jpで891円でした。無線LANに関してはWeb上で多くの方が報告されていますので問題ないハズと思ったのですが、なかなかうまくいきませんでした。
まず私のRPi環境のスペックです
Raspberry Pi Model B
Downloaded image: 2012-10-28-wheezy-raspbian.zip
Kernel version: 3.2.27+
Wireless adapter: BUFFALO WLI-UC-GNM2
lsusb output: Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
board revision
root@raspberrypi:~# cat /proc/cpuinfo
Hardware : BCM2708
Revision : 0003
電源は 5V 2A
無線アダプタはセルフパワードハブ( powered hub)に接続
(電源に問題があって通信できない事例をWebで見ていましたので、この構成で試してみました。が、結果的には直接RPiに無線アダプタを挿しても同じでした。)
アクセスポイント側 BUFFALO WHR-HP-GN
無線アダプタは接続するとすぐ認識できました。
root@raspberrypi:~# lsusb Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070] root@raspberrypi:~# dmesg [ 3.263009] usb 1-1.2: new high-speed USB device number 4 using dwc_otg [ 3.409389] usb 1-1.2: New USB device found, idVendor=0411, idProduct=01ee [ 3.423267] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 3.437499] usb 1-1.2: Product: 802.11 n WLAN [ 3.448902] usb 1-1.2: Manufacturer: Ralink [ 3.460167] usb 1-1.2: SerialNumber: 1.0
IP address ,SSID, 事前共有Key等をセットします。(IPアドレス等は実際とは異なる便宜上のものです)LANケーブルが差し込まれている時は eth0 から通信して、また反対に無線アダプタが差し込まれている時はwlan0から通信する事を目的としています。 (1/29 追記: 後日、新しいSD-CARDに再構築してみたところ、下記の設定だけではデフォルトゲートウエイがwlan0に切り替わりませんでした。何の設定をしたのか思い出せないので、しかたなくeth0の設定をコメントアウトしました。また、アクセスポイントはWPA-PSK 暗号化はAESで試してみました。 )
</etc/network/interfaces>
auto lo iface lo inet loopback # auto eth0 # allow-hotplug eth0 # iface eth0 inet static # address 192.168.11.200 # network 192.168.11.0 # netmask 255.255.255.0 # broadcast 192.168.11.255 # gateway 192.168.11.1 auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 192.168.11.201 network 192.168.11.0 netmask 255.255.255.0 broadcast 192.168.11.255 gateway 192.168.11.1 wpa-ssid "エスエスID" wpa-psk "事前共有key"
</etc/resolv.conf>
nameserver 192.168.11.1
root@raspberrypi:~# shutdown -r now
無線アダプタをセットして、LANケーブルは抜いた状態でリブートします。
root@raspberrypi:~# iwconfig lo no wireless extensions. wlan0 IEEE 802.11bgn ESSID:"エスエスID" Mode:Managed Frequency:2.412 GHz Access Point: 00:24:A5:xx:xx:xx Bit Rate=48 Mb/s Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:on Link Quality=70/70 Signal level=-19 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:1 Invalid misc:16 Missed beacon:0 eth0 no wireless extensions.
リンクはOKみたいです
root@raspberrypi:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.11.1 0.0.0.0 UG 0 0 0 wlan0 192.168.11.0 * 255.255.255.0 U 0 0 0 wlan0
ルーティングテーブルもOKみたいです。おや?簡単に繋がりました。インターネットもOK。Raspberry Pi側から通信する事は全然問題は無いですね。ですが・・・
クライアントのWindowsPCから有線LANでは繋がったSSHが無線LANでは繋がりません。(涙)
かなりの時間を費やしてようやく原因がわかりました。
(1)Windows PC --- ping ---> Raspberry Pi <NG> (2)Raspberry Pi --- ping ---> Windows PC <OK> (3)Windows PC --- ping ---> Raspberry Pi <OK> (しばらくの間だけ)
上記のような状況です。Raspberry PiからクライアントPCに向けてPingを打った直後のみ、クライアントPCからRaspberry Piに通信できます。クライアント側からの ARP Request に Raspberry Pi の wlan0 が応答を返さない事が原因みたいです。
この対策を探すために必死にラズベリーパイのフォーラム等を探しまくりましたが、一番有力な解決策と思われるものは定期的にRaspberry Pi側からPingを打つ方法でした。簡単と言えばそうですが、これはスマートとはいえない解決策ですね。たいした成果も得られず、しかも夜遅くまで作業していたので、私はくたくたになってしまいました。(意識もうろう)
そこで後日、状況を整理するために、普段使っていなかった無線ルータ(PCI GW-MF54G2)で実験環境を作ってみましたところ、驚いたことに、何の問題もなく無線LANでクライアントマシンからSSH通信ができました。Raspberry Pi側ではなく、アクセスポイント側 BUFFALO WHR-HP-GNの仕様に問題があったということが結論でした。
バッファロのサイトを見たら新しいファームウエア【Ver.1.85 (R1.18/B1.00)】があって、「broadcast通信が出来なくなる場合がある問題を修正しました。」と書かれていましたので早速アップデートしたところ、現在使用している無線LANアクセスポイント (WHR-HP-GN)でも使えるようになりました。めでたしめでたしです。