Raspberry Pi 3B+でWPA2-EAP認証
- 公開日: 2020/06/08(月) 20:49[JST]
- 更新日: 2023/12/31(日) 11:31[JST]
WiFiの電波は届くけど有線LANは配線されていない部屋で有線LANオンリーの機器を使うため、Raspberry Pi 3B+でWiFiルータを作ろうとしたが無線LANの設定でハマったのでメモ。
Raspberry Piの公式OSであるRaspberry Pi OS(旧称Raspbian)で無線LANを動かすために必要なファイルは /etc/wpa_supplicant/wpa_supplicant.conf 。基本的にはFreeBSDとだいたい同じ書式のようだ。下記の通り作成した。ルート証明書はなくても大丈夫。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=JP network={ ssid="SSID名" proto=RSN key_mgmt=WPA-EAP eap=TLS identity="ユーザ名" client_cert="/etc/certs/clicert.pem" private_key="/etc/certs/clicert.pem" private_key_passwd="clicert.pemのパスワード" }
設定後再起動すればDHCPで無線LANにIPアドレスを割り当ててくれる。今回はルータに使用するため無線LAN側のIPアドレスは手動で設定する必要があるが、これは /etc/dhcpcd.conf で下記のように設定する。
interface wlan0 static ip_address=IPアドレス/ネットワークアドレスのビット数 static routers=ルータのIPアドレス static domain_name_servers=ネームサーバのIPアドレス(スペース区切りで複数指定可)
どこでハマったかというと、最初は最新のDebian BusterベースのOSで設定していたのだがIPアドレスがwlan0に設定されない。 /var/log/syslog を見ると WARNING: CPU: 0 PID: 16477 at drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c:5125 brcmf_cfg80211_set_pmk+0x6c/0x80 [brcmfmac] といった怪しいメッセージが出ていた。ぐくってみたところ、 wpa_supplicant on buster fails with WPA enterpriseというバグ報告が。つまりDebian BusterベースのOSではダメで、一つ前のDebian StretchベースのRaspbianを使う必要がある、ということ。このバグ報告は2019年6月29日。一年近く経っても解消されていないということだ。うーむ。(2023/12/31追記: 結局、Busterでの解決策は自前でwpa_supplicantをビルドして差し替えるしかない、ということのようだ。Debianらしいといえばらしいのだが)
と、いうことで(公式サイトからはダウンロードできないので)ミラーサイトから2019-04-08-raspbian-stretch-lite.zipをダウンロード。これで無線LANがつかえるようになった。
(6/22追記)
書き忘れていたがもう一つ問題が。起動時に「そんなIPアドレスは無いのでバインドに失敗した」みたいなメッセージを出してsshdが動かない。ラズパイを置いてある部屋はHDMI対応のモニタはない(D端子やしか無い古いテレビならある)ので、HDMI端子付きモニタのある部屋にラズパイを移して起動させてみるが、この環境だと普通にsshdが起動する。
原因は、いつもはFreeBSD+Jailでサーバを組んでいるのでその時の癖でsshdを無線LAN側にアサインしていたことだった。有線・無線LAN双方がつながっていて、かつ無線LANがWPA2-EAP認証である場合、無線LANがTCP/IPでつかえるようになる前にsshdが起動してしまうため、バインドするIPアドレスがなくエラーになってしまうようだ。HDMIがあるモニタでテストした時は有線LANを繋いでいなかったため無線LANの起動が間に合ってしまったようだ。
ということで、sshdがLISTENするアドレスを0.0.0.0にして対応したところ、無事sshdが起動するようになった。
(追記終わり)
(2023/12/30追記)
流石にStretchベースのOSを使い続けるのもどうかと思い、RaspbianをDebian11"Bullseye"ベースに更新した。そうした所、有線LANの名前がeth0から変わってしまい、ループバックしか見えなくなってしまった。対応策としては、Redditのスレッドにある通り、 /boot/cmdline.txt に net.ifnames=0 biosdevname=0 を追加して再起動。すると、ifconfigで新しい名前の有線LANが見えるようになったので、ここで /etc/dhcpcd.conf と /etc/dhcpd.conf でeth0となっている箇所を新しい名前に変更する。再起動したところ、ちゃんと指定したIPアドレスが有効になっていた。
どうやら予想可能なネットワーク名は避けるべきという思想に基づき、MACアドレスを含めた名前に変わったらしい。非常に不便である。なお、無線LANの方はwlan0のままである。
(追記終わり)