네트워크 기본: NAT

taypark·2020년 8월 31일
1

Private network: 프라이빗, 사설 네트워크 등으로 불린다. 이는 인터넷에 등록되어있지 않다. 그러므로 직접적으로 인터넷에 연결할 수 없고, 집이나 기업의 내부 망으로 활용된다. 일반적으로 우리가 사용하는 IP중 192.168.x.x10.x.x.x이 사설 네트워크이다.

Public network: 퍼블릭, 공용 네트워크 등으로 불린다. 이는 인터넷에 등록된 IP로 직접 인터넷과 통신할 수 있으며, IPv4의 최대 수 만큼 갯수가 제한되어있다.

NAT의 정의와 사용 목적

Network Access Translation, NAT는 네트워크 장비 중 라우터에서 사용된다. 간단히 말하면 사설 IP 주소 셋을 다른 IP 주소(일반적으로 라우터의 공용 IP주소)로 번역해주는 역할을 한다. 왜 이렇게 사용하는 것일까?

우리는 현재 IPv4를 사용하고 있다. 그러나 전 세계 굉장히 많은 네트워크 장비가 있고, IP의 수는 제한되어있기 때문에 IPv4고갈 문제가 대두되었다. 그렇다면 IP가 겹치는 상황이 발생할 것이고, 정확하게 정보를 원하는 네트워크에 전달해주지 못할것이다.

각 네트워크 장비간 IP 식별을 위해 여러개의 네트워크 장비를 라우터로 연결하여 라우터만 외부 네트워크와 통신한다면 IP 고갈문제를 어느정도 해결할 수 있다.

또한 사설 네트워크에 위치한 기기가 직접적으로 인터넷에 연결되지 않으므로, 단말기들을 외부 네트워크로부터 보안할 수 있는 목적으로 사용될 수 있다.

동작구조

NAT에는 cone, restricted-cone, symmetric 등 여러가지 방법이 있으나 일반적인 동작구조는 비슷하다.

일단 다음의 가정으로 시작한다.

NameIP:Port
노트북192.168.1.115:47110
라우터203.112.4.11:61110
기상청123.121.3.11:80

처음 노트북이 기상청에 요청을 보낸다. 요청이 다음과 같은 구조를 가진다고 가정하자

192.168.1.115:47110 to 123.11.3.11:80, "오늘 서울 날씨는 뭐야?"

만약 NAT이 없다고 가정하면 웹서버는 이를 받아 반대로 응답을 할 것이다.

123.11.3.11:80 to 192.168.1.115:47110, "영하 3도, 진눈깨비가 오고있어"

하지만 192.168.1.115는 사설 IP이다. 즉, 인터넷에 등록되있지 않아 찾을 수 없다.

만약 NAT이 있다고 가정을 해보자.

똑같이 노트북에서 기상청으로 메시지를 보낸다.

192.168.1.115:47110 to 123.11.3.11:80, "오늘 서울 날씨는 뭐야?"

중간에 라우터는 이를 감지하고 IP와 포트를 바꾼다.

203.112.4.11:61110 to 123.11.3.11:80, "오늘 서울 날씨는 뭐야?"

이 때, 라우터는 NAT forwarding table에 사설 IP와 공용 IP를 매핑하여 등록한다. 이를 홀펀칭(hole punching)이라 한다.

Private sidePublic side
192.168.1.115:47110203.112.4.11:61110

그렇다면 기상청은 라우터로부터 메시지를 받아 응답을 한다.

123.11.3.11:80 to 203.112.4.11:61110, "영하 3도, 진눈깨비가 오고있어"

이 메시지는 라우터에게 전달된다. 라우터는 공용 네트워크이므로, 인터넷과 통신할 수 있다.

그리고 destination과 NAT forwarding table을 확인했을 때, 매칭이 되는것이 있다. 그렇다면 그 메시지의 목적지를 치환한다.

123.11.3.11:80 to 192.168.1.115:47110, "영하 3도, 진눈깨비가 오고있어"

이제, 라우터는 사설 네트워크 장비에게 패킷을 전달하면 정상적으로 통신이 완료된 것이다.

NAT forwarding table은 영구지속되지 않는다. 라우터에 딸린 사설 네트워크와 공용 네트워크 간 패킷 흐름이 일정시간 없으면 해당 forwarding table을 지운다.

