Ho impostato un bridge br0
"collegato" a due interfacce:
eth0
, la mia interfaccia fisica connessa alla LAN reale,vnet0
, un'interfaccia virtuale KVM (connessa a una macchina virtuale Windows).
E ho questa singola regola firewall nella catena forward:
iptables -A FORWARD -j REJECT
Ora, l'unico ping che funziona è dalla VM all'host.
L' br0
interfaccia possiede l'indirizzo IP del mio computer host. eth0
e vnet0
non "possedere" alcun IP, dal punto di vista dell'host. La macchina virtuale Windows ha una configurazione IP statica.
Se cambi la mia iptables
regola in ACCEPT
(o addirittura ne usi una più restrittiva iptables -A FORWARD -o br0 -j ACCEPT
), tutto funziona bene! (vale a dire che posso eseguire il ping di qualsiasi macchina LAN dalla VM e viceversa).
Tutte le opzioni del kernel di inoltro IP sono disabilitate (come net.ipv4.ip_forward = 0
).
Quindi, come può il firewall netfilter bloccare qualcosa che non è nemmeno abilitato?
Inoltre, il traffico VM - LAN dovrebbe solo implicare eth0
e vnet0
. Eppure sembra consentire il traffico FORWARD con -o br0
"lavori" (non ho controllato molto attentamente però).
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