NAT / PortForwarding / TCP / IP는 어떻게 작동합니까?


12

최근에 NAT의 작동 방식에 관한 기사를 읽었습니다 . 일부는 여전히 나에게 불분명합니다. 누군가 설명 할 수 있으면 고맙겠습니다.

다음은 가장 혼동되는 DynamicNAT 관련 기사의 일부입니다.

스텁 도메인의 컴퓨터는 웹 서버와 같이 네트워크 외부의 컴퓨터에 연결을 시도합니다.

라우터는 스텁 도메인의 컴퓨터에서 패킷을 수신합니다. 라우터는 컴퓨터의 라우팅 불가능한 IP 주소를 주소 변환 테이블에 저장합니다. 라우터는 보내는 컴퓨터의 라우팅 할 수없는 IP 주소를 고유 한 IP 주소 범위에서 사용 가능한 첫 번째 IP 주소로 바꿉니다. 변환 표에는 이제 고유 한 IP 주소 중 하나와 일치하는 라우팅 할 수없는 컴퓨터의 IP 주소에 대한 매핑이 있습니다.

패킷이 대상 컴퓨터에서 돌아 오면 라우터는 패킷의 대상 주소를 확인합니다. 그런 다음 주소 변환 테이블에서 패킷이 속하는 스텁 도메인의 컴퓨터를 확인합니다.

1) NAT는 패킷이 대상 컴퓨터로 "복귀"한다는 것을 어떻게 알 수 있습니까?

2) LAN의 다른 컴퓨터가 동일한 서버에 연결되어 있으면 어떻게합니까? NAT는 어떤 패킷이 어디로 "복귀"해야하는지 어떻게 알 수 있습니까?

3) 패킷 헤더 수정이 "원본 IP"를 피해자의 IP로 대체하는 인터넷 공격을 수행 할 수 있습니까? 응답 서버는 피해자에게 원치 않는 패킷을 넘치게합니까?

여러 명의 공격자가 관여해야한다고 생각합니다.

4) StaticNAT는 모든 포트의 PortForwarding과 동일합니까?

답변:


11

NAT (Network address translation)와 PAT (Port Address Translation) 사이에 일반적인 오해가 있는데 , 이는 주로 가정용 라우터에서 사용됩니다.

NAT
다음 토폴로지의 네트워크가 있다고 가정합니다.

Private_Network <-------> 라우터 <-------> The_Internet

의 인터페이스 라우터 에 연결된되어 Private_Network는사설 IP 주소를 즉,에 고유하지 않은 한 The_Internet을 . 한편, 인 경우 NAT , 공유기를 갖는 다중 접속 인터페이스 The_Internet를 . 각 인터페이스에는 The_Internet 에서 고유 한 IP 주소가 있습니다 . 이제 Host_AHost_BPrivate_Network에 있고 둘 다 동시에 The_Internet의 Website_X 에 액세스하려고 한다고 가정합니다 . Host_A 의 IP 및 포트패킷은 다음과 같습니다.

소스 IP : Host_A 의 개인 IP
소스 포트 : Host_A 의 포트
대상 IP : Website_X 의 공개 / 고유 IP
대상 포트 : Website_X 의 서버가 수신 하는 포트

Host_B 에서 오는 패킷도 마찬가지 입니다.
소스 IP가 변경되지 않은 경우 Website_X 는 개인 IP 주소 (예 : 고유하지 않은)에 응답하므로 패킷을 다시 찾을 수 없습니다. 이 문제를 해결하기 위해 라우터The_Internet에 연결된 고유 한 IP 주소 중 하나 가 사용되지 않는지 확인합니다 . 이 경우 다음과 같은 매핑을 수행합니다.

Host_A 의 개인 IP ======= 라우터의 _unique_IP_K

이제 Host_A 에서 시작 하여 Website_X로 이동 하여 The_Internet에 연결된 라우터 의 인터페이스를 떠나는 패킷 의 형식은 다음과 같습니다.

소스 IP : Router's_unique_IP_K
원본 포트 :에 포트 HOST_A의
: 대상 IP Website_X 의 공개 / 고유 IP
대상 포트 : 포트 Website_X 의 서버가 듣고있다

따라서 개인 IP에서 공용 IP 로의 일대일 연결이 있음을 이해할 수 있습니다. 따라서 Website_X 에서 Router 로 패킷이 도착하면 이 연결이 확인되고 대상 IP 주소가 개인 IP 주소로 다시 변경되어 올바른 호스트로 성공적으로 전달됩니다.
보시다시피이 방법은 매우 간단하지만 한 가지 큰 단점이 있습니다. 각 개인 호스트에는 고유 한 IP 주소가 예약되어 있어야하므로 비용이 많이 들기 때문에 개인 네트워크의 호스트보다 고유 한 IP 주소가 더 적습니다. 따라서 모든 개인 호스트 가 동시에 The_Internet 에 액세스하려고 하면 라우터 의 사용 가능한 공용 IP 주소 수와 동일한 하위 집합 만액세스 권한이 있으며 나머지는 거부됩니다.
이를 방지하기 위해 PAT 를 만들었습니다 .

