Perché il mio firewall (iptables) interferisce nel mio bridge (brctl)?


11

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' br0interfaccia possiede l'indirizzo IP del mio computer host. eth0e vnet0non "possedere" alcun IP, dal punto di vista dell'host. La macchina virtuale Windows ha una configurazione IP statica.

Se cambi la mia iptablesregola 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 eth0e vnet0. Eppure sembra consentire il traffico FORWARD con -o br0"lavori" (non ho controllato molto attentamente però).


Dai un'occhiata alla mia A per questa U&L D: Impostazioni quando usi un bridge
slm

1
Qual è l'output disysctl -a | grep bridge-nf
Stéphane Chazelas il

@ StéphaneChazelas 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
Totor,

Risposte:


10

Il commento di Stéphane Chazelas fornisce il suggerimento per la risposta.

Secondo le domande frequenti di Bridge-nf bridge-nf consente a iptables, ip6tables o arptables di vedere il traffico bridge.

A partire dalla versione 2.6.1 del kernel, ci sono cinque voci sysctl per il controllo comportamentale bridge-nf:

  • bridge-nf-call-arptables - passare il traffico ARP a ponte alla catena FORWARD di arptables.
  • bridge-nf-call-iptables - passare il traffico IPv4 con ponte alle catene di iptables.
  • bridge-nf-call-ip6tables - passare il traffico IPv6 con ponte alle catene ip6tables.
  • bridge-nf-filter-vlan-tagged - passare il traffico ARP / IP con tag vlan con ponte a arptables / iptables.
  • net.bridge.bridge-nf-filter-pppoe-tagged - passa il traffico IP / IPv6 con tag pppoe su bridge alle tabelle {ip, ip6}

È possibile disabilitare il blocco firewall netfilter con:

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

4
A partire da Linux 3.18, la funzionalità in cui iptables gestisce i pacchetti dal bridge può essere disabilitata non caricando il br_netfiltermodulo. Non avere il modulo caricato significa anche che non vi è alcuna /proc/sys/net/bridge/voce.
Lekensteyn,

E dal kernel 5.3 di Linux questa funzione diventa per namespace anziché globale.
AB
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.