KVM QEMU:为虚拟机配置无过滤的完整网络访问
问题原因分析
macvtap接口的默认逻辑是仅将目标MAC与自身接口MAC匹配的数据包传递给虚拟机,即便开启了PROMISC模式也无法改变这一行为——macvtap的混杂模式仅对多播/广播帧生效,不会捕获目标MAC为其他设备的单播帧。这就是物理机发往client虚拟机的单播数据包,宿主机物理网卡能抓到,但switch虚拟机的macvtap接口无法接收的核心原因。
解决方法
针对switch虚拟机的macvtap接口,需启用accept-all特性,强制接口接收所有路过的数据包:
- 在switch虚拟机内,查看目标macvtap接口的
accept-all状态:ethtool -k <macvtap接口名称> | grep accept-all - 若状态为
off,执行命令开启:ethtool -K <macvtap接口名称> accept-all on - 再次执行第一步命令,确认
accept-all已变为on。
额外验证点
- 确保宿主机物理网卡除PROMISC外,还开启
allmulti(用于多播帧转发,可选):ip link set dev <宿主机物理接口> allmulti on - 排查switch虚拟机内的nftables规则(若未排查过),临时清空测试是否存在过滤:
nft flush ruleset
内容的提问来源于stack exchange,提问作者ChPortos
相关产品推荐
相关产品推荐

