[이해하기] NAT (Network Address Translation) – 네트워크 주소 변환

NAT (Network Address Translation – 네트워크 주소 변환) 이란, IP 패킷에 있는 출발지 및 목적지의 IP 주소와 TCP/UDP 포트 숫자 등을 바꿔 재기록하면서 네트워크 트래픽을 주고 받게하는 기술입니다.



1. NAT 을 왜 쓰는가 – IP 주소 절약과 보안

(1) IP 주소 절약
NAT 기술을 이용하면, 하나의 공인 IP 주소를 사용하여 여러 대의 호스트가 인터넷에 접속할 수 있습니다. 예를 들어 대부분의 경우에 집에 인터넷 회선을 개통하고 인터넷 공유기를 설치해서 여러 PC 를 연결하여 사용 하는데, 이러한 방법이 가능한 이유가 인터넷 공유기에 NAT 기능이 탑재되어 있기 때문입니다. 따라서 부족한 공인 IP 를 절약할 수 있는 효과가 있습니다.

(2) 보안
NAT 동작의 특성상 IP 를 숨길 수 있는 기능이 있습니다. 예를 들어, 라우터 (또는 공유기 등) 외부로 트래픽이 나갈 때는 사설 IP 가 공인 IP 주소로 바뀌므로 공격자가 라우터 안 쪽에 있는 사설 IP 를 모르기 때문에 최종 목적지로의 공격이 어려워져 내부 네트워크 및 호스트들을 보호할 수 있습니다.


** 참고 : 사설 IP 대역
인터넷 기술 표준을 정의하는 IETF 의 RFC 1918 문서에 따르면, 전 세계 공통으로 다음과 같은 주소들이 사설 IP 주소 대역임을 정의하고 있습니다. (공인 IP 로 사용 불가능한 대역, 사설 IP 대역으로만 사용)

# 단일 A 클래스 사설 네트워크 대역 : 10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8 (255.0.0.0))
# 16개의 인접한 B 클래스 사설 네트워크 대역 : 172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12 (255.240.0.0))
# 256개의 인접한 C 클래스 사설 네트워크 대역 : 192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16 (255.255.0.0))




2. 동작 원리

흔히 집에서 사용하는 인터넷 공유기를 통해 외부에 있는 웹 서버로 접근하고자 하는 경우, 해당 요청 패킷은 반드시 해당 공유기 (게이트웨이) 를 거치게 되어 있습니다. 이 때, 출발지의 사설망 IP 주소가 그대로 외부 인터넷에 나가게 될 경우 수신 측 (웹 서버) 는 알 수 없는 사설망의 IP 주소 이므로 최종적으로 패킷을 어디로 보내줘야 할 지 알 수 없게 됩니다.

| 사설 네트워크와 외부 인터넷 네트워크 사이에서의 NAT (출처 : 위키피디아)

따라서 NAT 은 다음과 과정을 거치게 됩니다.

(1) 패킷 헤더에 출발지와 목적지의 주소를 기록합니다. 이 때, 출발지는 자신의 사설망 IP 주소를 기록합니다.

- PC (호스트) 에서 출발
# 출발지 IP 주소 : 10.0.0.1
# 목적지 IP 주소 : 200.100.10.1


(2) 기본 게이트웨이 (공유기 등) 에서는 외부로 나가는 패킷을 인식하게 되면, 출발지의 IP 주소를 게이트웨이 자신의 공인 IP 주소로 변경합니다. 이 때, 별도의 NAT 테이블을 보관합니다.

- 기본 게이트웨이에서 다시 출발
# 출발지 IP 주소 : 10.0.0.1 -> 150.150.0.1 (재기록하여 변경)
# 목적지 IP 주소 : 200.100.10.1
프로토콜사설 IP 주소출발지 IP 주소목적지 IP 주소
TCP10.0.0.1150.150.0.1200.100.10.1
| NAT 테이블


(3) 웹 서버에서 수신한 데이터를 처리한 후, 응답하여 보내는 패킷에 출발지와 목적지의 IP 주소를 아래와 같이 기록하여 보냅니다. 특히 이 때 목적지의 IP 주소는 호스트의 기본 게이트웨이 공인 IP 주소가 됩니다.

- 웹 서버에서 출발
# 출발지 IP 주소 : 200.100.10.1
# 목적지 IP 주소 : 150.150.0.1


(4) 호스트의 기본 게이트웨이에서 웹 서버가 보낸 패킷을 받으면, 기록해두었던 NAT 테이블을 참조하여 최종 목적지인 호스트의 사설 IP 주소로 변경하여 해당 호스트로 패킷을 전달합니다.

- 기본 게이트웨이에서 다시 출발
# 출발지 IP 주소 : 200.100.10.1
# 목적지 IP 주소 : 150.150.0.1 -> 10.0.0.1 (재기록하여 변경)


