我正在尝试 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在做什么呢?
我缺少什么?