我目前有以下设置,vm
其中一个 KVM 客户机通过以桥接模式运行的 MacVTaphost
连接到其中一个网络接口。host
|---------------|
| ___________ |
switch ======= | | vm | |
| ----------- |
|____ host _____|
在里面vm
,我设置了几个 VLAN 接口以及一个未标记的接口:
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:00:00:02 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 65535 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
4: enp2s0.2@enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:00:00:02 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 0 maxmtu 65535
vlan protocol 802.1Q id 2 <REORDER_HDR> addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
...
host
没有任何 VLAN 接口。
未标记的流量可以正常进出enp2s0
,但标记的流量似乎在host
和之间的某个地方被丢弃vm
。我通过将一台机器插入 所代表的接口enp2s0
、通过 创建新的标记接口、分配 IP 地址,然后 ping对应于我正在 ping 的标记 VLANiproute2
的 IP 地址来测试这一点。vm
有趣的是,tcpdump
在原始备份接口上运行host
允许标记数据包通过,但仅限于tcpdump
运行时。下图显示了这种奇怪的效果。(从上到下:host
,正在运行tcpdump
;机器插入enp2s0
,正在 ping vm
;,vm
正在 ping 所述机器)
将中继流量发送到 MacVTap 接口是否正确,还是我应该在主机上创建不同的接口并将它们传递到虚拟机中?我在主机或虚拟机上设置接口的方式是否存在某种问题?
答案1
将原始支持接口设置为host
混杂模式似乎可以让一切始终正常工作(即ip link set dev enp2s0 promisc on
& 在 中添加相应的行/etc/network/interfaces
)。我不确定这是否是正确的做法,但由于没有其他可尝试的方法,所以对我来说,这很有效,直到出现更好的解决方案。