NAT의 종류

RFC 3489 를 참고했다.

  1. Full cone

[Mapping Behavior] A full cone NAT is one where all requests from the same internal IP address and port are mapped to the same external IP address and port. [Filtering Behavior] Furthermore, any external host can send a packet to the internal host, by sending a packet to the mapped external address. (RFC 3489)

같은 내부 ip/port에서 온 메시지는 하나의 외부 ip/port를 이용해 보낸다. 외부에서 NAT가 할당한 외부 ip/port로 메시지가 오면 NAT forwarding table에 매핑된 내부 장비에 릴레이 한다. 위의 기본적인 NAT의 동작 구조를 따른다.

다만 라우터의 ip/port는 destination이 바뀌어도 고정된다. 즉, 다른 서버에 요청을 하더라도 공용 ip/port는 고정된다.

  1. Restricted cone (Full cone + ip 검증)

[Mapping Behavior] A restricted cone NAT is one where all requests from the same internal IP address and port are mapped to the same external IP address and port. [Filtering Behavior] Unlike a full cone NAT, an external host (with IP address X) can send a packet to the internal host only if the internal host had previously sent a packet to IP address X. (RFC 3489)

Full cone과 똑같이 동작하지만, 내부에서 외부에서 보낸 적이 있는 ip에서 온 메시지만 릴레이 한다. 즉, 내부에서 먼저 외부에서 보낸 적이 있어야만 외부의 메시지를 통과시킨다.

  1. Port restricted cone (Full cone + ip/port 검증)

[Mapping Behavior] A port restricted cone NAT is like a restricted cone NAT, [Filtering Behavior] but the restriction includes port numbers. Specifically, an external host can send a packet, with source IP address X and source port P, to the internal host only if the internal host had previously sent a packet to IP address X and port P. (RFC 3489)

Restricted cone에 port 검사까지 추가된 개념이다. ip만 검사하는것이 아닌 port까지 검사한다.

  1. Symmetric

[Mapping Behavior] A symmetric NAT is one where all requests from the same internal IP address and port, to a specific destination IP address and port, are mapped to the same external IP address and port. If the same host sends a packet with the same source address and port, but to a different destination, a different mapping is used. [Filtering Behavior] Furthermore, only the external host that receives a packet can send a UDP packet back to the internal host. (RFC 3489)

나가는 패킷의 Source IP/Port, Destination IP/Port가 모두 동일해야 같은 Port를 매핑한다. 그것이 아니라면 다른 값을 새로 할당한다.

즉, 사설 A에서 공용 B로 나갈 때와 사설 A에서 공용 C로 나갈 때 라우터 IP/Port가 달라진다.

예를 들면 다음과 같다.

Private sideDestinationRouter
192.168.0.1:505011.22.33.44:80113.12.11.13:12345
192.168.0.1:505044.33.22.11:80113.12.11.13:56789

이는 cone과 다르게 Source IP 또는 Port, Destination IP 또는 Port 중 하나라도 바뀌면 다른 External Port를 할당한다.

요약하자면 다음과 같다.

미래의 NAT

IPv4는 42억개의 고유한 IP주소를 가진다. 반면에, 70억의 인구가 있다. 그리고 각 인구는 여러개의 네트워크 디바이스를 가진다. 이 문제로 NAT이 대두되었다. 하지만 만약 충분히 고유 IP를 가질 수 있는 IP 체계가 갖춰진다면 어떨까?

아마 NAT이 사용되지 않을 것이다. IPv4 고갈 문제로 고안된 NAT은 각각의 네트워크 장비가 자신만의 IP를 할당받게 된다면 더이상 NAT을 사용할 필요가 없다.

이것이 IPv6이다. 이는 340... 으로 시작하는 36자리 숫자이며, 네트워크 장비의 수로 고갈될 수 없는 숫자이다.

호환성을 위해서 IPv6는 IPv4기반의 터널링(IPv4 payload에 IPv6를 캡슐화하고 IPv4만 지원하는 라우터 통과 후 캡슐레이션 해제)을 지원한다.

참고자료

https://en.wikipedia.org/wiki/Network_address_translation

https://www.netmanias.com/ko/post/blog/5847/nat-network-protocol/stun-rfc-3489-vs-stun-rfc-5389-5780

profile
인생은 하드코어하게

0개의 댓글