はじめに
Ubuntu の Network 設定は17.10から netplanベースに変更されている。ただ、Ubuntu を Desktop として利用する場合は従来通りの NetworkManager ベースとなっている。どうなっているのかのメモ。
ここの記事が一番わかりやすかった。
調査したバージョン
-
Ubuntu 18.04. Ubuntu Desktop での Network設定は、19.10でも NetworkManager 経由で変わりはなかった。
-
Ubuntu 20.04. Ubuntu Desktop でも変更なし
-
Ubuntu 22.04. Ubuntu Desktop でも変更なし
Ubuntu Desktop のデフォルト
Ubuntu DesktopのデフォルトNetPlan設定. 18.04 ~ 22.04では共通だった。
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
このrenderer
キーは、NetworkManager か networkd のどちらかを入れられる。Desktop を構築した場合のデフォルトは NetworkManagerとなっている。 Ubuntu Server だと networkd になる. NetworkManager は GUI 操作で設定できるため、Desktop PC として利用するのならこれでも良い。
この実体がどこかというと、/etc/NetworkManager
配下にある。GUI上からInterface設定をデフォルト値から編集すると、/etc/NetworkManager/system-connections/
配下にConfigが生成される。
少し複雑なことを実現するためには NetworkManager よりも networkd を使うべきなのだろう。ただ、 NetPlan を使えばすべてを解決できるかというとそうでもない。例えば NetPlanでは Promiscuous Interfaceを設定できず、スクリプトで頑張ることが推奨されていたりする。頑張った例はこれ。
NetPlanを実際に書いてみる。
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: false
addresses: [192.168.1.66/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8]
ブリッジドメインとかを定義する際は renderer を networkd にしたほうが使いやすい。
Ubuntu 22.04から gateway4
が非推奨となり、routes
コマンドの利用が推奨されるようになった( gateway4 でも動きはした)。
netplanの適用
いきなり変更する
$ sudo netplan apply
一息入れる
Syntax Checkしたり、ダメだったら切り戻したりするには try
オプションをつける。こっちのほうが安心してできる。
$ sudo netplan try
$ sudo netplan try --timeout 10
[sudo] password for shakapon:
Do you want to keep these settings?
Press ENTER before the timeout to accept the new configuration
Changes will revert in 10 seconds
(10秒後)
Reverting.
参考
アドレス/ルーティング設定確認コマンド群
$ ip address show ens3
$ ip link
$ ip route
DNS設定確認
$ resolvectl
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (ens3)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.8.8
DNS Servers: 8.8.8.8
$ systemd-resolve --status #20.04ではこれも利用可能
Ubuntuが名前解決する際、実際にどのDNSを叩いているかを確認するコマンドが、22.04から resolvectl
に変更された。resolvectl
は20.04でも利用可能で、出力結果は従来のsystemd-resolve --status
から変わらない。