我设置了一个 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 没有任何关系。