Mengapa firewall (iptables) saya mengganggu jembatan saya (brctl)?

11

Saya mengatur jembatan br0"terpasang" ke dua antarmuka:

  • eth0, antarmuka fisik saya terhubung ke LAN nyata,
  • vnet0, antarmuka virtual KVM (terhubung ke Windows VM).

Dan saya punya aturan firewall tunggal ini di rantai depan:

iptables -A FORWARD -j REJECT

Sekarang, satu-satunya ping yang berfungsi adalah dari VM ke host.

The br0antarmuka memiliki alamat IP dari mesin host saya. eth0dan vnet0tidak "memiliki" IP apa pun, dari sudut pandang tuan rumah. Windows VM memiliki konfigurasi IP statis.

Jika mengubah iptablesaturan saya menjadi ACCEPT(atau bahkan menggunakan yang lebih ketat iptables -A FORWARD -o br0 -j ACCEPT), semuanya berfungsi dengan baik! (Yaitu saya bisa melakukan ping mesin LAN dari VM, dan sebaliknya juga).

Semua opsi IP forwarding kernel dinonaktifkan (seperti net.ipv4.ip_forward = 0).

Jadi, bagaimana firewall netfilter memblokir sesuatu yang bahkan tidak diaktifkan?

Lebih lanjut, lalu lintas VM - LAN seharusnya hanya menyiratkan eth0dan vnet0. Namun sepertinya mengizinkan lalu lintas FORWARD dengan -o br0"bekerja" (saya tidak memeriksa dengan sangat hati-hati).

Totor
sumber
Lihatlah A saya pada U&L ini T: Pengaturan saat menggunakan jembatan
slm
1
Apa hasil darisysctl -a | grep bridge-nf
Stéphane Chazelas
@ 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

Jawaban:

10

The komentar dari Stéphane Chazelas memberikan petunjuk untuk jawabannya.

Menurut Bridge-nf Pertanyaan yang Sering Diajukan bridge-nf memungkinkan iptables, ip6tables atau arptables untuk melihat traffic yang dijembatani.

Pada kernel versi 2.6.1, ada lima entri sysctl untuk bridge-nf behavioral control:

  • bridge-nf-call-arptables - Lewati traffic ARP yang dijembatani ke rantai arptables FORWARD.
  • bridge-nf-call-iptables - Lewati lalu lintas IPv4 yang dijembatani ke rantai iptables.
  • bridge-nf-call-ip6tables - Lewati lalu lintas IPv6 yang dijembatani ke rantai IP6tables.
  • bridge-nf-filter-vlan-tagged - Lewati lalu lintas ARP / IP yang dijembatani vlan ke arptables / iptables.
  • net.bridge.bridge-nf-filter-pppoe-tagged - lewati lalu lintas IP / IPv6 tagged pppoe yang ditandai ke tabel {ip, ip6}

Anda dapat menonaktifkan pemblokiran firewall netfilter dengan:

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0
Mathias Weidner
sumber
4
Sejak Linux 3.18, fungsi di mana iptables menangani paket-paket dari bridge dapat dinonaktifkan dengan tidak memuat br_netfiltermodul. Tidak memiliki modul yang dimuat juga berarti tidak ada /proc/sys/net/bridge/entri.
Lekensteyn
Dan sejak Linux kernel 5.3 fitur ini menjadi per namespace bukan global.
AB