
우리는 3대의 PC를 가지고 있으며 그 중 2대는 인터넷에 연결되어 있습니다. (둘 다 2개의 NIC가 있습니다)
PC1:
eth0 - 1.0.0.1 (external IP)
eth1 - 172.16.0.1 (internal IP)
PC2:
eth0 - 1.0.0.2 (external IP)
eth1 - 172.16.0.2 (internal IP)
PC3:
eth0 - 172.16.0.3 (internal IP)
이제 PC1과 PC2에서 PC3으로 포트 80을 전달하려고 합니다.
그러나 문제가 있습니다. iptables 포트 전달은 PC1 또는 PC2에서 잘 작동하지만 PC3이 PC1 또는 PC2를 게이트웨이로 사용하는 경우에만 작동합니다.
IPtables 규칙(PC1용):
iptables -t nat -A PREROUTING -p tcp -d 1.0.0.1 --dport 80 -j DNAT --to-destination 172.16.0.3:80
iptables -A FORWARD -p tcp -d 172.16.0.3 --dport 80 -j ACCEPT
그렇다면 질문은: PC3의 게이트웨이 설정에 관계없이 PC1과 PC2 모두에서 포트 매핑을 가질 수 있습니까?
미리 감사드립니다.
답변1
목적지만 다시 작성했습니다.
응답 패킷도 NAT될 수 있도록 소스 주소를 PC1 또는 PC2에서 변경해야 합니다. 그리고 패킷이 PC3으로 이동하도록 대상 주소를 변경해야 합니다. 소스와 대상을 모두 다시 쓰는 것을 "이중 NAT"라고 합니다.
PREROUTING 체인에서 DNAT를 수행하고 POSTROUTING 체인에서 SNAT를 수행해야 합니다. 다음과 같습니다(PC1의 경우).
iptables -t nat -A PREROUTING -p tcp -m tcp -d 1.0.0.1 --dport 80 -j DNAT \
--to-destination 172.16.0.3:80
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 172.16.0.3 --dport 80 \
-j SNAT --to-source 172.16.0.1
답변2
PC3에 다른 IP 주소를 제공하고 PC1과 PC2의 DNAT 규칙을 PC3의 다른 IP 주소에 사용합니다.
PC3에서는 다음과 같이 "ip 규칙"을 사용하여 소스 IP 주소로 라우팅합니다.http://lartc.org/howto/lartc.rpdb.multiple-links.html