잘 동작하지 않는 NAT에서는 UDP 홀 펀칭이 불가능합니까?

잘 동작하지 않는 NAT에서는 UDP 홀 펀칭이 불가능합니까?

일반적으로 NAT는 로컬 끝점의 공개 끝점을 해당 끝점에서 들어오는 모든 패킷에 대해 동일하게 유지하므로 UDP 홀 펀칭이 쉽게 가능해집니다. 그러나 일부 NAT는 패킷이 전송되는 각 호스트에 대해 로컬 끝점을 다른 공개 끝점에 매핑하므로 UDP 홀 펀칭이 불가능합니다.

전통적인 UDP 펀칭을 수행하는 유일한 방법은 원격 끝점을 추측하는 것입니다. 그러나 포트 수가 65,000개가 넘으므로 이 방법은 그다지 신뢰성이 없습니다. 그래서 나는 거의 모든 유형의 NAT를 통해 통신할 수 있는 Skype와 같은 애플리케이션이 이를 위해 릴레이를 사용한다는 것을 읽었습니다. 내 질문은 다음과 같습니다.

릴레이는 단순히 한 소켓에서 다른 소켓으로 들어오는 데이터를 전송하는 소켓입니다. 그렇죠? 추측을 하거나 릴레이를 사용하지 않고(더 이상 실제로 "홀 펀칭"이 아님) 나쁜 NAT를 통해 UDP 홀 펀칭을 수행하는 다른 방법이 있습니까?

답변1

잘 작동하지 않는 NAT라는 용어는 올바르지 않습니다. PAT(포트 주소 변환)를 사용하여 여러 개인 주소를 단일 공용 주소로 집계하는 모든 NAT 장치는 소스 포트를 다시 매핑합니다. 이것이 PAT에서 "포트 주소"를 의미합니다.

두 개의 내부 장치가 동일한 대상에 대해 동일한 소스 주소를 사용하는 것은 불가능하며 NAT 이후 소스 포트는 동일하게 유지될 것으로 예상되며 대상 시 소스 포트를 일관되게 유지하려고 시도하는 것은 보안 태세에 도움이 되지 않습니다. 여러 목적지. 따라서 이것은 일반적으로 방화벽이 설계할 때 갖는 목표가 아닙니다.

물론 여기서는 해당 소스로부터 실제로 패킷을 수신하지 않고 연결의 소스 포트를 알고자 하는 경우에는 도움이 되지 않습니다. 릴레이는 엔드포인트가 제3자를 통해 통신하는 확실한 옵션입니다(예, 릴레이는 제안한 대로 소켓 간에 패킷을 전송합니다. 구현은 스카이프 서버 내에서 훨씬 더 복잡할 수 있지만 원칙적으로는 동일합니다).

엔드포인트는 진행 중에 발생하는 변환을 인식하지 못하므로 일종의 사이드 채널(예: 중앙 서버에 포트를 등록만 하고 직접 통신함).

관련 정보