기술 지원 QQ 그룹: 782508536
최근 P2P 테스트에 참여한 관련 논리는 NAT 침투 원리에 대해 어느 정도 이해하고 있습니다 (물론 심층적이지는 않음). 이 글은 또한 인터넷과 문헌의 일부 정보를 종합적으로 인용했다. (내가 글에 인용문을 표시하지 않은 것을 용서해 주십시오.) 이 문장 쓰기의 목적은 자신의 언어로 이 과정을 묘사하고, 동시에 설명 과정에 약간의 이해를 추가하여 문장 한 편을 형성하여 요점 기록으로 삼는 것이다. 이 한 조각에 대한 지식에도 나는 많은 맹점이 있으니, 여러분 모두 큰 신에게 한두 가지를 가르쳐 주십시오.
NAT (network address translation) 는 네트워크 마스크 또는 IP 마스킹이라고도 합니다. NAT 는 주로 내부 사설 IP 주소를 공용 네트워크에서 사용할 수 있는 IP (공용 IP) 로 변환하는 네트워크 주소 변환 기술입니다.
1980 년대로 돌아가면, 사람들은 인터넷 주소를 디자인할 때 아무리 길어도 32 제곱의 단말기 장치가 인터넷에 접속할 수 없을 것이라고 생각했다. 또한 IP 길이를 늘리면 (심지어 4 바이트에서 6 바이트로 증가) 당시 디바이스의 계산, 저장 및 전송 비용이 증가합니다. 나중에 점차 IP 주소가 충분하지 않다는 것을 알게 되자 NAT 가 탄생했다! (IPv6 도 해결책이지만 보편화되지 않았으며 향후 IPv6 이 충분한지는 미지수이다.)
그래서 NAT 기술이 부상할 수 있는 이유는 우리나라 공공망의 IP 주소가 너무 적기 때문에 이런 주소 변환 전략을 채택할 것이기 때문이다. NAT 의 본질은 기계 그룹이 동일한 IP 를 공유하도록 하여 IP 부족 문제를 일시적으로 해결하는 것입니다.
사실 장점은 위에서 이미 말씀드렸습니다. 정의에 따르면 NAT 가 여러 컴퓨터를 동시에 연결하고 인트라넷 IP 를 숨겨 인트라넷의 네트워크 보안을 높일 수 있다는 것을 쉽게 알 수 있습니다. 또한 NAT 는 외부 데이터의 NAT 매핑 레코드를 검사하고 해당 레코드가 없는 패킷을 거부하여 네트워크 보안을 강화합니다.
그렇다면 NAT 도 몇 가지 폐단을 가져왔다. 첫째, NAT 장치는 패킷을 편집 수정하며 데이터 전송 효율을 떨어뜨린다. (윌리엄 셰익스피어, Northern Exposure (미국 TV 드라마), Northern Exposure 또한, 프로토콜 애플리케이션마다 달리, 일부 프로토콜은 NAT (NAT 를 통과하지 못하는 프로토콜이 상당수 있음) 를 통과하지 못하고 침투 기술을 통해 해결해야 한다. 우리는 나중에 침투 기술에 초점을 맞출 것이다.
간단한 배경을 파악한 후 NAT 구현의 주요 방법 및 NAT 유형에 대해 설명합니다.
1) 정적 NAT: 정적 주소 변환입니다. 공용 IP 는 사설 IP 에 해당하며 일대일 변환이라는 뜻입니다. 또한 포트 변환이 아닌 IP 변환만 수행된다는 점에 유의하십시오. 밤을 들다:
2)NAPT: 포트 재사용 기술. 정적 NAT 와 달리 NAPT 는 IP 주소뿐만 아니라 전송 계층의 포트도 변환해야 합니다. 특히 대외적으로 단 하나의 공용 IP 만 있고, 포트를 통해 서로 다른 개인 IP 호스트의 데이터를 구분한다는 것을 알 수 있다. 밤 하나 더 주세요.
위의 NAT 구현에 대한 소개를 통해 NAPT 가 실제 환경에서 더 널리 사용되고 있다는 것을 쉽게 알 수 있습니다. 따라서 다음은 NAPT 의 주요 유형에 중점을 둡니다.
NAPT 의 경우 주로 테이퍼 NAT 와 대칭 NAT 의 두 가지 범주로 나뉩니다. 여기서 원뿔 NAT 는 전체 원뿔, 유한 원뿔 및 포트 제한 원뿔로 나뉩니다. 요약: 대칭 NAT 는 포트에 해당하는 요청입니다. Cone NAT (비대칭 NAT) 는 한 포트가 여러 요청 (외부에서 내부로) 에 대응하는 것을 의미합니다. 소스 IP 포트가 변경되지 않는 한 대상 IP 가 같은지 여부에 관계없이 NAT 의 동일한 포트에 매핑되어 송곳처럼 보입니다. 다음은 네 가지 유형과 그 차이점입니다.
1) 전체 테이퍼 NAT (FC).
특징: IP 및 포트 제한 없음.
표현: 동일한 내부 IP 주소와 동일한 포트 번호 (IP_IN_A: PORT_IN_A) 의 호스트 수신/요청을 공용 IP 포트 (IP _ out _ b: port _) 에 매핑합니다 자체 공용 네트워크 IP 에 매핑된 모든 외부 IP 주소 및 포트 액세스 (IP_OUT_B: PORT_OUT_B) 는 내부 호스트 (IP_IN_A: PORT_IN_A) 에 재배치됩니다 이 기술에서는 C/S 아키텍처 기반 애플리케이션이 어느 한쪽 끝에서 접속을 시작할 수 있습니다. 간단히 말하면 우회하는 것 아닌가요? 클라이언트가 매핑을 하면 (natip: natport->; A:P 1), 호스트 b 또는 포트 a: 다른 IP 의 P2 는 이 구멍을 사용하여 클라이언트에 데이터를 전송할 수 있습니다. 아래 그림 () 을 참조하십시오.
2) 제한된 원뿔 NAT (제한된 원뿔 NAT)
특징: IP 제한, 포트 제한 없음.
표현: 전체 테이퍼 NAT 와 달리 공용 네트워크 매핑 포트 후에는 모든 IP 가 해당 포트에 액세스할 수 없습니다. 통신을 위해서는 내부 호스트가 이미 외부 IP 호스트에 대한 접속을 시작한 다음 외부 IP 호스트가 내부 호스트와 통신할 수 있지만 포트는 제한되지 않습니다. 밤을 들다. 클라이언트가 안쪽에서 바깥쪽으로 매핑을 설정할 때 (natip: natport->; A:P 1), 시스템 a 는 다른 포트 (P2) 를 사용하여 클라이언트에 능동적으로 연결할 수 있지만 시스템 b 는 허용되지 않습니다. IP 는 제한되어 있지만 포트는 제멋대로입니다. 아래 그림을 참조하십시오 (녹색은 통신 허용, 빨간색은 통신 금지).
3) 포트 제한 콘 NAT.
특징: IP 및 포트 제한.
성능: 이 기술은 제한된 콘 NAT 보다 더 엄격합니다. 제한된 테이퍼 NAT 기능 외에도 복구 호스트의 포트도 필요합니다. 즉, 내부 호스트가 이미 외부 호스트에 메시지를 보낸 경우에만 (IP 주소가 A 이고 포트가 P 1 이라고 가정) 외부 호스트는 공용 IP:PORT 의 정보를 대상 주소 및 대상 포트로 내부 호스트에 UDP 메시지를 보낼 수 있습니다. 또한 요청 메시지의 IP 는 A 여야 하고 포트는 P 1 (IP 주소 A, 포트 P2 또는 IP 주소 사용) 이어야 합니다. 아래 그림의 예를 참조하십시오. 이 요구 사항은 외부 메시지 요청 출처에 대한 제한을 더욱 강화하여 Restrictd Cone 보다 더 안전합니다.
4) 대칭 NAT (대칭 NAT)
기능: 각 외부 호스트 또는 포트에 대한 세션은 서로 다른 포트 (구멍) 에 매핑됩니다.
표현: 동일한 내부 IP:PORT 에서 동일한 대상 IP:PORT 를 가리키는 요청만 NAT 에서 동일한 공용 (외부) IP:PORT 로 변환됩니다. 그렇지 않으면 NAT 에서 새 외부 (공용) IP:PORT 를 할당합니다. 또한 내부 호스트 요청을 받은 외부 호스트만 내부 호스트에 패킷을 보낼 수 있습니다. 내부 호스트는 동일한 IP 및 동일한 포트를 사용하여 외부 다중 IP 와 통신합니다. 클라이언트는 NAT 를 NatIP:NatPortA 에 매핑하여 서버 A(IP_A:PORT_A) 에 대한 연결을 설정하려고 합니다. 클라이언트와 서버 B(IP_B:PORT_B) 간의 연결은 NAT 를 NatIP:NatPortB 에 매핑하여 이루어집니다. 즉, 동일한 클라이언트와 다른 대상 IP:port 통신, NAT 매핑 후의 공용 네트워크 IP:port 는 다릅니다. 이때 B 가 클라이언트와 통신하려면 NatIP:NatPortB (즉, 보라색 구멍) 를 통해서만 수행할 수 있고 NatIP:NatPortA (즉, 황동) 를 통해서는 수행할 수 없습니다.
다음은 NAPT 의 네 가지 NAT 유형입니다. 보시다시피 1) 형에서 4) 형까지 NAT 의 제한이 점점 커지고 있습니다.
위의 소개에 따르면 실제 네트워크 상황에서는 각 디바이스가 있는 네트워크 환경이 다르다는 것을 알 수 있습니다. 따라서 이러한 장치가 통신하려면 먼저 장치의 네트워크 유형을 결정하는 것이 중요합니다. 예를 들어 화상 회의와 VoIP 소프트웨어의 경우 서로 다른 NAT 에 있는 호스트 간의 통신에는 서버 전달이 필요하므로 서버의 부담이 가중됩니다. 이 문제를 해결하기 위해서는 가능한 서로 다른 NAT 에 있는 호스트 간에 직접 통신을 설정해야 합니다. 가장 중요한 점은 NAT 의 유형을 결정한 다음 NAT 의 유형에 따라 직접 통신 체계를 설계하는 것입니다. 그렇지 않으면 NAT 의 두 터미널은 어떻게 통신합니까? 우리는 상대방의 인트라넷 IP 를 모른다. 설령 소식을 상대방의 게이트웨이로 보내도 어떻게 될까? 게이트웨이는 이 소식이 누구에게 주어진 것인지, 누가 게이트웨이가 이렇게 하도록 허락하는지 어떻게 알 수 있습니까?
이 문제를 해결하기 위해 인트라넷의 호스트 간에 NAT 를 통해 직접 통신을 설정할 수 있다는 점에서 Stun (Nat Session Traversal Application) 기술은 가장 중요한 솔루션 중 하나이며 널리 사용되고 있습니다. 이 섹션에서는 STUN 기술의 원리를 중점적으로 살펴보겠습니다. (PS: 또한 UPNP 기술, ALG 애플리케이션 계층 게이트웨이 인식 기술, SBC 세션 경계 제어, ICE 상호 연결 설정, TURN relay NAT 교차 기술 등이 있습니다. 이 글은 일일이 소개하지 않는다. ) 을 참조하십시오
STUN 은 NAT (또는 여러 NAT) 뒤에 있는 클라이언트가 공용 네트워크 주소, 어떤 NAT 뒤에 있는지, NAT 가 로컬 포트에 바인딩된 인터넷 포트 등을 찾을 수 있도록 하는 네트워크 프로토콜입니다. 이 정보는 NAT 라우터 뒤의 두 호스트 간에 UDP 통신을 설정하는 데 사용됩니다. 이 프로토콜은 RFC 5389 에 의해 정의됩니다. STUN 은 STUN 클라이언트, STUN 서버 및 NAT 라우터의 세 부분으로 구성됩니다. STUN 서버는 공용 IP 주소가 2 개인 서버에 구축됩니다. 전체 구조는 아래 그림에 나와 있습니다. STUN 클라이언트는 서버에 서로 다른 메시지 유형을 보내고 서버의 서로 다른 응답에 따라 적절한 판단을 내립니다. 클라이언트가 인터넷의 UDP 포트를 알게 되면 통신을 시작할 수 있습니다.
STUN 프로토콜은 NAT 유형을 감지하는 세 가지 테스트 프로그램을 정의합니다.
테스트 1: Stun 클라이언트가 Stun 서버 {IP-S 1: Port-S 1} 에 바인딩 요청을 보냅니다 (속성 설정 안 함). 요청이 수신되면 STUN 서버는 STUN 클라이언트의 IP 와 바인딩된 응답 내용으로 간주되는 포트 {IP-M 1, Port-M 1} 를 STUN 클라이언트로 다시 보냅니다. 테스트 1 # 2: Stun 클라이언트가 포트 {IP-C 1} 를 통해 Stun 서버 {IP-S2: 포트 -S2} 에 바인딩 요청을 보냅니다 (속성 설정 안 함) 요청이 수신되면 STUN 서버는 STUN 클라이언트의 IP 및 포트 {IP-M 1 # 2, Port-M 1 # 2} 를 바인딩 응답의 내용으로 STUN 클라이언트에 다시 보냅니다.
Test2: STUN 클라이언트가 STUN 서버 {IP-S 1: Port-C 1} 에 바인딩 요청을 보냅니다 (IP 변경 및 포트 속성 변경 설정). STUN 서버가 요청을 받으면 포트 {IP-S2: 포트 -S2} 를 통해 STUN 클라이언트의 IP 와 응답 내용을 바인딩하는 포트 {IP-M2, 포트 -M2} 를 STUN 클라이언트에 반송합니다.
Test3: STUN 클라이언트가 STUN 서버 {IP-S 1: Port-C 1} (포트 속성 변경 설정) 에 바인딩 요청을 보냅니다. STUN 서버가 요청을 받으면 포트 {IP-S 1:Port-S2} 를 통해 STUN 클라이언트의 IP 와 응답 내용을 바인딩하는 포트 {IP-M3, Port-M3} 를 STUN 에 반송합니다
STUN 프로토콜의 출력은 1) 공용 네트워크 IP 및 포트 2) 방화벽 설정 여부 3) 클라이언트가 NAT 뒤에 있는지 여부 및 위치한 NAT 유형입니다.
이에 따라 STUN 프로토콜을 통해 감지할 수 있는 * * * * 유형은 7 가지가 있습니다.
A: 공용 인터넷 IP. 호스트에는 공용 인터넷 IP 가 있고 방화벽이 없어 외부와 자유롭게 통신할 수 있다. B: 전체 테이퍼 NAT. C: 제한된 원추 NAT. D: 포트 제한 NAT. E: 대칭 UDP 방화벽. 호스트 출구에는 NAT 디바이스가 없지만 방화벽이 있습니다. 방화벽 규칙은 다음과 같습니다. 호스트의 UDP 포트 A 에서 보낸 패킷은 소스 주소를 유지하지만 호스트가 호스트 포트 A 로 보낸 이전 패킷의 대상 IP/ 포트에서 보낸 패킷만 방화벽을 통과할 수 있습니다. F: 대칭 NAT G: 방화벽은 UDP 통신을 제한합니다.
입력 출력이 준비되면 위키피디아의 순서도를 첨부하여 STUN 프로토콜의 판단 과정을 설명합니다.
1: 클라이언트가 UDP 통신을 할 수 있는지, 클라이언트가 NAT 이후 -Test 1 클라이언트가 UDP 소켓을 만든 다음 이 소켓을 사용하여 서버에 패킷을 전송할지 확인합니다 (IP- 1,) 여러 번 반복하다. A) 매번 서버의 응답을 받지 못하면 클라이언트가 UDP 와 통신할 수 없는 것입니다. G 방화벽이 UDP 통신을 차단하는 것일 수 있습니다. B) 응답을 받을 수 있는 경우 서버가 반환한 클라이언트의 (IP:PORT) 와 (Local IP: Local Port) 비교: 정확히 동일하면 클라이언트가 NAT 뒤에 있지 않으면 a 에 공용 네트워크 IP 가 있어 up 를 직접 수신할 수 있습니다
두 번째 단계: 클라이언트의 방화벽 유형 감지-Test2stun 클라이언트는 다른 IP 주소의 패킷에 대한 응답을 요청하는 요청을 STUN 서버로 보냅니다. a) 다른 IP 주소의 서버에 대한 응답이 PORT received 인 경우 패킷이 프런트 엔드 방화벽에 의해 차단되고 네트워크 유형이 E b) 수신되면
3 단계: 클라이언트 NAT 가 전체 콘 NAT 인지 확인-테스트 2. 클라이언트는 UDP 소켓을 만든 다음 이 소켓을 사용하여 서버에 패킷 (IP- 1, Port- 1) 을 보내고 서버에 다른 쌍 (IP-2, Port-2) 을 요청합니다 클라이언트가 요청을 보낸 직후 패킷 수락을 시작합니다. 이 과정을 여러 번 반복하다. A) 각 시간 초과마다 서버의 응답을 받지 못하면 클라이언트의 NAT 가 전체 콘 NAT 가 아니므로 다음 테스트 (계속) 가 필요합니다. B) (IP-2, Port-2) 에서 서버가 반환한 응답 UDP 패킷을 수신할 수 있는 경우 클라이언트가 전체 콘 NAT 이므로 클라이언트가 UDP-P2P 통신을 수행할 수 있습니다.
4 단계: 클라이언트 NAT 가 대칭인지 확인 NAT-test 1 # 2. 클라이언트는 UDP 소켓을 만든 다음 이 소켓을 사용하여 서버에 패킷 (IP- 1, 포트-1) 을 보내고 서버에 클라이언트의 IP 와 포트를 반환하도록 요청합니다. 클라이언트가 요청을 보낸 후 바로 패킷을 수락하기 시작합니다. 응답이 수신될 때까지 이 프로세스를 반복합니다. 첫 번째 단계에서는 클라이언트가 UDP 와 통신할 수 있도록 하기 때문에 응답이 수신됩니다. 마찬가지로 소켓을 사용하여 서버의 (IP-2, 포트-2) 에 패킷을 보내려면 서버에서 클라이언트의 IP 와 포트를 반환해야 합니다. 위의 두 프로세스가 서버에서 반환하는 클라이언트 (IP, Port) 를 비교합니다. 두 프로세스에서 (IP, Port) 한 쌍이 다른 경우 클라이언트가 대칭 NAT 이므로 클라이언트가 UDP-P2P 통신 (감지 중지) 을 수행할 수 없습니다. 대칭 NAT 는 매번 다른 접속 포트를 가지고 있기 때문에 대칭 NAT 클라이언트가 다음에 어떤 포트를 사용할지 알 수 없습니다. 그렇지 않으면 제한된 콘 NAT 이고, 포트 제한 콘 NAT 인지 여부는 아직 확인되지 않았습니다 (계속).
5 단계: 클라이언트 NAT 가 제한 원뿔인지 포트 제한 원뿔인지 테스트 3. 클라이언트는 UDP 소켓을 만든 다음 이 소켓을 사용하여 서버에 패킷 (IP- 1, 포트-1) 을 보냅니다. 서버는 IP- 1 및 포트-1 과 다른 포트를 사용하여 UDP 패킷을 클라이언트에 보내야 합니다. 클라이언트가 요청을 보낸 후 이 프로세스를 여러 번 반복합니다. 매번 시간이 초과되면 서버의 응답을 받을 수 없고, 클라이언트가 포트 제한 콘 NAT 이고, 서버의 응답을 받을 수 있다면 클라이언트가 제한 콘 NAT 입니다. 두 NAT 모두 UDP-P2P 통신에 사용할 수 있습니다.
위의 프로세스를 통해 클라이언트가 NAT 뒤에 있는지 여부, NAT 유형 및 공용 IP 를 분석하여 클라이언트가 P2P 통신을 할 수 있는지 여부를 확인할 수 있습니다. 물론, 이것은 나의 개인 노트의 첫 편이다. 나중에 다른 NAT 유형의 침투 전략을 분석하기 위해' NAT 침투 원리 분석 (2)' 을 하나 더 설명하겠습니다.