ทำไมไฟร์วอลล์ของฉัน (iptables) รบกวนในบริดจ์ของฉัน (brctl)


11

ฉันตั้งค่าบริดจ์br0"แนบ" เป็นสองอินเตอร์เฟส:

  • eth0ส่วนต่อประสานทางกายภาพของฉันเชื่อมต่อกับ LAN จริง
  • vnet0เป็นอินเตอร์เฟสเสมือน KVM (เชื่อมต่อกับ Windows VM)

และฉันมีกฎไฟร์วอลล์เดียวนี้ในห่วงโซ่การส่งต่อ:

iptables -A FORWARD -j REJECT

ตอนนี้ ping เดียวที่ทำงานคือจาก VM ไปยังโฮสต์

br0อินเตอร์เฟซที่เป็นเจ้าของที่อยู่ IP ของเครื่องโฮสต์ของฉัน eth0และvnet0อย่า "เป็นเจ้าของ" IP ใด ๆ จากมุมมองโฮสต์ Windows VM มีการกำหนดค่า IP แบบคงที่

หากเปลี่ยนiptablesกฎของฉันเป็นACCEPT(หรือใช้ข้อ จำกัด มากขึ้นiptables -A FORWARD -o br0 -j ACCEPT) ทุกอย่างทำงานได้ดี! (เช่นฉันสามารถ ping เครื่อง LAN ใด ๆ จาก VM และวิธีอื่น ๆ เช่นกัน)

ตัวเลือกเคอร์เนลการส่งต่อ IP ทั้งหมดถูกปิดใช้งาน (เช่นnet.ipv4.ip_forward = 0)

ดังนั้นไฟร์วอลล์ netfilter จะบล็อกสิ่งที่ไม่ได้เปิดใช้งานได้อย่างไร

นอกจากนี้ VM - การจราจร LAN เท่านั้นที่ควรจะบ่งบอกและeth0 vnet0แต่ดูเหมือนว่าจะอนุญาตให้ปริมาณการใช้ไปข้างหน้าด้วย-o br0"งาน" (ฉันไม่ได้ตรวจสอบอย่างระมัดระวังว่า)


ดู A ของฉันต่อ U&L นี้ Q: การตั้งค่าเมื่อใช้สะพาน
slm

1
อะไรคือผลลัพธ์ของsysctl -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

คำตอบ:


10

ความคิดเห็นจากStéphane Chazelas ให้คำแนะนำเพื่อคำตอบ

ตามBridge-nf คำถามที่พบบ่อย bridge-nf เปิดใช้งาน iptables, ip6tables หรือ arptables เพื่อดูการรับส่งข้อมูล bridged

ในฐานะของเคอร์เนลเวอร์ชัน 2.6.1 มีห้ารายการ sysctlสำหรับการควบคุมพฤติกรรม bridge-nf:

  • bridge-nf-call-arptables - ผ่านการรับส่งข้อมูล ARP bridged ไปยังห่วงโซ่ไปข้างหน้าของ arptables
  • bridge-nf-call-iptables - ส่งผ่านการรับส่งข้อมูล IPv4 ไปยังเครือข่ายของ iptables
  • bridge-nf-call-ip6tables - ผ่านการรับส่งข้อมูล IPv6 ในเครือข่ายของ ip6tables
  • bridge-nf-filter-vlan-tagged - ส่งผ่านการรับส่งข้อมูล ARP / IP ของ vlan ที่ติดแท็กไปยัง arptables / iptables
  • net.bridge.bridge-nf-filter-pppoe-tagged - ผ่านการรับส่งข้อมูล pppoe ที่ติดแท็ก IP / IPv6 ไปยังตาราง {ip, ip6}

คุณสามารถปิดใช้งานการปิดกั้นไฟร์วอลล์ netfilter ด้วย:

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

4
ตั้งแต่ Linux 3.18 ฟังก์ชันการทำงานที่ iptables จัดการแพ็กเก็ตจากบริดจ์สามารถปิดใช้งานได้โดยไม่โหลดbr_netfilterโมดูล การไม่มีโมดูลที่โหลดยังหมายความว่าไม่มี/proc/sys/net/bridge/รายการ
Lekensteyn

และเนื่องจาก Linux kernel 5.3คุณลักษณะนี้จะกลายเป็นต่อเนมสเปซแทนที่จะเป็นโกลบอล
AB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.