iptables를 사용하여 아웃바운드 트래픽을 다른 IP로 리디렉션하는 방법

iptables를 사용하여 아웃바운드 트래픽을 다른 IP로 리디렉션하는 방법

서버 1(192.168.0.1:8080)과 서버 2(192.168.0.2:8765)가 있습니다. iptables를 사용하여 아웃바운드 트래픽을 server1 포트 8080에서 server2로 리디렉션해야 합니다.

server1에서 다음을 설정했습니다.

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A OUTPUT -p tcp --sport 8080 -m owner --uid-owner nobody -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --sport 8080 -m owner --uid-owner tomcat7 -j DNAT --to-destination 192.168.0.2:8765

그러나 이것은 작동하지 않습니다. 또한 -m및 매개변수 없이는 작동하지 않습니다 -uid-owner.

답변1

나는 주어진 호스트:포트에 대한 나가는 트래픽을 다른 호스트:포트로 리디렉션하기 위해 다음과 같은 규칙을 사용합니다. (가상 머신 클러스터에서 임베디드 시스템(고정 주소 포함)을 시뮬레이션하기 위한 것입니다.)

iptables -t nat -A OUTPUT -p tcp -d 192.168.1.101 --dport 1234 -j DNAT --to-destination 192.168.1.102:4321

위 규칙을 설치한 후 다음과 같은 경우:

root@archive:~# telnet 192.168.1.101 8888

지정된 주소로 이동하는 트래픽이 표시됩니다.

root@archive:~# tcpdump -i eth2 host 192.168.1.102 or host 192.168.1.101
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes
21:04:27.953124 IP archive.34496 > 192.168.1.101.8888: Flags [S], seq 2498286032, win 29200, options [mss 1460,sackOK,TS val 961612280 ecr 0,nop,wscale 7], length 0
21:04:28.949044 IP archive.34496 > 192.168.1.101.8888: Flags [S], seq 2498286032, win 29200, options [mss 1460,sackOK,TS val 961612530 ecr 0,nop,wscale 7], length 0

만약 너라면:

root@archive:~# telnet 192.168.1.101 1234

변환된 주소로 이동하는 트래픽이 표시되어야 합니다.

21:04:50.321139 IP archive.53164 > 192.168.1.102.4321: Flags [S], seq 2332928074, win 29200, options [mss 1460,sackOK,TS val 961617873 ecr 0,nop,wscale 7], length 0
21:04:52.325090 IP archive.53164 > 192.168.1.102.4321: Flags [S], seq 2332928074, win 29200, options [mss 1460,sackOK,TS val 961618374 ecr 0,nop,wscale 7], length 0

귀하의 질문에 있는 규칙은 소스 포트(--sport)를 지정합니다. 아웃바운드 트래픽의 경우 일반적으로 소스 포트를 모릅니다. 일반적으로 소켓 바인딩/연결 시 동적으로 할당됩니다. 예를 들어 위 덤프에서는 34496 및 53164입니다.

관련 정보