%20interfiere%20en%20mi%20puente%20(brctl)%3F.png)
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 br0
interfaz posee la dirección IP de mi máquina host. eth0
y vnet0
no 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 iptables
regla 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 eth0
y 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