VMware NAT模式下第三台虚拟机为何能捕获另外两台的通信流量?
问题描述
在VMware中搭建了三台CentOS主机,全部采用NAT网络模式,相关信息如下:
- centos:IP为192.168.248.132
- centos 1:IP为192.168.248.136
- centos 2:未指定具体IP
在centos主机执行命令ping 192.168.248.136,输出显示两台主机通信正常:
PING 192.168.248.136 (192.168.248.136) 56(84) bytes of data. 64 bytes from 192.168.248.136: icmp_seq=1 ttl=64 time=0.435 ms 64 bytes from 192.168.248.136: icmp_seq=2 ttl=64 time=0.313 ms 64 bytes from 192.168.248.136: icmp_seq=3 ttl=64 time=0.385 ms
同时在centos 2主机上执行tcpdump -i ens33,按常规网络逻辑:
- ICMP为单播流量,既非广播也非组播
- 该主机网卡未开启混杂模式(ifconfig输出flags为
4163<UP,BROADCAST,RUNNING,MULTICAST>,无PROMISC标识),仅能接收目标MAC为自身的帧
但实际tcpdump却捕获到了centos和centos 1之间的ICMP流量:
06:28:11.511233 IP 192.168.248.132 > 192.168.248.136: ICMP echo request, id 3137, seq 5, length 64 06:28:11.511503 IP 192.168.248.136 > 192.168.248.132: ICMP echo reply, id 3137, seq 5, length 64
请问这一现象的原因是什么?
原因分析
这是VMware虚拟网络的默认特性导致的:
- VMware的NAT模式依赖虚拟交换机实现虚拟机间、虚拟机与外部网络的通信,默认情况下,这个虚拟交换机的工作模式更接近集线器而非真实物理交换机——它会把所有经过交换机的流量转发给所有连接在该交换机上的虚拟机端口,不会像物理交换机那样仅将单播流量发送给目标MAC对应的端口。
- 虽然虚拟机操作系统层面的网卡未开启混杂模式,但VMware的虚拟网卡驱动和虚拟层会绕过操作系统的这一限制,将虚拟交换机上的所有流量传递给虚拟机的网卡,因此
tcpdump能捕获到同虚拟网络内其他虚拟机之间的单播流量。 - 若要让虚拟交换机实现物理交换机的端口隔离效果,可通过VMware虚拟网络编辑器修改对应NAT网络的配置,开启端口隔离或调整混杂模式权限限制。
内容的提问来源于stack exchange,提问作者user19470144
相关产品推荐
相关产品推荐

