브리지를 사용하여 IP 전달 설정

브리지를 사용하여 IP 전달 설정

저는 두 인터페이스 간의 IP 전달 설정에 익숙하며 항상 작동합니다. 이제 로컬 브리지에서 출력 인터페이스로의 IP 전달을 설정하려는 다른 시나리오가 있습니다.

                        lan0
eno1 < --- > bridge0 -< 
                        lan1

다음 명령을 사용했습니다.

sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING --out-interface eno1 -j MASQUERADE
iptables -A FORWARD --in-interface bridge0 -j ACCEPT

wlan0에서 8.8.8.8로 ping을 시도해보세요.

tcpdump를 사용하면 eno1에 도착하는 패킷을 볼 수 있고 ping 응답을 받을 수 있습니다. 그러나 eno1에서 다시 bridge0으로 전달되지는 않습니다.

브리지를 사용하면 뭔가 빠졌나요?

일부 요청된 출력:

root@mclaren:/home/ramon# ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eno1             UP             f0:d4:e2:eb:c9:9c <BROADCAST,MULTICAST,UP,LOWER_UP>
    <BROADCAST,MULTICAST,UP,LOWER_UP>
bridge0          UP             a6:13:ed:28:be:7a <BROADCAST,MULTICAST,UP,LOWER_UP>
lan0      UNKNOWN        7a:46:b3:ea:a2:92 <BROADCAST,UP,LOWER_UP>
lan1      UNKNOWN        fa:2b:35:57:5c:44 <BROADCAST,UP,LOWER_UP>

root@mclaren:/home/ramon# ip -4 -br address
lo               UNKNOWN        127.0.0.1/8
eno1             UP             172.23.1.107/24
bridge0          UP             192.168.0.254/32

root@mclaren:/home/ramon# ip route
default via 172.23.1.254 dev eno1 proto dhcp src 172.23.1.107 metric 100
172.23.1.0/24 dev eno1 proto kernel scope link src 172.23.1.107
172.23.1.254 dev eno1 proto dhcp scope link src 172.23.1.107 metric 100
192.168.0.0/24 dev bridge0 scope link src 192.168.0.254

root@mclaren:/home/ramon# ip -4 neigh
172.23.1.111 dev eno1 lladdr 1c:98:ec:1a:d5:c0 STALE
192.168.0.50 dev bridge0 FAILED
192.168.0.97 dev bridge0lladdr 0a:a0:db:c0:ab:91 STALE
172.23.1.105 dev eno1  FAILED
192.168.0.25 dev bridge0 lladdr 0a:a0:db:c0:41:f4 STALE
172.23.1.130 dev eno1  FAILED
172.23.1.254 dev eno1 lladdr e0:23:ff:d0:b8:22 REACHABLE
172.23.1.163 dev eno1 lladdr e0:70:ea:01:18:6e STALE
192.168.0.33 dev bridge0 lladdr 0a:a0:db:c0:a0:0d STALE

root@mclaren:/home/ramon# bridge link
124: lan0: <BROADCAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100
164: lan1: <BROADCAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100

root@mclaren:/home/ramon# iptables-save -c
# Generated by iptables-save v1.8.7 on Sat Aug 27 18:53:58 2022
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [22529:1892750]
:OUTPUT ACCEPT [0:0]
[0:0] -A FORWARD -i bridge0 -j ACCEPT
COMMIT
# Completed on Sat Aug 27 18:53:58 2022
# Generated by iptables-save v1.8.7 on Sat Aug 27 18:53:58 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
[13:990] -A POSTROUTING -o eno1 -j MASQUERADE
[0:0] -A POSTROUTING -o eno1 -j MASQUERADE
COMMIT
# Completed on Sat Aug 27 18:53:58 2022

답변1

방화벽 규칙 세트가 반환 트래픽을 차단합니다.

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [22529:1892750]
:OUTPUT ACCEPT [0:0]
[0:0] -A FORWARD -i bridge0 -j ACCEPT
COMMIT

[...]

이를 통해 브리지 인터페이스에서 수신된 트래픽이 다른 곳으로 이동할 수 있습니다. 그러나 어디에서든 수신된 트래픽이 브리지 인터페이스에 도달하도록 허용할 방법은 없습니다. 따라서 ping 응답이 도착하면 기본 정책인 폐기가 적용됩니다.

간단히 이렇게 할 수 있습니다:

iptables -A FORWARD -o bridge0 -j ACCEPT

아니면 당신은 사용할 수 있습니다상태 저장 방화벽답변 허용(만):

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

무엇보다도(예: 추가 설정이 필요한 FTP와 같은 프로토콜에 대한 대체 데이터 스트림)관련된트래픽에는 관련 ICMP 오류가 포함되어 있으므로 UDP 오류를 다시 수신하거나 경로 MTU 검색이 제대로 작동할 수 있습니다.

이 답변에는 브릿지 사용과 관련된 내용이 없습니다.


Docker를 사용하면 대신해야 하는지 여부를 고려해야 할 수도 있습니다.끼워 넣다이러한 규칙은 FORWARD 체인(참조)이 아닌 DOCKER-USER 체인(Docker가 여기에 무언가를 추가할 수 있기 때문에)에 있습니다.자세한 정보는 거기서필요한지 알아두세요).

iptables -N DOCKER-USER || true # so it works whether Docker was started before or not
iptables -I DOCKER-USER 1 -o bridge0 -j ACCEPT
iptables -I DOCKER-USER 2 ...

또는

iptables -N DOCKER-USER || true
iptables -I DOCKER-USER 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
...

이제 Docker가 존재하므로할 수 있는일반 인터페이스 대신 브리지를 사용하는 것과 관련됩니다. 그런 다음 FORWARD 또는 DOCKER-USER에 추가해야 합니다. 그렇지 않으면 lan0과 lan1 사이의 브리지 트래픽이 중단될 수 있습니다.

iptables -A -m physdev --physdev-is-bridged -j ACCEPT

이 Docker 문제에 대한 관련 질문:여기,여기또는거기. 이것은 상당히 발전된 주제입니다. 즉, Docker가 네트워크 설정/방화벽 설정을 변경한 시스템에서는 네트워크 실험을 수행하지 마세요.

관련 정보