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

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

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

  • eth0, 내 물리적 인터페이스가 실제 LAN에 연결되어 있습니다.
  • vnet0, KVM 가상 인터페이스(Windows VM에 연결됨).

순방향 체인에 방화벽 규칙이 있습니다.

iptables -A FORWARD -j REJECT

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

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

iptables규칙을 변경하면 ACCEPT(또는 더 제한적인 규칙을 사용하면 iptables -A FORWARD -o br0 -j ACCEPT) 모든 것이 잘 작동합니다! (즉, 가상 머신에서 어떤 LAN 컴퓨터든 ping할 수 있으며 그 반대의 경우도 마찬가지입니다.)

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

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

또한 VM-LAN 트래픽은 eth0및 만 나타내야 합니다 vnet0. 그러나 "유효한" 전달 트래픽을 허용하는 것 같습니다 -o br0(다시 확인하지는 않았지만).

답변1

이것논평Stéphane Chazelas가 답에 대한 힌트를 제공합니다.

~에 따르면Bridge-nf FAQbridge-nf를 사용하면 iptables, ip6tables 또는 arptables를 사용하여 브리지 트래픽을 볼 수 있습니다.

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

  • bridge-nf-call-arptables- 브리지된 ARP 트래픽을 FORWARD arptable 체인으로 전달합니다.
  • 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

관련 정보