UbuntuサーバーでNetworkManagerを使う

Ubuntu 18.04/20.04サーバーでネットワークに関する設定を行うには、systemd-networkdとnetplanを使うそうです。

※Ubuntu 18.04/20.04デスクトップでは、NetworkManagerを使用している。

もし、CentOS 7のようにNetworkManagerで設定したい場合は、network-managerというパッケージをインストールします。

というわけで、VirtualBox上で動いているUbuntu 20.04にnetwork-managerをインストールしてみました。

$ sudo apt install -y network-manager

これで、nmcliやnmtuiといったコマンドが使えるようになります。

$ which nmcli
/usr/bin/nmcli
$ which nmtui
/usr/bin/nmtui

ところが・・・

ネットワークインターフェースが管理されていない

試しに、ネットワークインターフェースの状態を調べてみます。

$ nmcli device
DEVICE  TYPE      STATE      CONNECTION 
enp0s3  ethernet  unmanaged  --         
enp0s8  ethernet  unmanaged  --         
lo      loopback  unmanaged  --         

状態がunmanaged(管理されていない)と出ます。
どうやら、パッケージをインストールしただけではダメみたいです。

困りましたな。

解決策

netplanの設定ファイルで、systemd-networkdではなくNetworkManagerを使用するように指定してやります。

具体的には、/etc/netplan/99-my-config.yamlを以下のように記述します(赤字部分を追加する)。

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enp0s8:
      dhcp4: false
      addresses: [192.168.40.106/24]
      optional: true

Ubuntuインストール直後は、/00/installer-config.yamlだけが存在するが、このファイルを直接修正するのは好ましくないので、新たなYAMLファイルを作成し、変更部分を記述する。

こちらの記事を参考にしました。

ふー、今日もこれで一日が終わってしまった。
こんなことで、本当にあしたは来るのだろうか。

あしたは来ない

VirtualBoxのゲストOSとして動いているUbuntuはNetworkManagerで制御できるようになったが、実機のUbuntu 20.04マシンがうまく動きません。:-(
www.yahoo.co.jpにpingが通らないのです。

調べた結果、/etc/resolve.confのネームサーバー指定がおかしいことが判明しました。

■/etc/resolve.conf

nameserver 127.0.0.53 # これがおかしい
options edns0

そこで、nameserverのアドレスを192.168.1.1(ルーターのアドレス)に変更してやったところ、外部につながりましたとさ。

ところが、再び99-my-config.yamlの設定を変更して、systemd-networkdを使用するようにしてやると、/etc/resolove.confのnameserverの値が127.0.0.53に戻っているではありませんか!

■/etc/netplan/99-my-config.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s8:
      dhcp4: false
      addresses: [192.168.40.106/24]
      optional: true

反映させる。

$ sudo netplan apply

/etc/resolve.confを覗いてみると・・・

$ cat /etc/resolve.conf
〜省略〜
nameserver 127.0.0.53
options edns0

うーん、いったいどうしたことでしょう。
困りましたな・・・

ん?
/etc/resolve.confのコメントを読んでみると、
「このファイルは、systemd-resolvedによって管理されているから、編集してはいけない」
と書いてありました。
より正確に言うと、『このファイル』というのは、/run/systemd/resolve/stub-resolv.confのことで、/etc/resolve.confはそのファイルへのシンボリックリンクになっています。
サードパーティのプログラムは、/etc/resolve.confを通してのみアクセスしてもよいそうです。

ということは、上でやったようにnameserverの値を書き換えるのは問題なさそうです。

しかし、systemd-networkd ⇒ NetworkManagerの切り替えをやる度に、/etc/resolve.confを修正しなければならないのは気持ち悪いし、面倒くさい。

というか、そもそもこんな切り替えをやること自体がおかしいのかも。
あんまり意味がないし。

とりあえず、これ以上この件を追求しても、あしたのためにならなさそうなので、調査は終了します。

追記

systemd-networkdを使用した時、nameserverの値が127.0.0.53でも外部にアクセスできたのは何故?