Estou testando o FreeBSD com hypervisor bhyve e tentando replicar a configuração do VMware ESXi vSwitch no FreeBSD para que a VM do pfSense receba o tráfego de rede corretamente.
NICS:
----------------------- -----------------------
| allvlans | | Physical adapters |
| VLAN ID: 4095 (all) |----| * vmnic0, 1000 Mbps |
| * pfSense24 | | -----------------------
----------------------- |
|
----------------------- |
| Management Network |--/
| VLAN ID: 111 |
| VMkernel ports (1): |
| * vmk0: 192.168.101.6 |
-----------------------
Política de segurança:
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"
Equivalente Management Network (?) para acesso SSH:
sysrc vlans_em0="111"
sysrc ifconfig_em0_111="inet 192.168.101.6/24"
Interfaces:
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
Executando o pfSense VM com:
sh /usr/share/examples/bhyve/vmrun.sh -m 2048M -d /dev/zvol/tank/pfsense0 pfsensevm
Ele usa tap0
.
Atualmente, posso acessar o administrador da web do pfSense, mas vmnet0.333
não recebe IP do meu provedor. Gostaria de definir a ponte de VLAN com a maior segurança possível ( private
para bridge0
?). Se é possível enviar todo o tráfego para o comutador físico primeiro, é o que eu preferiria. openvSwitch também está ok, mas eu não estou familiarizado com isso.
O pacote de requisição DHCP é visto corretamente em tap0, bridge0 e em0 com tcpdump -lnexv -i <iface> "vlan 333"
e não em em0.111, o que é correto ao solicitar novo IP no pfSense. Não há resposta DHCP do ISP. em0 e tap0 estão no modo promisc que está desabilitado na versão do vSwitch.
Mais depuração:
O Raspberry Pi conectado ao meu modem VDSL e o pacote DHCP são vistos. Eu também tentei falsificar o endereço MAC do pfSense com o RPi e ele funciona. Portanto, possíveis culpados atualmente são a soma de verificação de pacotes e o truncamento de pacotes. Pelo menos a implementação da ponte Linux é bem conhecida para quebrar pacotes com bridge e VLANs, então o FreeBSD pode estar fazendo isso também? Adicionando VLAN 333 para em0 DHCP funciona. Então, o que é bridge0 ou tap0 fazendo?
O que eu sinto falta?