Equivalente ao FreeBSD / OVS da configuração do ESXi vSwitch VLAN

3

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.

VLANs:

  • 111 = LAN, 192.168.101.0/24
  • 333 = Internet (WAN), DHCP

Configuração da máquina virtual pfSense (ESXi e FreeBSD):

NICS:

  • vnic0
  • vnic0.111 192.168.101.1/24
  • vnic0.333 DHCP do ISP
  • NAT: VLAN 333 < - > VLAN 111 & Servidor DHCP
  • HW descarrega off

Configuração antiga do ESXi:

  • 192.168.101.6/24 na VLAN 111 GW 192.168.101.1
  • Apenas vSwitch, sem dvSwitches

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 |
 -----------------------

Política de segurança:

  • Permitir modo promíscuo: não
  • Permitir transmissões forjadas: no
  • Permitir alterações no MAC: não

Grupo de portas allvlans:

  • ID de VLAN: 4095 (permitir todo o tráfego de VLAN marcado)
  • Permitir modo promíscuo: Herdar do vSwitch (não)
  • Permitir transmissões forjadas: Herdar do vSwitch (não)
  • Permitir alterações no MAC: Herdar do vSwitch (não)

Tentativa de configuração de substituição do 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"

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?

    
por raspi 17.09.2018 / 11:24

0 respostas