我像这样设置了一个 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,我将看到主机而不是 VM 提供的页面。
我试图理解为什么它停止工作。起初我以为 DHCP 租约可能已过期,并且dhclient
不会续订。但是leasetime是24小时,这个问题比那个早,有时不到10小时。
那么是什么导致macvtap
界面停止工作呢?
启动时
dhclient
,它是唯一一个使用该macvtap
界面的。但是当dhclient
几个小时后为了续租而发送数据包时,它破坏了 macvtap,因为那时来宾也在使用该接口。并且主机和来宾不能同时使用相同的接口。如果一个完全不同的程序刚刚从主机通过该接口发送了一个随机数据包,例如一个简单的
ping
,同样会发生。所以这个问题与 DHCP 没有任何关系。