我有一个主机(ubuntu xenial)通过(也是xenial)运行容器systemd-nspawn
:
systemd-nspawn --directory=gogs --network-macvlan=ens192 --boot
ens192
是通过 DHCP 获取 IP 地址的主机接口。
从容器内,我想获取一个由网络 DHCP 提供的 IP 地址,该地址之前将其提供给主机(我首先需要使用在 DHCP 服务器中注册的 MAC 地址):
root@git:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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: mv-ens192: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1
link/ether d2:b9:c3:77:25:83 brd ff:ff:ff:ff:ff:ff link-netnsid 0
root@git:~# ifconfig mv-ens192 hw ether aa:a0:a0:a0:a0:01
root@git:~# ifconfig mv-ens192 up
root@git:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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: mv-ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
link/ether 00:50:56:bb:60:3f brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::250:56ff:febb:603f/64 scope link
valid_lft forever preferred_lft forever
root@git:~# dhclient -v
Internet Systems Consortium DHCP Client 4.3.3
Copyright 2004-2015 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/mv-ens192/aa:a0:a0:a0:a0:01
Sending on LPF/mv-ens192/aa:a0:a0:a0:a0:01
Sending on Socket/fallback
DHCPDISCOVER on mv-ens192 to 255.255.255.255 port 67 interval 3 (xid=0xd36b8c1e)
DHCPDISCOVER on mv-ens192 to 255.255.255.255 port 67 interval 7 (xid=0xd36b8c1e)
但这一发现并没有发生。
这失败的原因是什么?
DHCP 发现数据包发送至主机 NIC,然后主机 NIC 应进一步分派该数据包(它不应与主机在请求其自己的 IP 时进行的调用不同)。
注意:当tshark
在主持人,我看到容器的请求:
634 8.404019212 0.0.0.0 -> 255.255.255.255 DHCP 342 DHCP Discover - Transaction ID 0xd36b8c1e