두 가지 질문이 있습니다.
질문 1 : 내 데비안 머신은 ip 192.168.57.28 인터페이스 eth3을 가지고 있습니다. 누군가 192.168.57.28:1234에 연결하려고하면 요청을 다른 컴퓨터로 어떻게 리디렉션합니까 : 192.168.57.25:80?
질문 2 : 데비안 머신에 192.168.57.28의 eth3 인터페이스와 일부 동적 IP의 ppp0 인터페이스가 있고 누군가 포트 1234의 ppp0을 통해 연결을 시도하면 요청을 192.168.57.25:80으로 리디렉션하려면 어떻게해야합니까?
나는 이것을 시도했다 :
$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward
그러나 작동하지 않습니다.
답변
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE
첫 번째 포트는 포트 1234로 들어오는 모든 TCP 연결이 내부 시스템 192.168.57.25의 포트 80으로 전송되도록 지정합니다. iptables는 들어오는 모든 연결을 거부하기 때문에이 규칙만으로는 작업을 완료 할 수 없습니다. 그런 다음 두 번째 규칙으로 공개 IP로 인터넷에 연결하는 eth3에서 포트 1234로 들어오는 연결을 수락합니다. FORWARD 체인에 두 번째 규칙을 추가하여 패킷을 192.168.57.25의 포트 80으로 전달할 수 있습니다.
편집 : POSTROUTING이 추가되었습니다.
연결을 추적합니다. 그렇지 않으면 외부 호스트는 내부 IP 192.168.57.25를 볼 수 있습니다.
EDIT2 : 방금 –to (sry) 대신 –to-destination이어야한다는 힌트를 얻었습니다.
답변
Daywalker와 Dánjal Salberg Adlersson에게 감사합니다. 몇 시간의 맹세 후, iptables를 통한 포트 포워딩이 마침내 작동합니다. (데비안에서 테스트)
bash-script
#!/bin/bash
IPTBL=/sbin/iptables
IF_IN=eth0
PORT_IN=40022
IP_OUT=172.16.93.128
PORT_OUT=22
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE