我设置了一个这样的 macvtap 接口:
ip link add link eth0 vlan type macvlan mode bridge
ip address add 10.0.0.17 dev vlan
ip link set dev vlan up
ip route flush dev eth0
ip route flush dev vlan
ip route add 10.0.0.0/24 dev vlan metric 0
ip route add default via 10.0.0.1
ip link add link eth0 name vtap address xx:xx:xx:xx:xx:xx type macvtap mode bridge
ip link set vtap up
ip address flush eth0
ip address flush vtap
dhclient -v vtap
ip address flush vtap
几个小时内它都能正常工作。但之后,任何与 DHCP(macvtap)IP 的连接都将开始转到主机。因此,如果我连接到端口 80 处的 IP,我将看到由主机而不是虚拟机提供的页面。
我想知道为什么它停止工作。起初我以为可能是 DHCP 租约已过期,并且dhclient
没有续订。但租约时间是 24 小时,而这个问题比租约时间更早出现,有时不到 10 小时。
那么什么原因会导致macvtap
接口停止工作呢?
答案1
启动时dhclient
,它是唯一使用该macvtap
接口的。但是,当dhclient
几个小时后发送数据包以续订租约时,它破坏了 macvtap,因为那时客户机也在使用该接口。主机和客户机不能同时使用同一个接口。
如果一个完全不同的程序从主机通过该接口发送了一个随机数据包(例如一个简单的ping
数据包),也会发生同样的情况。因此,这个问题与 DHCP 没有任何关系。