とあるシステムの中の人

プログラミング、育児、武道、3Dグラフィック、ゲーム開発

ubuntuのネットワーク関連でハマったのでメモ

ubuntuのネットワーク関連でハマったのでメモ

  • とあるシステムで使用したOVAのネットワーク設定でハマってしまったのでメモ。

経緯

  • てっきりcentosで用意されているものだと思い込み、nmcliで固定IPを設定してしまったのがはじまり。
  • static routeを設定しようと、今の設定を確認するためにNetPlanのyamlを覗くと固定IPの設定がない・・・
  • なぜ!?
  • この時、そもそもNetPlanの理解が浅かった。(nmcliで設定した内容がファイルとかに吐き出される、程度の理解)
  • ということで、まずは、NetPlan is 何?

NetPlan is 何?

  • ネットワークの設定ツールをymlで設定できる。
  • インストーラーで指定したネットワーク設定をNetplanの設定として書き出し、インストール後も引き継ぐという仕様になっている。
  • つまり、複数のネットワークツールがあるものを、共通のフォーマットで使えるやつ、と理解した。
  • では、nmcliで設定した内容はどうなるの?

nmcli is 何?

  • nmcli は NetworkManager に含まれるツールの一つです
  • つまり、nmcliでは、NetworkManagerの設定がされていた。
  • ちなみにUbuntu 17.10からsystemd-networkdが標準装備。でも、該当のOVAではNetworkManagerを指定していた。(ゆえにnmcliで設定できた。)

実際にubuntu 22.04をデプロイして見てみる。

  • 構築直後のNetPlanの設定
root@ttmp:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      dhcp4: true
    ens192:
      dhcp4: true
  version: 2
root@ttmp:~# 
  • ちなみに、nmcliは入っていない。
root@ttmp:~# nmcli
-bash: nmcli: command not found
root@ttmp:~#
  • さらにちなみにsystemd-networkdはせっせと動いている。
root@ttmp:~# systemctl status systemd-networkd
● systemd-networkd.service - Network Configuration
     Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-02-26 13:53:15 UTC; 10min ago
TriggeredBy: ● systemd-networkd.socket
       Docs: man:systemd-networkd.service(8)
   Main PID: 655 (systemd-network)
     Status: "Processing requests..."
      Tasks: 1 (limit: 4558)
     Memory: 2.7M
        CPU: 41ms
     CGroup: /system.slice/systemd-networkd.service
             └─655 /lib/systemd/systemd-networkd

Feb 26 13:53:15 ttmp systemd-networkd[655]: lo: Gained carrier
Feb 26 13:53:15 ttmp systemd-networkd[655]: Enumeration completed
Feb 26 13:53:15 ttmp systemd[1]: Started Network Configuration.
Feb 26 13:53:15 ttmp systemd-networkd[655]: ens192: Link UP
Feb 26 13:53:15 ttmp systemd-networkd[655]: ens192: Gained carrier
Feb 26 13:53:15 ttmp systemd-networkd[655]: ens160: Link UP
Feb 26 13:53:15 ttmp systemd-networkd[655]: ens160: Gained carrier
Feb 26 13:53:15 ttmp systemd-networkd[655]: ens160: DHCPv4 address 192.168.11.13/24 via 192.168.11.1
Feb 26 13:53:16 ttmp systemd-networkd[655]: ens192: Gained IPv6LL
Feb 26 13:53:16 ttmp systemd-networkd[655]: ens160: Gained IPv6LL
root@ttmp:~# 
  • 同じ状況を再現するために、network-managerをインストールする。
apt install network-manager
  • インストールするだけではnetwork-managerでは管理してくれない。デバイスのステータスがunmanagedとなっている。
root@ttmp:~# nmcli device status
DEVICE  TYPE      STATE      CONNECTION 
ens160  ethernet  unmanaged  --         
ens192  ethernet  unmanaged  --         
lo      loopback  unmanaged  --         
root@ttmp:~# 
  • ちなみにインストールで/etc/NetworkManager配下にいろいろと作成された。
root@ttmp:~# ll /etc/NetworkManager
total 32
drwxr-xr-x  7 root root 4096 Feb 26 14:09 ./
drwxr-xr-x 87 root root 4096 Feb 26 14:09 ../
-rw-r--r--  1 root root   98 Jun  9  2022 NetworkManager.conf
drwxr-xr-x  2 root root 4096 Feb 26 14:09 conf.d/
drwxr-xr-x  5 root root 4096 Feb 26 14:09 dispatcher.d/
drwxr-xr-x  2 root root 4096 Jun  9  2022 dnsmasq-shared.d/
drwxr-xr-x  2 root root 4096 Jun  9  2022 dnsmasq.d/
drwxr-xr-x  2 root root 4096 Jun  9  2022 system-connections/
root@ttmp:~# 
  • network managerを使うにはnetplanの設定ファイルにrenderer: NetworkManagerと記述するだけで良い模様。
