동일한 방식으로 작동하도록 외부 및 내부 전달 규칙을 구성하고 싶습니다. "내부 부분"에 대한 간단한 질문은 다음과 같습니다.
만약 내가 가지고 있다면
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