정확한 답을 완전히 확신하지 못했기 때문에 원래 답변을 삭제했습니다. 그 후 문제의 네트워크를 시뮬레이션하기 위해 VM의 가상 네트워크를 약간 설정할 시간이있었습니다. 나를 위해 일한 방화벽 규칙 세트는 다음과 같습니다 ( 표의 경우에만 iptables-save
형식으로 nat
).
-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE
첫 번째 POSTROUTING
규칙은 LAN과 인터넷 연결을 공유하는 간단한 방법입니다. 나는 완전성을 위해 그곳을 떠났습니다.
PREROUTING
규칙 및 제 POSTROUTING
외부 IP 주소를 통해 서버에 접속하는 관계없이 LAN 연결은 내부 또는 외부에서 발생 여부에 일어날 수 있도록 함께 규칙 적절한의 NAT를 확립한다. LAN의 클라이언트가 외부 IP 주소를 통해 서버에 연결되면 서버는 라우터의 내부 IP 주소 (192.168.2.1)에서 연결이 온 것으로 간주합니다.
흥미롭게도 두 번째 POSTROUTING 규칙에는 몇 가지 변형이 적용됩니다. 대상이로 변경 -j SNAT --to-source 192.168.2.1
되면 그 결과는 다음과 같습니다 (놀랍지 않게) MASQUERADE
. 서버는 로컬 LAN 클라이언트의 연결을 라우터의 내부 IP 주소 에서 시작한 것으로 간주 합니다. 반면 대상이로 변경 -j SNAT --to-source 89.179.245.232
되면 NAT는 여전히 작동하지만 이번에는 서버가 로컬 LAN 클라이언트의 연결을 라우터의 외부 IP 주소 (89.179.245.232)에서 시작한 것으로 간주합니다.
마지막으로, 규칙 이 LAN 클라이언트에서 오는 패킷과 일치하지 않기 때문에 원래 PREROUTING
/ DNAT
규칙이 -i ppp0
작동하지 않습니다 ( ppp0
인터페이스 를 통해 라우터에 들어 가지 않기 때문에 ). PREROUTING
내부 LAN 클라이언트에 대해서만 두 번째 규칙 을 추가하여 작동 시킬 수 있지만 IMO (Inelegant)이며 외부 IP 주소를 명시 적으로 참조해야합니다.
이제 "헤어핀 NAT"(또는 "NAT 루프백"또는 "NAT 리플렉션"또는 호출하기를 원하는 모든 것) 솔루션을 자세하게 배치 한 후에도 분할 수평 DNS 솔루션은 여전히 믿습니다. -외부 클라이언트가 외부 IP로 해석되고 내부 클라이언트가 내부 IP로 해석되는 경우, 더 권장되는 경로입니다. 왜? NAT가 작동하는 방식을 이해하는 것보다 DNS가 작동하는 방식을 이해하는 사람이 더 많기 때문에 우수한 시스템을 구축하는 데있어 큰 부분은 유지 관리 가능한 부분을 사용하는 것입니다. DNS 설정은 비전 NAT 설정 (물론 IMO)보다 이해하기 쉬우므로 올바르게 유지 관리 될 가능성이 높습니다.