THINK

RaspberryPiからWi-Fi(EAP-TLS)に接続する

8/8/2023

RaspberryPiからWi-Fiに接続しようとして試行錯誤していたのでそのメモ.

Linux(Debian)から,Wi-Fiに接続するために必要なサービス:

NetworkManager.serviceという便利なものもあるよう. これはnmcli device wifi listといったWi-Fiの状態を確認できたりする便利なコマンドを提供してくれてはいるが, 今回は使わず.

~ $ systemctl is-active NetworkManager wpa_supplicant networking dhcpcd
inactive
active
active
active

Wi-Fiを利用するために必要なこと

おそらく次の2つ

  1. Wi-Fiデバイスを有効にする
  2. Wi-Fiの接続設定を行う
  3. Wi-Fiデバイスのインターフェースを起動する

Wi-Fiデバイスを有効にする

Wi-Fiデバイスが有効になっているかどうかはrfkillコマンドを利用して確認可能.

~ $ rfkill list
0: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: no
1: hci0: Bluetooth
	Soft blocked: no
	Hard blocked: no

もし, Soft blocked: yesとなっているようであれば,sudo rfkill unblock wifiを実行することでブロックを解除できる.

Wi-Fiの接続設定を行う

/etc/wpa_supplicant/wpa_supplicant.confに次のように記載.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
	ssid="my-network"
	scan_ssid=1
	key_mgmt=WPA-EAP
	eap=TLS
	identity="me"
	ca_cert="/etc/cert/ca.pem"
	client_cert="/etc/cert/my.pem"
	private_key="/etc/cert/my.prv"
	private_key_passwd="******"
}

SSID非通知なので,scan_ssid=1を設定, EAL-TLSを利用するので, key_mgmt=WPA-EAPeap=TLSを設定. 家のWi-Fi APはWPA3-EAPに対応しているが,RaspberryPi上で認識できていなかったのでWPA2-EAPを用意している. パスワードはprivate_key_passwd="hash:foo"と書けるらしいが,今回は割愛.

Wi-Fiデバイスのインターフェースを起動する

Wi-Fiデバイスのインターフェースは, wlan0として認識されているはず.

~ $ ip addr show dev wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether *** brd ff:ff:ff:ff:ff:ff
    inet ***
    inet6 ***

起動していれば,大体こんな感じで割り振られているIPアドレスなどが見えているはず. が,もし state DOWNとなっているようであれば,インターフェースを起動してあげる必要がある.

/etc/network/interfacesに次の設定を追記

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
	wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

もっとシンプルな設定にできる気もするが,今回はこれでうまくいったのでこのままに. inet dhcpがなぜかうまくいかず,諦めてこんな感じに. sudo systemctl restart networkingで再起動できるが,おそらく初回は再起動必須なのでsudo rebootを実行して再起動.

再起動して, wlan0state UPになり,IPアドレスを取得できていればOK.