PAT
PAT 는 대다수의 가정용 라우터가 사용하는 것입니다. 기본 제한 사항은 라우터The_Internet에 연결하는 고유 한 단일 IP 주소가 있지만 개인 네트워크의 여러 호스트 가 동시에 The_Internet 에 액세스 할 수 있도록하는 것입니다. IP 주소 풀을 보유한 라우터 대신 포트 번호 풀을 보유하는 라우터 와 달리, NAT가이를 수행
하는 방식과 "유사" 합니다. 더 정확하게는, 도착 패킷 라우터 로부터 HOST_APrivate_Network는 로 향하는 Website_X인터넷의 형식은 다음과 같습니다.

소스 IP : Host_A 의 개인 IP
소스 포트 : Host_A 의 포트
대상 IP : Website_X 의 공개 / 고유 IP
대상 포트 : Website_X 의 서버가 수신 하는 포트

이제 라우터 는 두 가지 작업을 수행합니다.

  1. 그것은에 소스 IP가 변경됩니다 라우터 의 독특한 공용 IP
  2. 라우터 가 유지 보수 중이고 아직 사용되지 않은 풀에서 소스 포트를 포트로 변경합니다 ( 예 : Port_Z).

이제 Host_A 에서 시작 하여 Website_X로 이동 하여 The_Internet에 연결된 라우터 의 인터페이스를 떠나는 패킷 의 형식은 다음과 같습니다.

소스 IP : Router's_unique_IP_K
소스 포트 : Port_Z
대상 IP : Website_X 의 공개 / 고유 IP
대상 포트 : Website_X 서버가 수신 대기 하는 포트

그리고 라우터는 다음과 같은 매핑을 유지합니다 :

Host_A 의 개인 IP Host_A 의 포트 ======= Port_Z

왜 이것이 작동합니까?
이제 패킷이 되돌아 오면 라우터는 단순히 대상 포트 번호를 확인하고 앞서 언급 한 매핑에 따라 대상 IP 주소와 대상 포트 번호를 변경하면 패킷이 성공적으로 전달됩니다.

동일한 호스트에서 여러 응용 프로그램을 실행하면 어떻게됩니까?
응용 프로그램마다 정의에 따라 다른 포트가 있으므로 라우터 와 다른 포트에 매핑됩니다 .

여러 호스트 가 동시에 The_Internet 에 액세스하려고 시도 하고 모두 동일한 응용 프로그램을 사용하는 경우 어떻게됩니까?
다른 호스트는 정의에 따라 다른 개인 IP 주소를 가지므로 라우터 와 다른 포트에 매핑됩니다 .

PAT 는 교차 레이어의 회색 공간에서 위험한 균형을 유지하고 있습니다. 포트 번호는 전송 프로토콜의 일부이며 라우터는 인터넷 프로토콜까지 작동 할 수 있습니다. 따라서 기술적으로 말하면 프로토콜에서 허용되지 않는 것입니다. 따라서 이론적으로 적어도 잠재적 위험이 있습니다. 포트 풀은 제한되어 있습니다. 따라서 개인 네트워크가 1000 개의 호스트로 구성되고 각각의 호스트가 port_pool / 10 응용 프로그램을 실행중인 경우 라우터의 매핑 테이블에 사용 가능한 항목이 부족하여 응용 프로그램에 대한 액세스가 거부됩니다.

이 답변은 의도 한 길이를 크게 초과했지만 도움이 되었기를 바랍니다.


2
참고로, 먼저 "NAT"라는 용어를 사용하여 RFC가 "기본 NAT"라고하는 것을, "PAT"를 사용하여 RFC가 "NAPT"를 부르는 것을 말합니다. RFC는 일반적으로 "NAT"를 "기본 NAT"와 "NAPT"를 모두 포함하는 포괄적 인 용어로 사용합니다. TCP / UDP 헤더에는 IP 주소를 포함하는 체크섬이 포함되어 있으므로 "기본 NAT"도 TCP / UDP 헤더를 수정해야합니다.
Peter Green

@ PeterGreen이지만 대답의 요지는 정확합니까?
lpydawa

6

라우터는 패킷의 The router saves ... an address translation table.내부-외부 주소 변환을 기억 하기 때문에 패킷이 어디에 속해 있는지 알고 있습니다. 따라서 하나의 내부 주소는 하나의 외부 주소와 같으며 인터넷 외부 목적지는 관련이 없습니다. 물론 이것은 모든 연결을 추적하는 실질적으로 모든 NAT 라우터에 존재하는 방화벽을 무시합니다.

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

NAT는 IP 및 / 또는 포트의 조합을 변경할 수 있습니다.

# 3은 완전히 다른 주제입니다 : 스푸핑

# 4 "Static NAT"또는 "1-to-1"은 주소 전용 맵입니다. 따라서 포트 (및 프로토콜 : tcp, udp, gre 등)는 관련이 없습니다.


2) LAN의 다른 컴퓨터가 동일한 서버에 연결되어 있으면 어떻게합니까? NAT는 어떤 패킷이 어디로 "복귀"해야하는지 어떻게 알 수 있습니까?
user2449761

1과 2는 같은 답변입니다. 연결 / 번역을 추적하기 때문입니다. 두 개의 내부 호스트는 동일한 외부 주소에 매핑되지 않습니다. 따라서 매핑 된 외부 주소에 도착하는 모든 패킷에는 자동으로 하나의 내부 목적지 만 있습니다. 외부 (공용) 주소가 하나만있는 경우 "NAT"가 아니라 PAT (포트 변환)입니다.
Ricky Beam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.