手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 Netplan ネットワーク設定

目次に戻る

Overview

Netplan を使用してネットワーク設定を行います。デスクトップ版は CentOS 等と同じく NetworkManager を使用(Netplan のみに変更可)していますが、本稿では省略します。

  • 設定ファイルは /etc/netplan/*.yaml となります。複数の設定ファイルが存在する場合、番号順に読み込まれて最終的に結合されます。
  • yaml はブロックスタイルでもフロースタイルでも記述可能です。yaml は基本的にブロックスタイルですが、ブロックスタイルは内容によって縦に長くなり可読性が悪いと思っています。本稿の例では Ansible での扱い易さ等も考慮して、ブロックスタイルとフロースタイルを併用しています。
  • 本稿の例では domain search を指定していません。個人的に必要が無い為です。必要のない無駄な設定値は排除すべきです。
  • 本稿の例では デュアルスタック (IPv4/IPv6) として記載しています。Netplan では IPv6 としての特別な設定項目は存在しない為、IPv4 と並べて設定するだけです。IPv6 が不要ならその行を削除するだけで問題ありません。
  • 設定ファイルのパーミッションは 600 にします。** (generate:3518): WARNING **: 01:03:10.543: Permissions for /etc/netplan/00-main.yaml are too open. Netplan configuration should NOT be accessible by others. のメッセージに対処するためです。

デフォルト値 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::a00:2170/120
      nameservers:
        addresses:
        - 10.0.33.160
        - fd00::a00:21a0
      routes:
      - {to: default, via: 10.0.33.1}
      - {to: default, via: fd00::a00:2101}
EOF
myadmin@ubuntu:~$ sudo chmod 600 /etc/netplan/00-main.yaml

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::a00:2170/120
      nameservers:
        addresses:
        - 10.0.33.160
        - fd00::a00:21a0
      interfaces: [enp1s0]
      routes:
      - {to: default, via: 10.0.33.1}
      - {to: default, via: fd00::a00:2101}
EOF
myadmin@ubuntu:~$ sudo chmod 600 /etc/netplan/00-main.yaml

IP アドレスなし

KVM の仮想マシンにブリッジインターフェイスを接続する場合は KVM 自身に IP アドレスが不要なケースがほとんどです。その場合は下記のように設定します。

myadmin@ubuntu:~$ sudo tee /etc/netplan/00-main.yaml <<"EOF" 
network:
  version: 2
  ethernets:
    enp1s0: {}
  bridges:
    br1000:
      interfaces: [enp1s0]
EOF
myadmin@ubuntu:~$ sudo chmod 600 /etc/netplan/00-main.yaml

空ブリッジ

空ブリッジ(スレーブインターフェイスなし)は、外部と接続しない内部ブリッジです。利用ケースとしては、おそらく 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
myadmin@ubuntu:~$ sudo chmod 600 /etc/netplan/00-main.yaml

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::a00:59/120
      nameservers:
        addresses:
        - 172.16.96.160
        - fd00::ac10:60a0
      routes:
      - {to: default, via: 10.0.0.1}
      - {to: default, via: fd00::a00:1}
      id: 1
      link: enp1s0
EOF
myadmin@ubuntu:~$ sudo chmod 600 /etc/netplan/00-main.yaml

設定の有効化

まず get コマンドでエラーが無い事を確認します。完全ではなさそうですが、少なくとも構文に問題がある場合はこの時点でエラーが出力されます。get コマンドの出力形式は yaml のブロックスタイルになります。複数の設定ファイルが存在する場合は結合されて表示されます。

myadmin@ubuntu:~$ netplan get
network:
  version: 2
  ethernets:
    enp1s0: {}
  vlans:
    vlan1:
      addresses:
      - "10.0.0.89/24"
      - "fd00::a00:59/120"
      nameservers:
        addresses:
        - 172.16.96.160
        - fd00::ac10:60a0
      routes:
      - to: "default"
        via: "10.0.0.1"
      - to: "default"
        via: "fd00::a00:1"
      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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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

目次に戻る

Ubuntu 22.04 Netplan ネットワーク設定

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る