iptables 및 브리지를 포함하는 로컬 네트워크 내의 TCP 터널

iptables 및 브리지를 포함하는 로컬 네트워크 내의 TCP 터널

동일한 방식으로 작동하도록 외부 및 내부 전달 규칙을 구성하고 싶습니다. "내부 부분"에 대한 간단한 질문은 다음과 같습니다.

만약 내가 가지고 있다면

compA - eth0 192.168.0.1
compB - br0  192.168.0.2
        +eth0
compC - eth0 192.168.0.3     ...running appache on port80 with simple "it works" page

A에서 C로 포트 80을 전달하기 위해 compB에 tcp 터널을 설정할 수 있습니까?

브리지가 없는 경우(compB - eth0 192.168.0.2) 충분한 명령은 다음과 같습니다.

compB# iptables -t nat -A PREROUTING  -d 192.168.0.2 -p tcp --dport 80 -j DNAT --to-destination 192.168.0 3
compB# iptables -t nat -A POSTROUTING -d 192.168.0.3 -p tcp --dport 80 -j MASQUERADE

그러나 다음 명령을 사용하여 BRIDGE를 추가한 후:

compB# brctl addbr br0; brctl addif br0 eth0
compB# ip addr del 192.168.0.2/24 dev eth0
compB# ip addr add 192.168.0.2/24 dev br0
compB# ip route del default; ip route add default 192.168.0.2/24 dev br0
compB# ip link set dev br0 on

compA의 패킷이 더 이상 compC에 도착하지 않습니다. 시험:

compA# echo -en "GET / HTTP/1.0\r\n\r\n" | nc 192.168.0.2 80

...compC의 루트 http 페이지를 반환해야 합니다(브리징 없이도 잘 작동함).

고쳐 쓰다:

해결 방법 1:

echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables

iptables 브리징 후크를 비활성화한 후 상황이 정상으로 돌아왔습니다. 하지만 저는 여전히 표준 브리지 구성 방식으로 작동하는 "iptables 명령 조합" 솔루션을 찾고 있습니다.

해결 방법 2:

ip link set dev br0 promisc on

또한 작동하지만 글로벌 성능에 영향을 미칩니다.

해결 방법 3:

ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-dport 143 -j redirect --redirect-target DROP
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-dport  80 -j redirect --redirect-target DROP
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-sport  80 -j redirect --redirect-target DROP

...좋아 보입니다. 정보를 찾았습니다.여기그리고여기.

답변1

간단한 방법은 다음과 같습니다.

iptables -A PREROUTING -d my.public.ip.address/32 -p tcp -m tcp --dport 587 -j DNAT --to-destination a.different.ip.address:587

a.different.ip.address라우팅 테이블이 올바르게 구성되어 있는 한 모든 인터페이스에서 이는 가능합니다 .

전체 루프를 수행하려면 다음도 필요합니다.

iptables -A POSTROUTING -s a.different.ip.address/24 -j SNAT --to-source my.public.ip.address

관련 정보