Por que meu firewall (iptables) interfere na minha bridge (brctl)?

10

Eu configurei uma ponte br0 "anexada" para duas interfaces:

  • eth0 , minha interface física conectada à LAN real,
  • vnet0 , uma interface virtual KVM (conectada a uma VM do Windows).

E eu tenho essa regra de firewall única na cadeia de encaminhamento:

iptables -A FORWARD -j REJECT

Agora, o único ping que está funcionando é da VM para o host.

A interface br0 possui o endereço IP da minha máquina host. eth0 e vnet0 não "possuem" nenhum IP, do ponto de vista do host. A VM do Windows possui uma configuração de IP estático.

Se alterar minha regra iptables para ACCEPT (ou até mesmo usar um iptables -A FORWARD -o br0 -j ACCEPT mais restritivo), tudo está funcionando bem! (ou seja, eu posso fazer ping em qualquer máquina LAN da VM, e o contrário também).

Todas as opções do kernel de encaminhamento de IP estão desabilitadas (como net.ipv4.ip_forward = 0 ).

Então, como o firewall do netfilter pode bloquear algo que não está habilitado?

Além disso, o tráfego de VM-LAN deve implicar apenas eth0 e vnet0 . Ainda assim, parece permitir tráfego FORWARD com -o br0 "works" (eu não verifiquei com muito cuidado).

    
por Totor 13.06.2014 / 11:44

1 resposta

9

O comentário de Stéphane Chazelas fornece a dica para a resposta.

De acordo com as Perguntas frequentes do Bridge-nf , o bridge-nf permite que iptables, ip6tables ou arptables vejam tráfego de ponte.

A partir do kernel versão 2.6.1, existem cinco entradas sysctl para controle comportamental bridge-nf:

  • bridge-nf-call-arptables - transmite o tráfego ARP em ponte à cadeia FORWARD dos arptables.
  • bridge-nf-call-iptables - transmite o tráfego IPv4 em ponte às cadeias do iptables.
  • bridge-nf-call-ip6tables - transmite o tráfego IPv6 em ponte para cadeias de ip6tables.
  • bridge-nf-filter-vlan-tagged - transmite o tráfego ARP / IP marcado com vlan para arptables / iptables.
  • net.bridge.bridge-nf-filter-pppoe-tagged - repassa em ponte o tráfego IP / IPv6 marcado por pppoe para {ip, ip6} tabelas

Você pode desativar o bloqueio do firewall do netfilter com:

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0
    
por 03.08.2014 / 00:22