저는 모뎀 라우터를 사용하고 있으며 어떤 경우에는 ISP NAT 뒤에도 있습니다. NAT(ISP의 NAT) 뒤의 NAT(라우터의 NAT)는 어떻게 작동합니까?
내가 아는 한 NAT는 다음과 같이 작동합니다. 컴퓨터 A와 B는 내부 IP internal1
와 internal2
. 그런 다음 NAT는 동일한 IP에 포트를 제공하여 공개적으로 연결되도록 someIP:1
합니다 someIP:2
.
그러나 라우터가 그런 일을 하고 ISP가 다시 그런 일을 한다면 IP는 형식이 될 것입니다. someIP:1:100
이는 someIP:2:101
포트에 두 번째 수준 포트가 없기 때문에 불가능합니다.
그러면 이것이 어떻게 작동하나요?
답변1
간단한 예를 들어보겠습니다.
"일반" NAT 홈 네트워크에서는 192.168.1.2:11223
"공용" 주소:포트 쌍에 매핑됩니다 203.0.113.5:22334
. 따라서 최종 대상 호스트는 패킷을 수신했다고 생각 203.0.113.5:22334
하지만 그 뒤에 있는 "개인" 네트워크에 대한 지식은 없습니다.
이제 이를 두 가지 수준의 NAT를 사용하여 이중 NAT 네트워크로 확장해 보겠습니다.
호스트에 가장 가까운 라우터에서 192.168.1.2:11223
"공용" 주소:포트 쌍에 매핑됩니다 10.0.0.8:22334
. 이제 10.0.0.8
다른 네트워크에 있는 여전히 개인 주소입니다. 이 라우터에 관한 한 해당 작업은 완료되었습니다.
첫 번째 라우터가 있는 LAN의 게이트웨이 역할을 하는 다음 라우터에서는 10.0.0.8:22334
자체 공용 인터페이스인 의 다른 주소:포트 쌍에 매핑됩니다 203.0.113.5:12345
.
최종 목적지 호스트는 에서 패킷을 받았다고 생각합니다 203.0.113.5:12345
. 이 인터넷과 공용 인터넷 전체는 여기에 관련된 서브넷 10.0.0.0/8
에 대해 전혀 알지 못합니다. 192.168.0.0/16
해당 주소로 응답을 다시 보내며, 이는 각 라우터에서 차례로 다시 변환되어야 합니다.
Different address:port pairs for
thesame endpoint in one connection!
+------------------------+ -----------------------------------
|Host |
|192.168.1.2 |
+------------------------+ 192.168.1.2:11223 <--- Host sees
this pair
+------------------------+ 192.168.1.2:11223 <--- Router 1 sees
|Router 1 | req from this
|internal 192.168.1.1/24 |
|external 10.0.0.8 |
+------------------------+ 10.0.0.8:22334 <------ Router 1 sends
req from this
+------------------------+ 10.0.0.8:22334 <------ Router 2 sees
|Router 2 | req from this
|internal 10.0.0.1/24 |
|external 203.0.113.5 |
+------------------------+ 203.0.113.5:12345 <--- Router 2 sends
req from this
+------------------------+ 203.0.113.5:12345 <--- Public internet
|Public internet | sees this pair
+------------------------+
CGN("ISP NAT")은 거의 동일한 방식으로 작동합니다. 유일한 차이점은 내부 호스트에 RFC1918 개인 주소를 제공하지 않는다는 것입니다. 이는 비즈니스 네트워크와 충돌할 수 있기 때문입니다. 대신 100.64.0.0/10
위 다이어그램의 "라우터 2"에 의해 범위(RFC6598) 의 주소가 배포됩니다. 고객 자신의 라우터가 보는 한, "공용" 주소는 해당 범위에 속하지만 실제로 공용 인터넷에서는 연결할 수 없습니다!
답변2
내가 아는 한 NAT는 다음과 같이 작동합니다. 컴퓨터 A와 B는 내부 IP Internal1과 Internal2를 얻습니다. 그런 다음 NAT는 동일한 IP에 포트를 제공하여 공개적으로 연결되도록 someIP:1 및 someIP:2 뒤에 있습니다.
번호 포트아니다호스트 주소의 일부 - NAT 사용 여부에 관계없이 IP 계층에는 포트와 같은 것이 없습니다. 호스트의 IP 주소는 항상단지주소; "두 번째 수준" 포트도 없고 "첫 번째 수준" 포트도 없습니다. [1]
대신 포트는 각 개별 TCP/UDP에 속합니다.연결호스트가 IP 위에 만드는 것입니다. (엄밀히 말하면 각 패킷의 일부이며 동일한 연결의 모든 패킷은 동일한 포트를 사용합니다.)
그래서 로 쓰여진 주소를 보면 12.34.56.78:123
모든 것이~ 아니다호스트의 IP 주소 – 이는 포트 123에 대한 TCP 연결 끝점입니다.~에IP 주소가 여전히 단순한 호스트입니다 12.34.56.78
.
이들 포트추가되지 않습니다NAT에 의해 – 그들은 항상 거기에 있었습니다. 모든 TCP 또는 UDP 패킷에는 정확히 두 개의 포트('소스' 포트 하나와 '대상' 포트 하나)가 있습니다. NAT를 수행하는 라우터는 이를 다른 값으로 변환할 뿐입니다. NAT 수준이 아무리 많아도 해당 패킷에는 여전히 두 개의 포트가 있습니다.
[1] 이는 단일 공용 주소 뒤에 NAT된 두 개의 호스트가 있는 경우 실제로 IP 계층에서 구별할 수 없음을 의미합니다. 외부에서 IP 패킷이 전송될 때 someIP
원하는 호스트를 지정할 방법이 없습니다. NAT 라우터는 이를 TCP 계층에서 추론해야 합니다. 그렇기 때문에 인바운드 연결을 수신하려면 "포트 전달" 규칙을 구성해야 합니다.