나는 FreeBSD를 시험해 보고 있다바이브 하이퍼바이저그리고 pfSense VM이 네트워크 트래픽을 올바르게 얻을 수 있도록 FreeBSD에서 VMware ESXi vSwitch 구성을 복사해 보십시오.
VLAN:
- 111=LAN, 192.168.101.0/24
- 333 = 인터넷(WAN), DHCP
pfSense 가상 머신 설정(ESXi 및 FreeBSD):
네트워크 인터페이스 카드:
- 가상 NIC 0
- vnic0.111 192.168.101.1/24
- vnic0.333 ISP의 DHCP
- NAT: VLAN 333 <-> VLAN 111 및 DHCP 서버
- 하드웨어 오프로드
이전 ESXi 설정:
- GW의 VLAN 111 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 패킷을 볼 수 있습니다. 나는 또한 pfSense의 MAC 주소를 스푸핑하기 위해 RPi를 사용해 보았고 효과가 있었습니다. 따라서 현재 가능한 원인은 패킷 체크섬과 패킷 잘림입니다. 최소한 Linux 브리지 구현은 브리지와 VLAN을 통해 패킷을 손상시키는 것으로 알려져 있는데 FreeBSD도 동일한 작업을 수행할 수 있습니까? em0 DHCP에 VLAN 333을 추가하면 작동합니다. 그렇다면 bridge0이나 tap0은 무엇을 하고 있나요?
내가 무엇을 놓치고 있나요?