systemd-networkd + wpa_supplicant でワイヤレスネットワーク接続

netctl で繋いでいたが、別のマシンで systemd-networkd での接続が比較的スムーズに行ったので、母艦の ArchLinux も systemd-networkd で管理することにした。netctl で接続したときはツールがいろいろ出てきて(wifi-menu, wpa_supplicant)、正直どうやって繋がっているのか分かっておらず、接続が切れたときにパニックに陥りすぐ復旧できなかったというのも systemd-networkd に揃える目的の一つ。

基本的に systemd-networkd - ArchWiki に従って進めることでうまくいった。

2010年くらいの Mac miniパーティションを切って Arch Linux を入れている。Wi-Fi インターフェース(手元だと wlp2s0b1)は認識されているのが前提。

$ ip link
...
2: wlp2s0b1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
...

まず netctl 時代に作った設定ファイルを消す。systemd-networkd が netctl で作った設定ファイルを使うことも可能のようだが、前述の理由と、Arch Wiki にある方法が最小設定だろうということで、wpa_supplicant に置き換えていく。以下で全部だったと思うが確証はなく、実際は find /etc/systemd/ してネットワーク接続に関係しそうなサービスを全て消していった。

# rm /etc/netctl/wlp2s0*
# systemctl disable netctl-auto@wlp2s0
# systemctl disable 'netctl@wlp2s0b1\x2dSSID.service'

再起動してネットに繋がらないことを確認。次に WPA supplicant - ArchWiki に沿って Wi-Fi 接続設定ファイルを作る。

# cat /etc/wpa_supplicant/wpa_supplicant-wlp2s0b1.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

update_config=1 を追加すると wpa_cli による example.conf への変更が保存されるようになります。

とのこと。このあと wpa_supplicant-wlp2s0b1.conf に Wi-Fi SSID とパスコードが保存される。

# wpa_cli

ここでやることは Wiki にある内容とほぼ同じだったので割愛する。こちらを参照のこと。

WPA supplicant - ArchWiki

しかし私の場合初めに list_networks するとこれから繋ぐ SSID が登録されてあった。netctl も中で同じことをしていたのだろうか? 全て消し、 add_network set_network 0 ssid "MYSSID" set_network 0 psk "passphrase" enable_network 0 しなおした。save_config すると先ほどの wpa_supplicant-wlp2s0b1.conf に保存される。続いて起動時に接続を確立するようサービスを設定。

# systemctl start wpa_supplicant@wlp2s0b1.service
# systemctl enable wpa_supplicant@wlp2s0b1.service

Wi-Fi が利用できる状態になったところで、systemd-networkd がそれを利用しネット接続するための設定をする。Match さえすればファイル名はなんでも良いよう。

$ cat /etc/systemd/network/wlp2s0b1.network
[Match]
Name=wlp2s0b1

[Network]
DHCP=ipv4

全てのオプションは man systemd.network で見られる。

私の場合は再起動が必要だった。ネットに繋がれば成功。