NERD WORLD

NAT와 포트-포워딩(Port-Forwarding) 본문

토막지식

NAT와 포트-포워딩(Port-Forwarding)

학부생7년차 2016. 4. 22. 21:02

배경: 위즈네트 아카데미에서 강의를 수강하는데 종종 "포트-포워딩"이라는 단어가 언급되었다. NAT와 헷갈리지 말라는 맥락이었다. 두 개념을 정확히 모르니, 한번 정리해보게 되었다.


NAT(Network Address Translation)

IPv4 주소는 4bytes = 32bit의 주소다. 그러므로 표현가능한 총 가짓수는 2^32 = 약 42억개. 요새 IoT까지 화두가 되면서 인터넷 연결 가능한 기기들의 개수가 기하급수적으로 늘어났음을 감안한다면, IPv4 주소를 모두 할당할 수 없었을 것이다. 즉, 모든 기기들이 자신만의 공인 IP 주소를 가질 수 없게 된 것이다.

그래서 나온 방법이 NAT이다. 이름 그대로 Network Address를 Translation하는 작업이다. Network Address는 서브넷에 소속된 디바이스들의 주소이고, Translation 작업은 그 서브넷을 관장하는 라우터가 맡는다. 이 라우터를 NAT 라우터라고 부른다. NAT 라우터는 외부 인터넷 망과 연결되어있으므로 공인 IP 주소(예: 138.76.29.7)를 갖는다. 서브넷의 다른 디바이스들은 사설 IP 주소를 사용해서 NAT 라우터를 포함한 서브넷의 다른 디바이스들과 데이터를 주고받는다(예: 디바이스들은 10.0.0.1부터 10.0.0.3까지의 주소를, NAT 라우터의 서브넷 쪽 인터페이스는 10.0.0.4의 주소를 갖는다).

서브넷의 다른 디바이스들은 사설 IP 주소만 가지고 있으므로, 서브넷 내 연결은 가능하지만 외부 인터넷 망에는 연결할 수가 없을 것 같다. 이 문제를 해결하는 작업이 NAT 라우터의 Translation 이다. [디바이스의 사설 IP 주소, Port 번호][NAT 라우터의 공인 IP 주소, Port 번호]매핑(mapping)시켜서 외부에 알리는 것이다. 그러므로 외부의 디바이스들도 서브넷의 디바이스들과 연결될 수 있다. 아래의 그림이 이 내용을 잘 정리하고 있다. 아래 그림의 사례에서는 [10.0.0.1, 3345]가 [138.76.29.7, 5001]로 매핑되었다. 포트번호가 3345에서 5001로 매핑되었음을 기억하자(포트-포워딩과의 차이점). 이는 NAT 라우터가 매핑 관계를 생성할때 임의로 배정한다.

위의 예를 보면, 본래 4개의 공인 IPv4 주소가 필요한 상황을 1개의 공인 IPv4 주소와 4개의 사설 IP 주소로 해결한 셈이다. 이런식으로 NAT를 사용하면 서브넷에 물린 디바이스의 개수가 많더라도 1개의 IPv4 주소로 커버할 수 있다. IPv4 주소부족 문제 해결에 큰 기여를 한 것이다. 일견에서는 NAT와 같은 임시방편을 쓸게 아니라, 신속히 IPv6 주소로 넘어가야한다고 얘기한다. 일리가 있는 주장이다. IPv6 주소는 16bytes 라서 약 10^38 정도에 이르는 매우 큰 표현력을 지니므로, 사실상 주소부족 문제가 존재할 가능성이 없다.

포트-포워딩(Port-Forwarding)

이름 그대로 특정 포트(port)포워딩(forwarding)해주는 작업이다. 쉽게 생각해서 구멍을 뚫는 것이다게이트웨이 라우터의 특정 포트 번호(예: HTTP 프로토콜의 80번)에 구멍을 뚫어서, 어떤 서브넷 디바이스의 포트 번호(똑같이 80번이거나 다르거나)와 직통으로 연결시키는 것이다. 

그러므로 포트-포워딩을 설정할때는 외부 포트(라우터의 포트번호)와 내부 IP/포트(라우터 뒤에 숨어있는 디바이스의 사설 IP와 포트번호)를 묶어서 설정한다. 예를 들어 서브넷에 속한 사설 IP 주소 10.0.0.1인 디바이스의 1000번 포트에서 어떤 어플리케이션 프로세스가 가동중이라고 하자. 이 1000번 포트에 게이트웨이 라우터의 2000번 포트로 포트-포워딩을 해주도록 설정했다고 하자. 그러면 외부 인터넷 망에서 게이트웨이 라우터의 공인 IP 주소:2000번 포트에 연결하면 10.0.0.1:1000번 포트의 어플리케이션 프로세스와 연결할 수 있게된다.

서브넷에 속한 디바이스의 [사설 IP 주소, 포트번호]가 게이트웨이 라우터의 [공인 IP 주소, 포트번호]로 매핑된다는 점에서 NAT와 동일해보이지만, 차이점은 매핑관계가 유지된다는 점이다. 위에 NAT를 설명하는 그림에서 3345번 포트가 5001번 포트에 매핑되었었다. 이 "5001번"이라는 번호는 NAT 라우터에서 매핑을 생성할때 임의로 지정한다고 얘기했다. 포트-포워딩에서는 임의로 지정하는 것이 아니라, 설정과정에서 사용자가 지정할 수 있다. 하지만 외부 인터넷 망에서 서브넷에 속한 특정 디바이스로 연결을 요청할때에는 NAT 라우터의 IP 주소에 몇번 포트를 붙여야 "그" 디바이스에 연결될 수 있을지 알 수가 없다. 

그러나 포트-포워딩에서는 서브넷에 속한 디바이스의 1000번 포트라면, 게이트웨이 라우터의 그 1000번 포트를 내어준다. 예를 들어 서브넷에 물린 서버 컴퓨터에서 HTTP 서버가 돌아가고 있다면, 보통 HTTP 프로토콜에 내어주는 80번 포트를 사용중일텐데, 게이트웨이 라우터에서도 80번 포트를 내어주는 것이다. 그러므로 게이트웨이 라우터의 공인 IP주소:80 을 대외적으로 알린다면 외부 인터넷 망에서도 이 HTTP 서버에 접속할 수 있게 된다. 

이것으로 NATPort-Forwarding에 대해서 정리해보았다.

참고자료:

1) James F. KuroseKeith W.RossComputer Networking, A Top-Down Approach (6ed).

2) Port forwarding 영문 위키피디아 (링크)

'토막지식' 카테고리의 다른 글

Authentication과 Authorization  (0) 2016.07.01
AWS EC2에 보유중인 도메인 지정하기  (0) 2016.06.17
Python, Encapsulation  (2) 2016.06.16
SSL/TLS  (0) 2016.04.29
공인 IP와 사설 IP  (0) 2016.04.22
Comments