이것이 헤어핀 NAT에 대한 정식 질문으로 높아졌기 때문에 현재 받아 들여진 것보다 더 일반적으로 맞는 대답을해야한다고 생각했습니다. 이것은 FreeBSD와 특히 관련이 있습니다.
이 질문은 게이트웨이에서 대상 NAT (DNAT)를 도입하여 외부 사용자가 사용할 수있는 RFC1918 주소 IPv4 네트워크의 서버에서 제공하는 서비스에 적용됩니다. 그런 다음 내부 사용자는 외부 주소를 통해 해당 서비스에 액세스하려고합니다. 패킷은 클라이언트에서 게이트웨이 장치로 전달되어 대상 주소를 다시 쓰고 내부 네트워크에 즉시 다시 주입합니다. 이름 야기주는 게이트웨이 패킷 차종 차례는 약 그것은이 날카로운 헤어핀 NAT 와 유사하여, 머리핀을 차례 .
게이트웨이 장치가 대상 주소를 다시 쓰지만 소스 주소가 아닌 경우 문제가 발생합니다. 서버는 내부 목적지 주소 (자체)와 내부 소스 주소 (클라이언트)를 가진 패킷을 수신합니다. 그러한 주소에 직접 회신 할 수 있다는 것을 알고 있으므로 그렇게합니다. 응답은 직접적이므로 게이트웨이를 통과하지 않으므로 리턴 패킷의 소스 주소를 다시 작성하여 초기 패킷에 대한 인바운드 대상 NAT의 영향을 균형 잡을 기회가 없습니다.
따라서 클라이언트는 외부 IP 주소 로 패킷을 보내지 만 내부 IP 주소 에서 응답을받습니다 . 두 패킷이 동일한 대화의 일부라는 것을 알 수 없으므로 대화가 발생하지 않습니다.
해결책은 이러한 대상 NAT가 필요하고 내부 네트워크에서 게이트웨이에 도달하는 패킷의 경우 일반적으로 소스 주소를 게이트웨이의 주소로 다시 작성하여 인바운드 패킷에서 소스 NAT (SNAT)를 수행하는 것입니다. 그런 다음 서버는 클라이언트가 게이트웨이 자체라고 생각하고 직접 응답합니다. 그러면 게이트웨이는 리턴 패킷에서 소스 주소와 대상 주소를 모두 다시 작성하여 인바운드 패킷에 대한 DNAT 및 SNAT의 영향을 균형있게 조정할 수 있습니다.
클라이언트는 외부 서버와 통신하고 있다고 생각합니다. 서버는 게이트웨이 장치와 통신하고 있다고 생각합니다. 모든 파티는 행복합니다. 이 시점에서 다이어그램이 도움이 될 수 있습니다.
일부 소비자 게이트웨이 장치는 두 번째 NAT 단계가 필요한 패킷을 인식하기에 충분히 밝으며 아마도 헤어핀 NAT 시나리오에서 즉시 사용할 수 있습니다. 다른 사람들은 그렇지 않으며, 그렇지 않을 것이며, 그들이 일을 할 수 없을 것입니다. 서버 결함에 대한 주제가 아닌 소비자 등급 장치에 대한 설명.
적절한 네트워킹 장치는 일반적으로 작동한다고 말할 수 있지만, 관리자를 추측하는 사업이 아니기 때문에 그렇게해야합니다. 리눅스는 iptables
DNAT를하기 위해 사용 합니다 :
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.3.11
HTTP 포트의 간단한 DNAT를 내부 서버의 활성화 할 수 192.168.3.11
있습니다. 그러나 헤어핀 NAT를 활성화하려면 다음과 같은 규칙이 필요합니다.
iptables -t nat -A POSTROUTING -d 192.168.3.11 -p tcp --dport 80 -j MASQUERADE
이러한 규칙은 올바르게 작동하려면 관련 체인의 올바른 위치에 있어야하며, filter
체인의 설정에 따라 NAT 트래픽이 흐르도록 추가 규칙이 필요할 수 있습니다. 이러한 모든 토론은이 답변의 범위를 벗어납니다.
그러나 다른 사람들이 말했듯이 헤어핀 NAT를 올바르게 사용하는 것이 문제를 처리하는 가장 좋은 방법은 아닙니다. 가장 좋은 방법은 스플릿-수평 DNS입니다 . 여기서 조직은 요청하는 클라이언트의 위치에 따라 내부 및 외부 사용자를위한 서로 다른 물리적 서버를 가지거나 DNS 서버를 구성하여 요청하는 클라이언트의 주소