如何在“systemd-nspawn”容器内启用网络?

如何在“systemd-nspawn”容器内启用网络?

如何让网络systemd-nspawn在 Ubuntu 20.04 中的容器内工作?我希望容器从本地 DHCP 服务器获取 IP 地址,使用我配置的名称服务器执行 DNS 查找,并具有 WAN/LAN 连接。

我按如下方式启动容器:

sudo systemd-nspawn --private-network --bind-ro="/etc/resolv.conf" --machine="TEST" --directory="<path_to_root>"

请注意,我可以--private-network从上面的命令中删除以使其工作,但是我的容器具有与主机相同的 IP 地址,这不是我想要的。

解析配置文件

在我的主机上resolv.conf指向stub-resolv.conf

/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

其内容如下:

nameserver 127.0.0.53
options edns0
search local

我的本地网络名称服务器是192.168.1.1

IP 地址

ip addr如果我在容器内执行该命令,则输出如下:

ip addr
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

我可以看到我的网络的 DHCP 服务器没有为容器分配 IP 地址,因为该地址应该以 192.168 开头。

ip addr如果我在我的主机上执行该命令,则输出如下:

ip addr
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: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether bc:a8:a6:7f:9d:d8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.122/24 brd 192.168.1.255 scope global dynamic noprefixroute wlo1
       valid_lft 251661sec preferred_lft 251661sec
    inet6 fe80::ae8d:74ba:b255:6db3/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

DNS 查找

DNS 查找不起作用:

ping www.ubuntu.com
ping: www.ubuntu.com: Temporary failure in name resolution

如果我尝试 ping 本地网络或互联网上的已知 IP 地址,则会收到“网络不可达”错误:

ping 8.8.8.8    
ping: connect: Network is unreachable

奇怪的是,我可以成功 ping 通任何以 . 开头的 IP 地址127.0.0.???(我不知道这是否相关,但我想提一下)。

相关内容