Contents
Overview
Netplan を使用してネットワーク設定を行います。デスクトップ版は CentOS 等と同じく NetworkManager を使用(Netplan のみに変更可)していますが、本稿では省略します。
- 設定ファイルは /etc/netplan/*.yaml となります。複数の設定ファイルが存在する場合、番号順に読み込まれて最終的に結合されます。
- yaml はブロックスタイルでもフロースタイルでも記述可能です。yaml は基本的にブロックスタイルですが、ブロックスタイルは内容によって縦に長くなり可読性が悪いと思っています。本稿の例では Ansible での扱い易さ等も考慮して、ブロックスタイルとフロースタイルを併用しています。
- 本稿の例では domain search を指定していません。個人的に必要が無い為です。必要のない無駄な設定値は排除すべきです。
- 本稿の例では デュアルスタック (IPv4/IPv6) として記載しています。Netplan では IPv6 としての特別な設定項目は存在しない為、IPv4 と並べて設定するだけです。IPv6 が不要ならその行を削除するだけで問題ありません。
デフォルト値 OS インストール時に DHCP を指定
OS インストール時に DHCP を指定した場合のデフォルト値は下記の通りです。
myadmin@ubuntu:~$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp1s0:
dhcp4: true
version: 2
固定 IP アドレス
固定 IP アドレスに変更する場合の設定例は下記の通りです。00-installer-config.yaml を変更しても良いですがファイル名が実態にそぐわないためリネームして新規に作成しています。
myadmin@ubuntu:~$ sudo mv /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.orig myadmin@ubuntu:~$ sudo tee /etc/netplan/00-main.yaml <<"EOF" network: version: 2 ethernets: enp1s0: addresses: - 10.0.33.112/24 - fd00:0000:0000:0000:0000:0000:0a00:2170/120 nameservers: addresses: - 10.0.33.160 - fd00:0000:0000:0000:0000:0000:0a00:21a0 routes: - {to: default, via: 10.0.33.1} - {to: default, via: fd00:0000:0000:0000:0000:0000:0a00:2101} EOF
20.04 までは、ルーティングの設定項目に gateway4 が使われていました。また、22.04 でも初期状態は gateway4 が使用されていますが(ISO のバージョンアップで変わるかもしれません)、最新では gateway4 は非推奨となっています。現時点で設定の有効化は可能ですが下記の通り警告が表示されます。前述の新しい設定に変更しましょう。
myadmin@ubuntu:~$ cat /etc/netplan/00-main.yaml network: version: 2 ethernets: ens33: addresses: [10.0.33.112/24] nameservers: addresses: [10.0.51.71] gateway4: 10.0.33.1 myadmin@ubuntu:~$ sudo netplan apply ** (generate:1353): WARNING **: 21:59:37.507: `gateway4` has been deprecated, use default routes instead. See the 'Default routes' section of the documentation for more details.
ブリッジインターフェイス
ブリッジインターフェイス > 固定 IP アドレス
ブリッジインターフェイスの基本的な設定例は下記の通りです。br1000 に含めるインターフェイスを追加する場合は、network.bridges.br1000.interfaces にスレーブインターフェイスを追加していきます(これは多分ほとんどのケースで使いません)。
myadmin@ubuntu:~$ sudo tee /etc/netplan/00-main.yaml <<"EOF"
network:
version: 2
ethernets:
enp1s0: {}
bridges:
br1000:
addresses:
- 10.0.33.112/24
- fd00:0000:0000:0000:0000:0000:0a00:2170/120
nameservers:
addresses:
- 10.0.33.160
- fd00:0000:0000:0000:0000:0000:0a00:21a0
interfaces: [enp1s0]
routes:
- {to: default, via: 10.0.33.1}
- {to: default, via: fd00:0000:0000:0000:0000:0000:0a00:2101}
EOF
ブリッジインターフェイス > IP アドレスなし
KVM の仮想マシンにブリッジインターフェイスを接続する場合は KVM 自身に IP アドレスが不要なケースがほとんどです。その場合は下記のように設定します。
myadmin@ubuntu:~$ sudo tee /etc/netplan/00-main.yaml <<"EOF"
network:
version: 2
ethernets:
enp1s0: {}
bridges:
br1000:
interfaces: [enp1s0]
EOF
ブリッジインターフェイス > 空ブリッジ
空ブリッジ(スレーブインターフェイスなし)は、外部と接続しない内部ブリッジです。利用ケースとしては、おそらく KVM として使用する場合だけです。外部に接続する仮想ルーター等は外部接続可能なブリッジ(br1000)と空ブリッジをアタッチ(br1001)、仮想マシンは空ブリッジのみにアタッチ、この場合、仮想マシンは仮想ルーターを経由して外部に接続します。良く使われる構成です。
myadmin@ubuntu:~$ sudo tee /etc/netplan/00-main.yaml <<"EOF"
network:
version: 2
ethernets:
enp1s0: {}
bridges:
br1000:
interfaces: [enp1s0]
bridges:
br1001:
EOF
VLAN インターフェイス
VLAN インターフェイスの設定例は下記の通りです。IEEE802.1q に基づき、VLAN ID 1 のインターフェイスが enp1s0 に作成され、VLAN ID でブロードキャストドメインが分割されます。
myadmin@ubuntu:~$ sudo tee /etc/netplan/00-main.yaml <<"EOF"
network:
version: 2
ethernets:
enp1s0: {}
vlans:
vlan1:
addresses:
- 10.0.0.89/24
- fd00:0000:0000:0000:0000:0000:0a00:0059/120
nameservers:
addresses:
- 172.16.96.160
- fd00:0000:0000:0000:0000:0000:ac10:60a0
routes:
- {to: default, via: 10.0.0.1}
- {to: default, via: fd00:0000:0000:0000:0000:0000:0a00:0001}
id: 1
link: enp1s0
EOF
設定の有効化
まず get コマンドでエラーが無い事を確認します。完全ではなさそうですが、少なくとも構文に問題がある場合はこの時点でエラーが出力されます。get コマンドの出力形式は yaml のブロックスタイルになります。複数の設定ファイルが存在する場合は結合されて表示されます。
myadmin@ubuntu:~$ netplan get
network:
version: 2
ethernets:
enp1s0: {}
vlans:
vlan1:
addresses:
- "10.0.0.89/24"
- "fd00:0000:0000:0000:0000:0000:0a00:0059/120"
nameservers:
addresses:
- 172.16.96.160
- fd00:0000:0000:0000:0000:0000:ac10:60a0
routes:
- to: "default"
via: "10.0.0.1"
- to: "default"
via: "fd00:0000:0000:0000:0000:0000:0a00:0001"
id: 1
link: "enp1s0"
apply コマンドで設定を有効化します。SSH での操作で IP アドレスを変更する場合は reboot しましょう。
myadmin@ubuntu:~$ sudo netplan apply
確認
IP アドレス
IP アドレスの確認には ip address show を使います。これは良く ip a と省略されますが、本稿ではコマンドの省略表記を記載しません(少なくともドキュメントでコマンドの省略表記を用いるべきではないと思っています)。
myadmin@ubuntu:~$ ip address show 1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp1s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:c4:30:7a brd ff:ff:ff:ff:ff:ff inet6 fe80::5054:ff:fec4:307a/64 scope link valid_lft forever preferred_lft forever 3: vlan1@enp1s0: mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:c4:30:7a brd ff:ff:ff:ff:ff:ff inet 10.0.0.89/24 brd 10.0.0.255 scope global vlan1 valid_lft forever preferred_lft forever inet6 fd00::1:5054:ff:fec4:307a/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 2591971sec preferred_lft 604771sec inet6 fd00::a00:59/120 scope global valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fec4:307a/64 scope link valid_lft forever preferred_lft forever
ルーティング
IPv4 のルーティングテーブルは ip route list で確認します。
myadmin@ubuntu:~$ ip route list
default via 10.0.0.1 dev vlan1 proto static
10.0.0.0/24 dev vlan1 proto kernel scope link src 10.0.0.89
IPv6 のルーティングテーブルは ip -6 route list で確認します。
myadmin@ubuntu:~$ ip -6 route list
::1 dev lo proto kernel metric 256 pref medium
fd00::a00:0/120 dev vlan1 proto kernel metric 256 pref medium
fd00:0:0:1::/64 dev vlan1 proto ra metric 1024 expires 2591690sec pref medium
fe80::/64 dev enp1s0 proto kernel metric 256 pref medium
fe80::/64 dev vlan1 proto kernel metric 256 pref medium
default proto static metric 1024 pref medium
nexthop via fd00::a00:1 dev vlan1 weight 1
nexthop via fe80::b6fb:e4ff:fe1a:67ae dev vlan1 weight 1
参照先 DNS サーバー
CentOS は /etc/resolv.conf に参照先 DNS サーバーの IP アドレスを記載していましたが、Ubuntu では基本的に resolv.conf を直接編集しません。Ubuntu の resolv.conf は 127.0.0.53 が設定されており、127.0.0.53 は systemd-resolved(DNS スタブリゾルバ)が使用しています。
myadmin@ubuntu:~$ cat /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
search .
この為、Netplan で設定した DNS の有効性を確認するには systemd-resolved の設定を確認する必要があります。resolvectl コマンドで確認します(systemd-resolve –status は 22.04 から削除されています)。
myadmin@ubuntu:~$ resolvectl status
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 5 (vlan1)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 172.16.96.160
DNS Servers: 172.16.96.160 fd00::ac10:60a0
トラブルシューティング等で DNS のキャッシュを削除したい場合は flush-caches を使用します。
myadmin@ubuntu:~$ resolvectl flush-caches