Fluxo de pacotes em uma ponte virtual com duas interfaces, centos 7

0

Eu estou lutando para criar um firewall de ponte com o iptables, já que não consigo encontrar / capturar pacotes fluindo através de uma ponte com duas interfaces em centos7. Nenhum endereço IP está configurado nas interfaces ou na bridge. Não consigo encontrar este tráfego, verifiquei as cadeias PREROUTING INPUT FORWARD OUTPUT POSTROUTING. Embora os contadores ifconfig mostrem que o tráfego está fluindo através de interfaces em ponte, mas não a ponte (br0) em si.

Minha configuração de ponte

# cat ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
IPADDR=0.0.0.0
PREFIX=24
IPV6_AUTOCONF=no
IPV6INIT=no
ONBOOT=yes
DELAY=0'

interface OUTWARDS

# cat ifcfg-p1p
DEVICE=p1p1
TYPE=Ethernet
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
BRIDGE=br0
BOOTPROTO=none
IPV6INIT=no
IPV6_AUTOCONF=no
IPADDR=0.0.0.0
PREFIX=24'

interface do INWARDS

# cat ifcfg-p1p2
DEVICE=p1p2
TYPE=Ethernet
HWADDR=XX:XX:XX:XX:XX:XX
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
IPV6INIT=no
IPV6_AUTOCONF=no
IPADDR=0.0.0.0
PREFIX=24'

O redirecionamento está desabilitado (sem NAT), o firewalld está desabilitado, o ipv6 autoconf está desabilitado no sysctl.conf. O tráfego flui perferitamente de uma máquina dentro de p1p2 para fora através de p1p1.

Estou preso e qualquer ajuda é apreciada.

PS: Esta configuração funcionou perfeitamente com o debian 5 (kernel 2.6) mas depois de uma atualização para o debian 6 ou 7 ou 8, obteve o kernel panic nos drivers da interface aleatoriamente. Tentei o cartão Intel e cartão Broadcom com o mesmo resultado. Um bug no brctl talvez? Mas, de qualquer maneira, o centos7 está no mínimo estável por dois dias.

    
por Amir Ahmed 21.04.2016 / 14:42

2 respostas

0

Você confundiu suas camadas de rede. Handwavingly, o iptables funciona para pacotes IP encaminhados pela camada de rede e não para quadros Ethernet encaminhados da camada de enlace, que é o tipo de encaminhamento feito por uma ponte.

Uma ponte funciona mantendo uma lista de quais endereços MAC são vistos em quais portas. Assim, o tráfego pode fluir de p1p para p1p2 sem fazer nenhum roteamento IP.

A interface br0 é uma interface fingida na bridge. É tratado como qualquer outra interface. Assim, o tráfego sem difusão de um MAC via p1 para um MAC via p1p2 não transita na interface br0 (embora esteja obviamente na bridge br0, e é uma vergonha que o Linux use o mesmo nome tanto para a pseudo-interface quanto para a ponte ).

Há um bom resumo do que você está tentando fazer no início das páginas da Shorewall. . Basicamente, você configura a ponte e faz com que ela funcione. Em seguida, defina o sysctl de encaminhamento de IP (ou o iptables não funcionará). Em suas regras do iptables você precisa expressar suas regras usando o módulo physdev iptables (e é claro que você pode listar outros módulos depois disso).

    
por 21.04.2016 / 16:21
0

Entendi agora. Ativar o Encaminhamento não ativa algumas variáveis do kernel que são necessárias, então eu tive que ativá-las manualmente. Estes são,

net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-arptables=0

Eu desliguei os arptables, pois não preciso disso.

    
por 26.04.2016 / 13:05