(2022-07-12 初稿)
はじめに
2022年6月上旬から、ずっと悩んでいた現象の対策がわかったのでメモを残す。
その現象とは、DebianでNetworkManagerを用いてイーサネットで接続していると、起動直後はWeb接続できるが、数分後にWeb接続できなくなる現象だ。
なお、Web接続できなくなるだけで、他のPCへのpingやsshは正常に動作する。
筆者の環境
Linux hoge 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64 GNU/Linux LXDE環境で NetworkManagerを用いてイーサネットでネット接続
最初はWebに接続できて、その後接続できなくなる現象
起動直後またはネットワーク設定変更直後は、Web接続可能だが、2〜3分後にWeb接続できなくなる。ただし、同じネットワーク内の他のPCなどにSSH接続などは可能。
起動直後のNetworkManagerの「接続情報」
起動直後は、Web接続が可能で、以下の画像のとおりゲートウェイ(デフォルトルート)が設定されている。
なお、確認方法は、NetworkManagerのアイコンを右クリックすると「接続情報」を見ることができる。
赤丸で示したとおり、ゲートウェイにIPアドレスが記載されている。
起動後、Web接続できなくなるNetworkManagerの「接続情報」
起動後、数分するとWeb接続できなくなる。その時の「接続情報」は以下のとおり。
ゲートウェイ(デフォルトルート)が、0.0.0.0に設定されている。
原因を探る
不可解な現象なので、以下のとおり/var/log/syslogを確認してみた。
syslogの確認
/var/log/syslogを追うと以下のような記述を発見。
$ sudo less /var/log/syslog Jul 12 09:43:26 mou connmand[394]: enp2s0f1 {add} route 0.0.0.0 gw 0.0.0.0 scope 253 <LINK>
connmandにより、ゲートウェイが0.0.0.0に設定されているよう…
(筆者の考えている原因)
同じネットワークの中に、DHCPサーバがある場合に、正常にゲートウェイ等の情報が取得できればWeb接続が可能であるが、DHCPサーバがない場合や不完全なネットワーク情報しか取得できない場合に、デフォルトゲートウェイが「0.0.0.0」に設定されてしまうのではないかと推察(あくまでも筆者の推測である)。
対策
connmanctlで対策
connmandというデーモンでネットワークを変更されているようなので、connmanctlで設定をし直せばつながるようになる。
ちなみに、connmanctlについては初めて知ったので、以下のサイトを参考にさせて頂いた(多謝)。
例として、以下の設定を行う。
IP address: 192.168.22.200 Netmask: 255.255.255.0 Gateway: 192.168.22.1 DNS server: 192.168.1.1
まずは、現在の接続サービスの確認。
$ connmanctl services *AO Wired ethernet_80fa5x3fxx1x_cable #Macアドレスは変更してある
続いて、ethernetにネットワークを設定
(nameserverを設定し直さない場合) $ sudo connmanctl config ethernet_80fa5x3fxx1x_cable --ipv4 manual 192.168.22.200 255.255.255.0 192.168.22.1 (nameserverを設定し直す場合) $ sudo connmanctl config ethernet_80fa5x3fxx1x_cable --ipv4 manual 192.168.22.200 255.255.255.0 192.168.22.1 --nameservers 192.168.200.36
上記のいずれかのコマンドで、ネットワークの再起動等しなくてもWeb接続が可能となる。
bashスクリプトに
コマンドが少し長くて覚えきれそうにないので、以下のとおりBashスクリプトにした。
ちなみに、connmanctlで一度設定すると、再起動後も正常に動作するので、一度だけ実行すれば良いので、スクリプトにする意味は少ない。(^^ゞ
$ cat set_network #!/bin/bash # Written by H.Yamada # start ver0.01 2022-07-12 # ip route #default via 192.168.22.1 dev enp2s0f1 #192.168.22.0/24 dev enp2s0f1 proto kernel scope link src 192.168.22.200 #192.168.22.1 dev enp2s0f1 scope link
#192.168.200.36 via 192.168.22.1 dev enp2s0f1 # rslt=$(/usr/bin/connmanctl services) set ${rslt} srvc=${3} # service rslt=$(/usr/bin/ip route | grep 'default via') set ${rslt} gway=${3} # gateway rslt=$(/usr/bin/ip route | grep 'link src') set ${rslt} ip=${9} # IP address sudo /usr/bin/connmanctl config ${srvc} --ipv4 manual ${ip} 255.255.255.0 ${gway}
おわりに
Debian 11(Bullseye)のネットワーク接続は、NetworkManagerまたはsystemdで行われていると思っていたので、connmanctlで簡単に設定できるとは思いもよらなかった。
上記の思い込みがあり、NetworkManagerのアイコンで'有線接続 1'を切断して再接続したり、以下のコマンドを実行したりしてきたが、ときどきしか設定がうまくいかなかった。
(うまく行かないコマンドの例) sudo nmcli con modify '有線接続 1' ipv4.gateway 192.168.22.1 sudo nmcli con down '有線接続 1' sudo nmcli con up '有線接続 1' sudo systemctl restart NetworkManager
今回、connmanctlを初めて知り、また、とても設定が簡単なのでDebianのマニュアルなどでももっと宣伝して欲しいと思った。
なお、ここでは記述しないが、Wi-Fiの接続も制御できるので、NetworkManagerよりも万能な気がしている。