내 Linux 컴퓨터에서 다음 설정을 사용하고 있습니다.
시스템에는 두 개의 네트워크 브리지가 있으며 해당 인터페이스는 다음과 같습니다.
브릿지 기본값-
- 근거리 통신망
- 핏기 없는
브리지_1 -
- 무선랜1
인터페이스 WLAN1에서 도착하는 메시지가 LAN 인터페이스(bridge_default)에 도달하지 않고 WAN 인터페이스에만 도달하도록 인터페이스 간을 격리하고 싶습니다.
이를 위해 다음과 같은 규칙을 따릅니다.
Chain DEFAULT_FORWARD (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- wlan1 wan 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- bridge_default wlan1 0.0.0.0/0 0.0.0.0/0
Chain DEFAULT_INPUT (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- wlan1 wan 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- bridge_default wlan1 0.0.0.0/0 0.0.0.0/0
Chain DEFAULT_OUTPUT (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- wlan1 wan 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- bridge_default wlan1 0.0.0.0/0 0.0.0.0/0
그러나 실제로 이 구성을 테스트했을 때 동작이 예상과 다르다는 것을 알았습니다. 보다 구체적으로, 로그는 메시지가 인터페이스 WLAN1이 아닌 bridge_1에서 도착했음을 보여줍니다.
IN=bridge_1 OUT= PHYSIN=wlan1 MAC=00:e0:92:00:01:51:e8:2a:ea:18:60:7d:08:00 S RC=192.168.2.101 DST=192.168.1.1 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=21154 PROTO=ICMP TYPE=8 CODE=0 ID=6 SEQ=6891
편집하다
iptables-save 명령의 결과는 다음과 같습니다.
-A DEFAULT_FORWARD -i wlan1 -o wan -j ACCEPT
-A DEFAULT_FORWARD -i bridge_default -o wlan1 -j DROP
-A DEFAULT_INPUT -i wlan1 -o wan -j ACCEPT
-A DEFAULT_INPUT -i bridge_default -o wlan1 -j DROP
-A DEFAULT_OUTPUT -i wlan1 -o wan -j ACCEPT
-A DEFAULT_OUTPUT -i bridge_default -o wlan1 -j DROP
사용 가능한 NIC 목록:
root@ugwcpe:~# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP,80000> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
8: eth0_1: <NO-CARRIER,BROADCAST,MULTICAST,UP,80000> mtu 1500 qdisc pfifo_fast master default_bridge state DOWN mode DEFAULT group default qlen 1000
link/ether 00:e0:92:00:01:40 brd ff:ff:ff:ff:ff:ff
9: eth0_2: <NO-CARRIER,BROADCAST,MULTICAST,UP,80000> mtu 1500 qdisc pfifo_fast master default_bridge state DOWN mode DEFAULT group default qlen 1000
link/ether 00:e0:92:00:01:41 brd ff:ff:ff:ff:ff:ff
10: eth0_3: <NO-CARRIER,BROADCAST,MULTICAST,UP,80000> mtu 1500 qdisc pfifo_fast master default_bridge state DOWN mode DEFAULT group default qlen 1000
link/ether 00:e0:92:00:01:42 brd ff:ff:ff:ff:ff:ff
11: eth0_4: <NO-CARRIER,BROADCAST,MULTICAST,UP,80000> mtu 1500 qdisc pfifo_fast master default_bridge state DOWN mode DEFAULT group default qlen 1000
link/ether 00:e0:92:00:01:43 brd ff:ff:ff:ff:ff:ff
12: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP,80000> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:e0:92:00:01:44 brd ff:ff:ff:ff:ff:ff
15: default_bridge: <BROADCAST,MULTICAST,UP,LOWER_UP,80000> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 00:e0:92:00:01:40 brd ff:ff:ff:ff:ff:ff
16: wan@eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP,80000> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default
link/ether 00:e0:92:00:01:45 brd ff:ff:ff:ff:ff:ff
17: rtlog0: <BROADCAST,MULTICAST,UP,LOWER_UP,80000> mtu 1500 qdisc pfifo_fast master default_bridge state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:e0:92:00:01:40 brd ff:ff:ff:ff:ff:ff
18: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP,80000> mtu 1500 qdisc pfifo_fast master default_bridge state UP mode DEFAULT group default qlen 1000
link/ether 00:e0:92:00:01:50 brd ff:ff:ff:ff:ff:ff
25: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP,80000> mtu 1500 qdisc pfifo_fast master default_bridge state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:e0:92:00:01:51 brd ff:ff:ff:ff:ff:ff
26: wlan0.1: <BROADCAST,MULTICAST,UP,LOWER_UP,80000> mtu 1500 qdisc pfifo_fast master default_bridge state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:e0:92:00:01:52 brd ff:ff:ff:ff:ff:ff
기본 전달 규칙:
-A DEFAULT_FORWARD -i bridge1 -o wan -j ACCEPT
-A DEFAULT_FORWARD -i wan -o bridge1 -j ACCEPT
-A DEFAULT_FORWARD -i default_bridge -o bridge1 -j DROP
-A DEFAULT_FORWARD -i bridge1 -o default_bridge -j DROP
-A DEFAULT_FORWARD -i bridge1 -o wan -j ACCEPT
-A DEFAULT_FORWARD -i wan -o bridge1 -j ACCEPT
-A DEFAULT_FORWARD -o bridge1 -j DROP
-A DEFAULT_FORWARD -i bridge1 -j DROP
-A DEFAULT_FORWARD -i wlan -o wan -j ACCEPT
-A DEFAULT_FORWARD -i wan -o wlan -j ACCEPT
-A DEFAULT_FORWARD -o wlan -j DROP
-A DEFAULT_FORWARD -i wlan -j DROP
누군가 나를 도와주고 내가 뭘 잘못하고 있는지 지적할 수 있나요?
다들 감사 해요!
답변1
wlan1
메시지가 에 전달되는 것을 차단하고 있지 않습니다 lan
.
나는 그것에 대해 조금 혼란스러워요 NICs
.
이 시도:
-A DEFAULT_FORWARD -i wlan1 -o wan -j ACCEPT
-A DEFAULT_FORWARD -i bridge_default -o wlan1 -j DROP
############# ADDED #################################
-A DEFAULT_FORWARD -i wlan1 -o bridge_default -j DROP
#####################################################
-A DEFAULT_INPUT -i wlan1 -o wan -j ACCEPT
-A DEFAULT_INPUT -i bridge_default -o wlan1 -j DROP
-A DEFAULT_OUTPUT -i wlan1 -o wan -j ACCEPT
-A DEFAULT_OUTPUT -i bridge_default -o wlan1 -j DROP
bridge_default
추가한 첫 번째 규칙과 일치하지 않으면 패킷이 전달되지 않습니다.-i wlan1 -o wan -j ACCEPT
답변2
여기에 설명된 문제는 iptables가 Linux 스택 이후에만 적용되고 여러 가지 방법으로 해결될 수 있다는 사실에 기인합니다.
- iptable 대신 ebtable을 사용하세요 -
ebtables는 ETH 계층에서 규칙을 적용하므로 여기에 설명된 것보다 실제 인터페이스에 규칙을 적용할 수 있습니다. 패킷이 Linux 브리지에 도달하면 편집 및 변경되므로 IN 값이 브리지가 됩니다.
- 인터페이스 대신 bridge_1 사용 -
위의 동일한 테이블 규칙이 인터페이스 대신 브리지에 적용되면 문제가 발생하지 않으며 규칙이 제대로 작동합니다.