如何让网络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.???
(我不知道这是否相关,但我想提一下)。