FreeBSD/OVS 相当于 ESXi vSwitch VLAN 配置

FreeBSD/OVS 相当于 ESXi vSwitch VLAN 配置

我正在尝试 FreeBSDBhyve 管理程序并尝试在 FreeBSD 中复制 VMware ESXi vSwitch 配置,以便 pfSense VM 正确获取网络流量。

VLAN:

  • 111=局域网,192.168.101.0/24
  • 333 = 互联网 (WAN)、DHCP

pfSense 虚拟机设置(ESXi 和 FreeBSD):

网络接口卡:

  • 虚拟网卡0
  • vnic0.111 192.168.101.1/24
  • vnic0.333 来自 ISP 的 DHCP
  • NAT:VLAN 333 <-> VLAN 111 和 DHCP 服务器
  • 硬件卸载

旧的 ESXi 设置:

  • VLAN 111 GW 上的 192.168.101.6/24 192.168.101.1
  • 只有 vSwitch,没有 dvSwitch

vSwitch0:

 -----------------------      -----------------------
| allvlans              |    | Physical adapters     |
| VLAN ID: 4095 (all)   |----| * vmnic0, 1000 Mbps   |
| * pfSense24           |  |  ----------------------- 
 -----------------------   |
                           |
 -----------------------   |
| Management Network    |--/ 
| VLAN ID: 111          |
| VMkernel ports (1):   |
| * vmk0: 192.168.101.6 |
 -----------------------

安全政策:

  • 允许混杂模式:
  • 允许伪造传输:
  • 允许 MAC 更改:

端口组 allvlan:

  • VLAN ID:4095(允许所有标记的 VLAN 流量)
  • 允许混杂模式:从vSwitch继承(不)
  • 允许伪造传输:从vSwitch继承(不)
  • 允许 MAC 更改:从vSwitch继承(不)

FreeBSD ESXi 替换设置尝试:

sysrc -f /boot/loader.conf vmm_load="YES"
sysrc -f /boot/loader.conf nmdm_load="YES"
sysrc -f /boot/loader.conf if_bridge_load="YES"
sysrc -f /boot/loader.conf if_tap_load="YES"
sysrc if_vlan_load="YES"
sysrc cloned_interfaces="bridge0 tap0"
sysrc ifconfig_bridge0="addm em0 addm tap0"
echo "net.link.tap.up_on_open=1" > /etc/sysctl.d/vm_network.conf
sysrc defaultrouter="192.168.101.1"
sysrc ifconfig_em0="up"
sysrc gateway_enable="YES"

ESXi 的管理网络SSH 访问的等效(?):

sysrc vlans_em0="111"
sysrc ifconfig_em0_111="inet 192.168.101.6/24"

接口:

em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=852099<RXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,VLAN_HWFILTER,VLAN_HWTSO>
        ether 00:25:90:14:95:8c
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 02:eb:00:40:63:00
        nd6 options=9<PERFORMNUD,IFDISABLED>
        groups: bridge
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
        root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
        member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 5 priority 128 path cost 2000000
        member: em0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 1 priority 128 path cost 2000000
tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        ether 00:bd:f0:02:f7:00
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect
        status: active
        groups: tap
        Opened by PID 45408
em0.111: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=103<RXCSUM,TXCSUM,TSO4>
        ether 00:25:90:14:95:8c
        inet 192.168.101.6 netmask 0xffffff00 broadcast 192.168.101.255
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        vlan: 111 vlanpcp: 0 parent interface: em0
        groups: vlan

pciconf -lv:

em0@pci0:1:0:0: class=0x020000 card=0x10d315d9 chip=0x10d38086 rev=0x00 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = '82574L Gigabit Network Connection'
    class      = network
    subclass   = ethernet

运行 pfSense VM:

sh /usr/share/examples/bhyve/vmrun.sh -m 2048M -d /dev/zvol/tank/pfsense0 pfsensevm

它用tap0

目前我可以访问 pfSense 的网络管理员,但vmnet0.333无法从我的 ISP 获取 IP。我想尽可能安全地设置 VLAN 桥接(private对于bridge0?)。如果可以首先将所有流量发送到物理交换机,那就是我所希望的。 openvSwitch也可以,不过我不太熟悉。

DHCP 请求数据包在 tap0、bridge0 和 em0 中正确可见,而tcpdump -lnexv -i <iface> "vlan 333"在 em0.111 中则不然,这在 pfSense 中请求新 IP 时是正确的。 ISP 没有 DHCP 响应。 em0 和 tap0 处于混杂模式,该模式在 vSwitch 版本中被禁用。

更多调试:

将 Raspberry Pi 连接到我的 VDSL 调制解调器,可以看到 DHCP 数据包。我还尝试使用 RPi 欺骗 pfSense 的 MAC 地址,并且它有效。因此,目前可能的罪魁祸首是数据包校验和和数据包截断。至少 Linux 桥接实现是众所周知的,可以通过桥接和 VLAN 来破坏数据包,所以 FreeBSD 也可能会这样做吗?将 VLAN 333 添加到 em0 DHCP 可以工作。那么bridge0或tap0在做什么呢?

我缺少什么?

相关内容