Raspberry Pi 3B+でWPA2-EAP認証

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.txtnet.ifnames=0 biosdevname=0 を追加して再起動。すると、ifconfigで新しい名前の有線LANが見えるようになったので、ここで /etc/dhcpcd.conf/etc/dhcpd.conf でeth0となっている箇所を新しい名前に変更する。再起動したところ、ちゃんと指定したIPアドレスが有効になっていた。

どうやら予想可能なネットワーク名は避けるべきという思想に基づき、MACアドレスを含めた名前に変わったらしい。非常に不便である。なお、無線LANの方はwlan0のままである。

(追記終わり)

コメント(0)



Note

本サイトのハイパーリンクの一部は、オリジナルのサイトが閉鎖してしまったため"Internet archive Wayback Machine"へのリンクとなっています。そのようなリンクにはアイコン[archive]を付与しています。

本サイトはCookieを使用しています。本サイトにおけるCookieは以下の三種類のみであり、Cookieの内容に基づいてサイトの表示を変更する以外の用途には用いておりません。