Raspbianのネットワーク管理をNetwork-Managerにした
Raspbianのネットワーク設定周り、大昔は/etc/network/interfaces
だったのが、
いつの頃からか/etc/dhcpcd.conf
で設定するようになって、固定IPにするときとか
/etc/dhcpcd.conf
を編集している。
加えて、Wifiを設定するのであれば/etc/wpa_supplicant/wpa_supplicant.conf
を編集し、
USBドングルを使ってモデムで繋ぐならばwvdialやpppconfigを...と言った感じで、
とにかく設定が散らばっていてめんどくさい。
以前から普通のデスクトップLinuxみたいにNetwork-Managerでやってしまったほうが楽なのでは... と思っていたけど、バージョン的にnmcli(Network-ManagerのCUIクライアント)でできることが少なくて見送っていた。
去年からRaspbianのBusterを使うようになり、 「そう言えばnmcliのバージョンってどうなったんだろ?」と思って試しに入れてみたら、 結構バージョン上がっていて色々とできるようになっていた。 この際なのでネットワークまわりをNetwork-Manager使うようにしてみた。
環境設定
使ったraspbian OSのバージョンはRaspbian Buster Liteの2020-02-13バージョン。
aptでnetwork-manager
をインストールして、dhcpcdは止めて再起動する。
$ sudo apt-get update $ sudo apt-get install -y network-manager $ sudo systemctl disable dhcpcd.service $ sudo reboot
これで準備は完了。
Wifiや有線の設定
まずはnmcli connection
で接続設定を一覧取得する。
$ sudo nmcli connection NAME UUID TYPE DEVICE Wired connection 1 00000000-0000-0000-0000-000000000000 ethernet eth0
それからnmcli device
でネットワークインターフェイスの状態を取得する。
$ sudo nmcli device DEVICE TYPE STATE CONNECTION eth0 ethernet connected Wired connection 1 wlan0 wifi disconnected -- lo loopback unmanaged --
とりあえずWifi繋ぐためにnmcli device wifi
でWifiネットワークを探す(実際の値は????????????ではない)。
$ sudo nmcli device wifi IN-USE SSID MODE CHAN RATE SIGNAL BARS SECURITY ???????????? Infra 1 130 Mbit/s 89 ▂▄▆█ WPA1 WPA2 ???????????? Infra 11 195 Mbit/s 70 ▂▄▆_ WPA1 WPA2 ???????????? Infra 36 270 Mbit/s 57 ▂▄▆_ WPA1 WPA2 ???????????? Infra 5 260 Mbit/s 54 ▂▄__ WPA2 ???????????? Infra 11 195 Mbit/s 49 ▂▄__ WPA2 ???????????? Infra 11 195 Mbit/s 49 ▂▄__ WPA2 ???????????? Infra 108 405 Mbit/s 44 ▂▄__ WPA1 WPA2 ???????????? Infra 100 540 Mbit/s 40 ▂▄__ WPA2 ???????????? Infra 6 54 Mbit/s 39 ▂▄__ WEP ???????????? Infra 6 270 Mbit/s 37 ▂▄__ WPA2 ???????????? Infra 6 135 Mbit/s 25 ▂___ WPA2 ???????????? Infra 116 405 Mbit/s 25 ▂___ WPA2 ???????????? Infra 3 130 Mbit/s 22 ▂___ WPA1 WPA2 ???????????? Infra 52 405 Mbit/s 22 ▂___ WPA2
nmcli device wifi connect
でWifiを設定する。
$ nmcli device wifi connect <SSID> password <password> Device 'wlan0' successfully activated with '00000000-0000-0000-0000-000000000000'.
これでWifiは繋がる。
次にnmcli connection add
で有線接続を固定IPにする。
$ sudo nmcli connection add con-name Home \ type ethernet \ ifname eth0 \ ipv4.addresses 192.168.1.99/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 8.8.8.8 ipv4.method manual Connection 'Home' (00000000-0000-0000-0000-000000000000) successfully added.
作った接続を使うためにnmcli connection down
でデフォルトの有線接続を止める(sshでログイン中の場合、切断されるので注意)。
$ sudo nmcli connection down Wired\ connection\ 1
改めて接続設定を確認する。
$ sudo nmcli connection NAME UUID TYPE DEVICE ?????????????? 00000000-0000-0000-0000-000000000000 wifi wlan0 Home 00000000-0000-0000-0000-000000000000 ethernet eth0 Wired connection 1 00000000-0000-0000-0000-000000000000 ethernet --
作った接続を使うので、nmcli connection delete
でデフォルトの有線接続は削除する。
$ sudo nmcli connection delete Wired\ connection\ 1 Connection 'Wired connection 1' (00000000-0000-0000-0000-000000000000) successfully deleted.
コマンドで操作した設定ファイルは/etc/NetworkManager/system-connections
配下に保存される。
設定ファイルを手で触ってもいいけど、接続の追加、編集、削除が全部コマンドでできて、かなり楽。
USBドングルでアクセスポイントに繋ぐ
wvdialをやめるために、USBドングルの設定も試す。手持ちのL-02Cを使った。 そういえばいつの間にかRaspbianにusb_modeswitchって標準搭載されてる気がする。 L-02Cはudevのルール書かなくても自動でスイッチされてモデムとして認識される。
USBポートに挿してネットワークインターフェイスの状態を見る。
$ sudo nmcli device DEVICE TYPE STATE CONNECTION eth0 ethernet connected Home wlan0 wifi connected ???????????? ttyUSB2 gsm disconnected -- lo loopback unmanaged --
iijmioのアクセスポイントで設定してみる。
$ sudo nmcli connection add autoconnect true \ con-name iijmio \ type gsm \ apn iijmio.jp \ user mio@iij \ password iij \ gsm.number *99***1# \ ppp.refuse-eap true \ ppp.refuse-mschap true \ ppp.refuse-mschapv2 true \ ifname "*" Connection 'iijmio' (00000000-0000-0000-0000-000000000000) successfully added.
設定完了してPPPが繋がると接続状態は次のようになる。
$ sudo nmcli connection NAME UUID TYPE DEVICE Buffalo-G-5209 00000000-0000-0000-0000-000000000000 wifi wlan0 Home 00000000-0000-0000-0000-000000000000 ethernet eth0 iijmio 00000000-0000-0000-0000-000000000000 gsm ttyUSB2
PPP接続は時々ちゃんと繋がらないことがあり、syslogみると次みたいなエラーになっている。
Feb 29 17:13:20 raspberrypi NetworkManager[343]: <warn> [1582964000.7050] modem-broadband[ttyUSB2]: failed to connect modem: 34
こういう場合はModemManagerを再起動して、それからコネクションを開始する。
$ sudo systemctl restart ModemManager.service $ sudo nmcli connection up iijmio Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)
この辺りのワークアラウンドはwvdial使っていても遭遇したことがあって、プロセス監視してだめだなと検知したら落としてもう一度みたいにやってたのに近いかも。
とりあえず設定を一本化できるのでやはり楽。
Wifiアクセスポイント化
Raspberry PI自身をWifiアクセスポイント化して接続させるやつ。 前回はhostapdでやったけど、これもNetwork-Managerだけでできる。
wifiタイプの接続を作るときにモードをap
にすればいい。
$ sudo nmcli connection add con-name RPi-AP \ type wifi \ ifname wlan0 \ wifi.ssid RPi-AP \ wifi.mode ap \ wifi-sec.psk raspberry \ ipv4.method manual \ ipv4.addresses 192.168.100.1/24 \ ipv4.gateway 192.168.100.1 \ wifi-sec.key-mgmt wpa-psk Connection 'RPi-AP' (00000000-0000-0000-0000-000000000000) successfully added.
ログの調整
デフォルトだとsyslogにinfoレベルでログが出過ぎるので、/etc/NetworkManager/NetworkManager.conf
にログレベルを設定して調整する。
[main] plugins=ifupdown,keyfile [ifupdown] managed=false [logging] level=WARN
感想
設定を一本化できて楽。しばらく動かしてみたが、dhcpcdをやめて駄目になった部分もみられない。 もう標準でNetwork-Managerでいいんじゃないかな...という印象。
ついでにプログラムから設定変更できるようにしたいのでpython用のライブラリ作った。
とりあえず必要最低限程度に実装。この前やったWifi設定のをもっといい感じにしてみたい。