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でも外部にアクセスできたのは何故?