Estou tentando configurar um contêiner nspawn no Ubuntu 20.04.3. A configuração de rede do host contém uma interface de ponte:
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
O contêiner é iniciado com:
systemd-nspawn -UbM helloworld --network-bridge=br0
Quando o contêiner é iniciado, a vb-helloworld
interface é criada:
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)
No container, existe uma interface host0
, que deve ser tratada por 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
O container tem a interface:
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)
...
Infelizmente, networkd parece não encontrar a interface host0
. Os endereços não são atribuídos, nem ip4 nem ip6. Quando altero o Name
parâmetro na seção [Match]
para *
, os endereços são atribuídos à lo
interface.
O que estou fazendo errado?
O Systemd já vem com uma configuração de rede correspondente à
host0
interface:Networkd lê todos os arquivos .network em ordem ascibética, e o primeiro arquivo correspondente vence. (Em ASCII, a ordem é aproximadamente
0-9 A-Z a-z
.) Para que sua configuração personalizada tenha prioridade, o nome do arquivo deve ser ordenado antes80-container-host0
de , como50-custom-host0
.(O diretório só importa se dois arquivos tiverem o mesmo nome – nesse caso, um arquivo em /etc tem prioridade sobre um arquivo com nome idêntico em /usr/lib.)