방화벽(iptables)이 브리지(brctl)를 방해하는 이유는 무엇입니까?

방화벽(iptables)이 브리지(brctl)를 방해하는 이유는 무엇입니까?

br0두 개의 인터페이스에 "연결된" 브리지를 설정했습니다 .

  • eth0, 실제 LAN에 연결된 물리적 인터페이스,
  • vnet0, KVM 가상 인터페이스(Windows VM에 연결됨).

그리고 순방향 체인에는 다음과 같은 단일 방화벽 규칙이 있습니다.

iptables -A FORWARD -j REJECT

이제 작동하는 유일한 핑은 VM에서 호스트로 보내는 것입니다.

인터페이스 br0는 내 호스트 시스템의 IP 주소를 소유합니다. 호스트 관점에서 볼 때 어떤 IP도 "소유"하지 않습니다 eth0. vnet0Windows VM에는 고정 IP 구성이 있습니다.

iptables규칙을 다음으로 변경하면 ACCEPT(또는 더 제한적인 규칙을 사용하면 iptables -A FORWARD -o br0 -j ACCEPT) 모든 것이 잘 작동합니다! (즉, VM에서 LAN 시스템을 ping할 수 있으며 그 반대의 경우도 가능합니다.)

모든 IP 전달 커널 옵션이 비활성화됩니다(예 net.ipv4.ip_forward = 0: ).

그렇다면 넷필터 방화벽은 활성화되지도 않은 것을 어떻게 차단할 수 있습니까?

또한 VM-LAN 트래픽은 eth0및 만 암시해야 합니다 vnet0. 그러나 "작동"으로 FORWARD 트래픽을 허용하는 것처럼 보입니다 -o br0(그래도 자세히 확인하지는 않았습니다).

답변1

그만큼논평Stéphane Chazelas가 답변에 대한 힌트를 제공합니다.

에 따르면Bridge-nf 자주 묻는 질문bridge-nf는 iptables, ip6tables 또는 arptables를 활성화하여 브리지된 트래픽을 볼 수 있도록 합니다.

커널 버전 2.6.1부터 5가지가 있습니다.sysctl 항목bridge-nf 동작 제어의 경우:

  • bridge-nf-call-arptables- 브리지된 ARP 트래픽을 arptables의 FORWARD 체인으로 전달합니다.
  • bridge-nf-call-iptables- 브리지된 IPv4 트래픽을 iptables의 체인으로 전달합니다.
  • bridge-nf-call-ip6tables- 브리지된 IPv6 트래픽을 ip6tables의 체인으로 전달합니다.
  • bridge-nf-filter-vlan-tagged- 브리지된 VLAN 태그가 지정된 ARP/IP 트래픽을 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

관련 정보