¿Por qué mi firewall (iptables) interfiere en mi puente (brctl)?

¿Por qué mi firewall (iptables) interfiere en mi puente (brctl)?

Configuré un puente br0"conectado" a dos interfaces:

  • eth0, mi interfaz física conectada a la LAN real,
  • vnet0, una interfaz virtual KVM (conectada a una máquina virtual Windows).

Y tengo esta única regla de firewall en la cadena directa:

iptables -A FORWARD -j REJECT

Ahora, el único ping que funciona es el de la máquina virtual al host.

La br0interfaz posee la dirección IP de mi máquina host. eth0y vnet0no somos "dueños" de ninguna IP, desde el punto de vista del anfitrión. La máquina virtual de Windows tiene una configuración de IP estática.

Si cambio mi iptablesregla ACCEPT(o incluso uso una más restrictiva iptables -A FORWARD -o br0 -j ACCEPT), ¡todo funciona bien! (es decir, puedo hacer ping a cualquier máquina LAN desde la VM, y también al revés).

Todas las opciones del kernel de reenvío de IP están deshabilitadas (como net.ipv4.ip_forward = 0).

Entonces, ¿cómo puede el firewall netfilter bloquear algo que ni siquiera está habilitado?

Además, el tráfico VM-LAN sólo debería implicar eth0y vnet0. Sin embargo, parece que permitir el tráfico ADELANTE con -o br0"funciona" (aunque no lo verifiqué con mucha atención).

Respuesta1

Elcomentariode Stéphane Chazelas proporciona la pista de la respuesta.

De acuerdo aBridge-nf Preguntas frecuentesbridge-nf permite que iptables, ip6tables o arptables vean el tráfico puenteado.

A partir de la versión 2.6.1 del kernel, hay cincoentradas del sistemapara el control del comportamiento bridge-nf:

  • bridge-nf-call-arptables- pasar el tráfico ARP puenteado a la cadena FORWARD de arptables.
  • bridge-nf-call-iptables- pasar tráfico IPv4 puenteado a las cadenas de iptables.
  • bridge-nf-call-ip6tables- Pasar el tráfico IPv6 puenteado a las cadenas de ip6tables.
  • bridge-nf-filter-vlan-tagged- Pasar tráfico ARP/IP puenteado y etiquetado con VLAN a arptables/iptables.
  • net.bridge.bridge-nf-filter-pppoe-tagged- Pasar tráfico IP/IPv6 puenteado con etiquetas pppoe a tablas {ip,ip6}

Puede desactivar el bloqueo del firewall de Netfilter con:

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0

información relacionada