systemd-networkd で有線と無線をいい感じにする
Linux のネットワーク管理には NetworkManager が使われることも多いと思いますが、systemd-networkd を利用してみます。ワイヤレス認証には iwd を使います。
有線と無線のどちらも使えるようにして、両方接続されているときは有線側で通信するようにしていきます。ネットワークは家庭で使う一般的な WiFiルータから dhcp でIPアドレスやゲートウェイ、DNSの情報を取得する環境です。
ネットワーク設定の管理に systemd-networkd.service、名前解決に systemd-resolved.service 、ワイヤレス認証に iwd.service が必要なので有効にして起動しておきます。
ネットワークインターフェイスの確認
networkctl コマンドでインターフェイス名を確認します。
$ networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp0s31f6 ether no-carrier configuring
4 wlan0 wlan routable configured
3 links listed.
今回使用している Thinkpad T480 では有線が enp0s31f6、無線が wlan0 となります。
ワイヤレス認証
iwctl コマンドを使ってWiFiの認証を行います。
# iwctl station wlan0 connect <SSID>
実行すると <SSID> のパスワードを聞かれるので入力してWiFiへ接続します。
設定ファイル
systemd-networkd は /etc/systemd/network 内の .netwok ファイルの設定に従って接続するので有線と無線それぞれのファイルを用意します。
[Match]
Name=enp0s31f6
[Network]
DHCP=yes
[DHCPv4]
RouteMetric=100
[IPv6AcceptRA]
RouteMetric=100
[Match]
Name=wlan0
[Network]
DHCP=yes
IgnoreCarrierLoss=3s
[DHCPv4]
RouteMetric=600
[IPv6AcceptRA]
RouteMetric=600
RouteMetric の値で優先順位が決まり小さいほうが優先されるので、有線を 100 にして無線を 600 にしています。
networkctl コマンドで SETUP が configuring、configured になっていれば設定ファイルが読み込まれていますし、OPERATIONAL が routable であれば通信できる状態です。
確認
有線、無線ともに接続した状態を見てみます。
networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp0s31f6 ether routable configured
4 wlan0 wlan routable configured
3 links listed.
経路確認
$ ip route
default via 192.168.0.1 dev enp0s31f6 proto dhcp src 192.168.0.154 metric 100
default via 192.168.0.1 dev wlan0 proto dhcp src 192.168.0.156 metric 600
...
enp0s31f6 と wlan0 があって metric も設定通りになっています。
参考
Discussion