Virtual-Machine
Systemd-networkd 似乎沒有在容器中找到介面
我正在嘗試在 Ubuntu 20.04.3 上設置一個 nspawn-container。主機網路配置包含一個橋接介面:
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet * netmask 255.255.255.255 broadcast 0.0.0.0 inet6 * prefixlen 64 scopeid 0x0<global> ether 41:8a:5b:d8:83:00 txqueuelen 1000 (Ethernet) RX packets 5914822 bytes 888728796 (888.7 MB) RX errors 0 dropped 449 overruns 0 frame 0 TX packets 30323548 bytes 37836188291 (37.8 GB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
容器開始於:
systemd-nspawn -UbM helloworld --network-bridge=br0
容器啟動時,
vb-helloworld
創建介面:vb-helloworld: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::c8fc:b8ff:fed1:176 prefixlen 64 scopeid 0x20<link> ether ca:fc:b8:d1:01:76 txqueuelen 1000 (Ethernet)
在容器中,有一個 interface
host0
,應該由systemd-networkd
config處理/etc/systemd/network/host0.network
:[Match] Name=host0 [Network] DHCP=false Address=*:*:*:*::100/64 Gateway=fe80::1 DNS=2a01:4ff:*::*:1 Address=192.168.50.10/24 Gateway=192.168.50.1 DNS=192.168.50.2 ConfigureWithoutCarrier=yes [Link] MACAddress=f6:d9:2b:ba:7a:1d ARP=true RequiredForOnline=yes [Address] Address=*:*:*:*::100/64 Scope=global [Route] Gateway=fe80::1 Scope=global
容器有介面:
host0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 169.254.214.0 netmask 255.255.0.0 broadcast 169.254.255.255 inet6 fe80::f4d9:2bff:feba:7a1d prefixlen 64 scopeid 0x20<link> ether f6:d9:2b:ba:7a:1d txqueuelen 1000 (Ethernet) ...
不幸的是,networkd 似乎沒有找到 interface
host0
。沒有分配地址,既不是 ip4 也不是 ip6。當我將Name
部分中的參數更改[Match]
為 時*
,地址將分配給lo
介面。我究竟做錯了什麼?
Systemd 已經帶有與
host0
介面匹配的網路配置:/usr/lib/systemd/network/80-container-host0.network
Networkd 以 asciibetical 順序讀取所有 .network 文件,第一個匹配的文件獲勝。(在 ASCII 中,順序大致為
0-9 A-Z a-z
。)為了使您的自定義配置優先,其文件名必須在之前80-container-host0
排序,例如50-custom-host0
.(該目錄僅在兩個文件具有相同名稱時才重要——在這種情況下,/etc 中的文件優先於 /usr/lib 中的同名文件。)