단, 사설 네트워크에 한 대의 호스트가 아닌 여러 대의 호스트가 같은 목적지와 통신하고자 할 때, 되돌아오는 패킷의 최종 목적지가 어디가 되어야 하는지 모르는 혼선이 생길 수 있습니다. 이를 해결하기 위해서는 별도의 추가 포트를 설정하여 패킷을 구분하는 PAT (또는 NAPT) 방식을 사용하게 됩니다. (아래 NAT 종류 구분에서 별도 상세 설명)

프로토콜사설 IP 주소사설망 포트출발지 포트출발지 IP 주소목적지 IP 주소
TCP10.0.0.16000070001150.150.0.1200.100.10.1
TCP10.0.0.26000070002150.150.0.1200.100.10.1
| PAT (NAPT) 의 NAT 테이블 예시


아울러, NAT 과정에서는 패킷에 변화가 생기기 때문에 IP 나 TCP/UDP 의 체크섬(Checksum) 도 다시 계산되어 재기록해야 하며 이에 필연적으로 네트워크의 성능에 영향을 미치게 됩니다.



3. 주소 할당 방식에 따른 NAT 종류 구분

(1) Static NAT (1:1 NAT)
공인 IP 주소와 사설 IP 주소가 1:1 로 매칭이 되는 방식입니다. 단, 이 경우에는 구성 특성상 공인 IP 주소의 절약 효과는 없습니다. 이에 Static NAT 은 주로 사설 IP 주소를 사용하는 서버가 여러 가지 역할을 할 때, 포트포워딩을 목적으로 사용하게 됩니다.

** 포트포워딩 (Port forwarding) : 예를 들어 하나의 서버에 여러 서비스를 운영 중인 경우, 특정 서비스에 임의의 포트를 지정하여 해당 포트를 통해 특정 서비스의 경로를 지정해주는 일종의 교통정리를 해주는 역할을 하는 기능입니다.

(2) Dynamic NAT (N:N NAT)
여러 개의 공인 IP 주소 대비 사설 IP 갯수가 더 많을 경우, 즉 내부 네트워크에 호스트의 숫자가 많을 경우 사용하는 방식입니다.

(3) PAT (Port Address Translation, 또는 NAPT : Network Address Port Translation) (1:N)
공인 IP 주소 1개에 사설 IP 주소 여러개가 매칭이 되는 방식입니다. 특히 PAT 방식은 사설 네트워크 내 각 호스트에 임의의 포트번호를 지정하여 사설 IP 와 해당 포트번호를 공인 IP 주소와 해당 포트번호로 매칭/치환하는 방식입니다. 사설 네트워크 내 호스트 마다 포트번호를 지정하는 이유는, 외부 인터넷에서 들어오는 패킷을 내부 네트워크 내에 있는 목적지 (호스트) 에 올바로 전달 해주기 위해서 입니다.

File:PAT.jpg - Wikimedia Commons
| PAT 예제 (출처 : Wikimedia) 7575 포트와 22 포트를 바라보고 호스트까지 패킷이 전달됩니다.




4. 패킷 방향에 따른 NAT 종류 구분

(1) SNAT (Source Network Address Translation)
내부에서 외부로 나가는 패킷의 출발지 (Source) IP 주소를 변경하는 것으로 Source NAT, SNAT, 혹은 IP 마스커레이드라고 합니다. (특히 리눅스에서 IP 마스커레이드 기능을 통해 SNAT 을 구현할 수 있습니다.) 즉, 인터넷으로 나가는 패킷의 출발지 IP 주소를 게이트웨이의 공인 IP 주소로 바꾸어주는 방식입니다. 대표적으로 사용되는 장비는 가정에서 흔히 쓰이는 인터넷 공유기 입니다.

(2) DNAT (Destination Network Address Translation)
외부에서 내부로 들어오는 패킷에 있는 목적지 (Destination) IP 주소를 변경하여 최종적으로 내부에 있는 호스트에 패킷이 도달할 수 있도록 하는 것입니다. 대표적으로 사용되는 장비는 방화벽 또는 로드 밸런서 (Load Balancer) 입니다.

| DNAT 과 SNAT 예시. 특히 여기서는 서버에서 사용자 PC 로 바로 패킷이 전달되는 DSR (Direct Server Return) 이 포함되어 있습니다.

(3) Twice-NAT
출발지 주소와 목적지의 주소가 모두 바뀌는 방식을 의미합니다. 주로 서로 다른 두 지점 간 연결을 위한 중간 네트워크 허브 구조를 이용할 때 사용합니다.

(4) 헤어핀 (Hairpin NAT) 또는 NAT Loopback
위의 ‘DNAT 과 SNAT 예시’ 의 그림에서 서버 B 에서의 트래픽이 외부망을 거치지 않고 바로 서버 A 로 접근을 하는 방식을 의미합니다. (예> IP 주소가 아닌, 도메인 주소를 가지고 서비스 중인 웹 서버인 경우)





– 참고
RFC 1918 (Address Allocation for Private Internets) : https://tools.ietf.org/html/rfc1918
RFC 2663 (IP Network Address Translator (NAT) Terminology and Considerations) : https://tools.ietf.org/html/rfc2663





#Steven

답글 남기기