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 de Windows).
Y tengo esta única regla de firewall en la cadena de avance:
iptables -A FORWARD -j REJECT
Ahora, el único ping que funciona es desde la VM al host.
La br0interfaz posee la dirección IP de mi máquina host. eth0y vnet0no "posee" ninguna IP, desde el punto de vista del host. La VM de Windows tiene una configuración de IP estática.
Si cambio mi iptablesregla a ACCEPT(o incluso uso una más restrictiva iptables -A FORWARD -o br0 -j ACCEPT), ¡todo está funcionando bien! (es decir, puedo hacer ping a cualquier máquina LAN desde la VM, y al revés también).
Todas las opciones de kernel de reenvío de IP están deshabilitadas (como net.ipv4.ip_forward = 0).
Entonces, ¿cómo puede el firewall de netfilter bloquear algo que ni siquiera está habilitado?
Además, el tráfico VM - LAN solo debe implicar eth0y vnet0. Sin embargo, parece permitir el tráfico ADELANTE con -o br0"obras" (aunque no lo revisé con mucho cuidado).
sysctl -a | grep bridge-nf
net.bridge.bridge-nf-call-arptables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-filter-vlan-tagged = 0 net.bridge.bridge-nf-filter-pppoe-tagged = 0