A ponte Linux (brctl) está descartando pacotes

4

Eu tenho pesquisado esse problema por alguns dias e ainda não encontrei uma resposta. Sua ajuda será muito apreciada!

Eu tenho algumas VMs (máquinas virtuais) em execução em um servidor físico. O servidor usa o Linux bridge (br100) para conectar essas VMs em conjunto:

# brctl show
bridge name     bridge id               STP enabled     interfaces
br100           8000.984be15fe7e3       no              eth1.1729
                                                        vnet0
                                                        vnet1

vnet0 e vnet1 são NICs virtuais de VMs.

br100 (servidor físico) é atribuído ao IP 172.16.0.11. A VM conectada ao vnet1 é atribuída a 172.16.0.3, a que o vnet0 é 172.16.0.5.

Até aí tudo bem. 172.16.0.3 pode pingar 172.16.0.5 sem problemas.

Agora estou tentando configurar o 172.16.0.3 como um roteador (servidor openvpn, se isso for importante) para a sub-rede 10.8.0.0/16.

Aí vem o meu problema: máquinas em 10.8.0.0/16 (neste caso 10.8.0.6) podem fazer ping para 172.16.0.3, mas não conseguem fazer ping em 172.16.0.5.

(eu acho) descartei todas as causas óbvias: ip_forward ativado, iptables liberado, etc. Agora eu reduzi a causa para: br100 não está encaminhando pacotes como deveria!

Quando faço ping de 172.16.0.5 a partir de 10.8.0.6, os pacotes foram entregues no vnet1 (VM 172.16.0.3) no servidor físico:

# tcpdump -leni vnet1 icmp
tcpdump: WARNING: vnet1: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vnet1, link-type EN10MB (Ethernet), capture size 65535 bytes
07:45:03.858356 02:16:3e:6a:42:57 > 02:16:3e:02:40:82, ethertype IPv4 (0x0800), length 98: 
10.8.0.6 > 172.16.0.5: ICMP echo request, id 63242, seq 1046, length 64
07:45:04.858239 02:16:3e:6a:42:57 > 02:16:3e:02:40:82, ethertype IPv4 (0x0800), length 98:
10.8.0.6 > 172.16.0.5: ICMP echo request, id 63242, seq 1047, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel

Mas não são encaminhados para vnet0 (172.16.0.5):

# tcpdump -leni vnet0 icmp
tcpdump: WARNING: vnet0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vnet0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel

Também segui os conselhos em este post e defini 0 como / proc / sys / net / bridge / bridge nf- *, mas não parece ajudar.

Além de descarregar filtros do iptables, eu também ativei o TRACE no iptables, o que mostrou que esses pacotes nunca atingem o iptables.

Quaisquer outras razões pelas quais o Linux bridge não encaminharia pacotes entre portas?

    
por Kenneth 07.01.2012 / 17:11

1 resposta

5

Encontrei a resposta! O Linux ethernet bridge consulta ebtables para decidir quais pacotes encaminhar e quais serão descartados. Flushing ebtables resolveu meu problema.

    
por 09.01.2012 / 15:33