root@ttmp:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens160:
      dhcp4: true
    ens192:
      dhcp4: true
  version: 2
root@ttmp:~# 
  • 設定したらnetplan apply。
root@ttmp:~# netplan apply
WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.
root@ttmp:~# 
  • 使えるようになった
root@ttmp:~# nmcli
ens160: connected to netplan-ens160
    "VMware VMXNET3"
    ethernet (vmxnet3), 00:0C:29:D1:6E:72, hw, mtu 1500
    ip4 default
    inet4 192.168.11.13/24
    route4 192.168.11.0/24 metric 100
    route4 default via 192.168.11.1 metric 100
    inet6 fe80::20c:29ff:fed1:6e72/64
    route6 fe80::/64 metric 256

ens192: connecting (getting IP configuration) to netplan-ens192
    "VMware VMXNET3"
    ethernet (vmxnet3), 00:0C:29:D1:6E:7C, hw, mtu 1500

lo: unmanaged
    "lo"
    loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536

DNS configuration:
    servers: 192.168.11.1
    interface: ens160

Use "nmcli device show" to get complete information about known devices and
"nmcli connection show" to get an overview on active connection profiles.

Consult nmcli(1) and nmcli-examples(7) manual pages for complete usage details.
root@ttmp:~# 
  • 管理された。
root@ttmp:~# nmcli device status
DEVICE  TYPE      STATE                                  CONNECTION     
ens160  ethernet  connected                              netplan-ens160 
ens192  ethernet  connecting (getting IP configuration)  netplan-ens192 
lo      loopback  unmanaged                              --             
root@ttmp:~# 
  • IP設定してみる。
  • まずはデバイス名の確認。
root@ttmp:~# nmcli connection show
NAME            UUID                                  TYPE      DEVICE 
netplan-ens160  febc54dc-e29c-3939-a911-8a11855bd1c8  ethernet  ens160
 
netplan-ens192  bc9a68c9-4f66-3ff4-b4b3-cf1b373d9b02  ethernet  --     
root@ttmp:~# 
nmcli connection modify netplan-ens192 ipv4.address 192.168.0.10/24
  • 固定IPが設定されたことを観測。
root@ttmp:~# nmcli device show  ens192
GENERAL.DEVICE:                         ens192
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:D1:6E:7C
GENERAL.MTU:                            1500
GENERAL.STATE:                          70 (connecting (getting IP configuration))
GENERAL.CONNECTION:                     netplan-ens192
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/6
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.0.10/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.0.0/24, nh = 0.0.0.0, mt = 101
IP6.ADDRESS[1]:                         fe80::20c:29ff:fed1:6e7c/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 256
root@ttmp:~# 
  • IP設定されたことを ip aコマンドで確認
root@ttmp:~# ip a
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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:d1:6e:72 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.11.13/24 brd 192.168.11.255 scope global dynamic noprefixroute ens160
       valid_lft 172443sec preferred_lft 172443sec
    inet6 fe80::20c:29ff:fed1:6e72/64 scope link 
       valid_lft forever preferred_lft forever
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:d1:6e:7c brd ff:ff:ff:ff:ff:ff
    altname enp11s0
    inet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed1:6e7c/64 scope link 
       valid_lft forever preferred_lft forever
root@ttmp:~# 
  • しかし、netplan側は変わらず。
root@ttmp:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens160:
      dhcp4: true
    ens192:
      dhcp4: true
  version: 2
root@ttmp:~# 

netplanとどっちが優先されるのだろう?

  • こうしてみる
root@ttmp:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens160:
      dhcp4: true
    ens192:
      dhcp4: false
      addresses: [192.168.0.30/24]
  version: 2
root@ttmp:~# 
  • apply
root@ttmp:~# netplan apply
root@ttmp:~# 
  • netplanの設定が有効っぽい
root@ttmp:~# ip a
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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:d1:6e:72 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.11.13/24 brd 192.168.11.255 scope global dynamic noprefixroute ens160
       valid_lft 172784sec preferred_lft 172784sec
    inet6 fe80::20c:29ff:fed1:6e72/64 scope link 
       valid_lft forever preferred_lft forever
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:d1:6e:7c brd ff:ff:ff:ff:ff:ff
    altname enp11s0
    inet 192.168.0.30/24 brd 192.168.0.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed1:6e7c/64 scope link 
       valid_lft forever preferred_lft forever
root@ttmp:~# 
  • nmcliの設定も上書きされたっぽい
root@ttmp:~# nmcli device show  ens192
GENERAL.DEVICE:                         ens192
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:D1:6E:7C
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     netplan-ens192
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.0.30/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.0.0/24, nh = 0.0.0.0, mt = 101
IP6.ADDRESS[1]:                         fe80::20c:29ff:fed1:6e7c/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 256
root@ttmp:~# 

教訓とか

  • 設定と環境はちゃんと確認しようという話。OSのネットワーク関連は知識が微妙だったがこれにて深まったので、わりと良かったかも。