问题

物理机上跑了个ESXI6.7,运行了一个win10的虚拟机,但是虚拟机里头需要用hyper-v跑一个linux子系统,结果按网上的教程改桥接之后子系统死活上不了网,罪魁祸首就是ESXI默认不开启混杂模式,只要跟虚拟机的mac不一样的帧通通丢弃

原因

VMware 的虚拟网卡Ethernet0 的 MAC 以 00:0C:29 开头,这是 VMware 的 OUI),型号也正是 VMware 常用的 Intel 82574L (e1000e)。这说明你是在 VMware 里再跑 Hyper-V(嵌套虚拟化)。在这种架构下,把 Hyper-V 的“外网 vSwitch”绑到这块 VMware 虚拟网卡时,上层的 VMware vSwitch 默认会丢弃来自子虚拟机的 MAC(DHCP/ARP 都过不去),所以 Ubuntu 一接上“外网”就“断网/拿不到 IP”

嵌套场景里,内层 VM(Ubuntu)的帧会带 Ubuntu 自己的 MAC 从 Windows 这块“e1000e”虚拟网卡发出去;若上层 vSwitch 不允许“伪造/变化 MAC”或混杂接收,就会被过滤,导致 DHCP/ARP 都失败。

解决方法

ESXi:把这台 Windows VM 所在端口组的安全策略改成Promiscuous Mode = AcceptMAC Address Changes = AcceptForged Transmits = Accept。这些就是允许上层 vSwitch 接收/转发“不同源 MAC”的帧,是跑嵌套 Hyper-V/ESXi 的标准做法。

image-20251106163730795

当然对于Workstation / Fusion:开启所连 VMnet 的混杂模式(Promiscuous/Allow VMs),必要时(在 Linux 主机上)给 /dev/vmnet* 赋读写权限;有时还需在对应 VMX 里把 ethernet0.noPromisc = "FALSE"

检查

完美!

image-20251106163905931