방화벽 (iptables)이 브리지 (brctl)에서 방해하는 이유는 무엇입니까? eth0및 vnet0보기의 호스트의

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

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

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

iptables -A FORWARD -j REJECT

이제 작동하는 유일한 Ping은 VM에서 호스트까지입니다.

br0인터페이스 내 호스트 시스템의 IP 주소를 소유하고있다. eth0vnet0보기의 호스트의 관점에서, 어떤 IP를 “소유”하지 않습니다. Windows VM에는 고정 IP 구성이 있습니다.

iptables규칙을로 변경 ACCEPT하거나 더 제한적으로 사용하면 iptables -A FORWARD -o br0 -j ACCEPT모든 것이 잘 작동합니다! (즉, VM에서 LAN 시스템을 핑 (ping) 할 수 있으며 다른 방법으로도 핑할 수 있음)

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

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

또한 VM-LAN 트래픽은 eth0및을 암시해야합니다 vnet0. 그러나 -o br0“works”로 FORWARD 트래픽을 허용하는 것처럼 보입니다 (매우 신중하게 확인하지는 않았습니다).



답변

Stéphane Chazelas 의 의견 은 답변에 대한 힌트를 제공합니다.

Bridge-nf FAQ 에 따르면 bridge-nf는 iptables, ip6tables 또는 arptables가 브리지 된 트래픽을 볼 수 있도록합니다.

커널 버전 2.6.1부터 bridge-nf 동작 제어를위한 5 개의 sysctl 항목 이 있습니다 .

  • 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} 테이블로 전달

다음을 사용하여 넷 필터 방화벽 차단을 비활성화 할 수 있습니다.

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