UDP NAT 펀치

UDP NAT 펀치

다음 두 가지 질문이 있습니다. 다음 문제를 해결하도록 도와주세요.

  1. 내가 아는 한, 대칭형 NAT에서는 원격 호스트의 패킷이 로컬 네트워크로 돌아갈 수 있도록 NAT에 창을 생성하기 위해 로컬 숨겨진 노드(NAT 뒤)가 연결을 시작해야 합니다. 누군가 이 작업을 수행하는 방법을 말해 줄 수 있습니까?

  2. 애플리케이션은 소스와 대상 사이의 경로에 NAT가 존재한다는 것을 어떻게 알 수 있습니까?

답변1

(2)부터 시작하면 됩니다.Michal Zalewski의 p0f 패시브 모니터링 도구. 이는 TCP "SYN" 소스가 NAT 뒤에 있다는 추측을 지원하는 것으로 보입니다.

답변2

UDP는 연결이 없기 때문에 NAT 구현에서는 UDP 통신이 실제로 어디에서 끝나는지 알 수 없으므로 전달된 첫 번째 패킷에 변환 테이블 항목을 생성하기만 하면 됩니다. 예를 들어 IP 10.0.0.2의 숨겨진 호스트는 소스 포트 10000과 대상 포트 20000을 사용하여 주소 1.1.1.1의 NAT 라우터를 통해 호스트 2.2.2.2로 패킷을 보냅니다. NAT는 패킷이 도착하면 다음 항목을 생성합니다.

10.0.0.2 10000 - 1.1.1.1 10000 - 2.2.2.2 20000

두 번째 필드의 포트 번호는 다른 번역 항목에서 이미 사용 중인 경우 다를 수 있습니다. 이 항목을 생성하면 2.2.2.2:20000에서 1.1.1.1:10000까지의 모든 UDP 패킷이 10.0.0.2:10000으로 리디렉션됩니다.

두 번째 질문과 관련하여: 소스와 대상 사이에 NAT가 있는 경우 원격 측에서 보고된 원격 주소 getpeername(2)와 UDP 페이로드에서 직접 보고된 원격 주소는 다릅니다.

NAT 홀 펀칭에 대한 추가 정보 및 링크위키피디아에서.

관련 정보