내가 설정 이더넷 브리지가 br0
두 개의 인터페이스를 포함 eth0
하고tap0
brctl addbr br0
brctl addif eth0
brctl addif tap0
ifconfig eth0 0.0.0.0 promisc up
ifconfig tap0 0.0.0.0 promisc up
ifconfig br0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255
내 기본 FORWARD
체인 정책은DROP
iptables -P FORWARD DROP
다음 규칙을 추가하지 않으면 트래픽이 브리지를 통과하지 않습니다.
iptables -A FORWARD -p all -i br0 -j ACCEPT
내가 아는 iptables
한 IP 계층에 대해서만 책임이 있습니다.
ebtables
이더넷 브리지에서 트래픽을 필터링해야합니다.
그렇다면 왜 iptable의 FORWARD 체인에 ACCEPT 규칙을 추가해야합니까?
답변
linux 2.4에 대한 패치로 사용 가능하고 Linux 2.6에서 사용되는 br-nf 코드로 인해 :
br-nf 코드는 브리지 된 IP 프레임 / 패킷이 iptables 체인을 통과하도록합니다. 이더넷 계층의 Ebtables 필터와 IP 패킷 만 필터링합니다.
작업중인 트래픽이 ip iptables
이므로 br-nf 가 브리지 된 패킷을에 전달 하기 때문에 규칙이 계속 적용 됩니다 iptables
.
이 상호 작용에 대해 읽을 수있는 훌륭한 자원이며, 이 하나 의 기능을 자세히 BR-NF 전부 또는 기능의 일부를 사용하지 않도록 설정하는 방법을 포함하여 코드 (즉, iptables에에 다리 트래픽을 전달하지 않음).
답변
다음을 입력하여이 동작을 비활성화 할 수 있습니다 (iptables가 브리지 된 패킷을 처리하도록 함).
echo "0" > /proc/sys/net/bridge/bridge-nf-call-iptables
( http://ebtables.sourceforge.net/documentation/bridge-nf.html 참조 )
답변
시스템의 브릿지에서 iptables를 사용할 필요가없는 경우 다음 중 하나를 사용하여 영구적으로 비활성화 할 수 있습니다.
- iptables 규칙 추가 :
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
- 또는 /etc/sysctl.conf를 편집하십시오.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
답변
ebtables 체인은 전달되지 않는 브리지 포트에 프레임이 들어 가지 않습니다. 이것을 볼 수 있습니다 : http://ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html