Network Address Translation
1. NAT 간단 개념
2. NAT 동작 방식
3. NAT 매핑 방식
IPv4는 32비트의 값으로 구성되어있다. 이 것을 개수로 환산한다면총 232 = 대략 43억개의 IP가 존재한다. 하지만 인터넷이 급격히 발전하면서 43억개에 도달하는 IP도 고갈되는 문제가 발생했는데,, 이 문제를 해결하기 위해 고안된 방법이 NAT이다. (IPv6도 같은 맥락이다.)
1. “사설IP → 공인IP”
라우터에서 항상 사설 IP를 공인 IP로 변환한다면, 서로 다른 로컬 네트워크들의 IP가 겹쳐도 문제되지 않는다. 즉, IPv4의 고갈 문제를 어느정도 해결할 수 있다. 또한, 내부 사설 IP를 외부로부터 보호할 수 있다는 이점이 있다.
(내부 IP가 사설IP일 때만 공인IP로 변환하는 것은 아니지만, 전체적인 개념이라고만 보면 될 것 같다. 자세한 내용은 뒤에 서술하겠다.)
NAT에서의 IP 주소 용어
┌ 내부 주소: 장비 기준으로 내부 네트워크에 위치한 IP 주소
└ 외부 주소: 내부 네트워크의 외부에 있는 IP 주소
아래의 주소 구분은 내부 / 외부 주소와 관계가 없다.
┌ 로컬 주소: 내부 네트워크 다이어그램에 나타나는 IP주소
└ 전역 주소: 외부 네트워크 다이어그램에 나타나는 IP주소
- 내부 로컬 주소 (Inside Local)
로컬 네트워크에서 사용되는 일반적인 로컬 IP 주소. - 내부 전역 주소 (Inside Global)
NAT를 사용하는 라우터에서 사용할 수 있도록 할당된 공인 IP 주소.
ex) ‘호스트 192.168.0.100’이 외부에 있는’서버 1.2.3.4’로 요청을 보낸다고 가정하자. ‘192.168.0.100’을 외부와 통신하기 위해서 반드시 공인IP 주소로 변환해야한다. 이때, 공인IP가 내부 전역주소이다. - 외부 전역 주소 (Outside Global)
인터넷에서 참조하는 외부 장비의 주소.
위 예시에서 1.2.3.4가 외부 전역 주소이다. - 외부 로컬 주소 (Outside Local)
로컬 네트워크에서 참조하는 외부 장비의 주소.
특정 상황에선 외부 장비의 외부 전역 주소와 동일할 수 있다.
2. IP NAT 동작 방식
NAT는 크게 4가지의 동작 방식으로 나뉜다.
단방향 동작, 양방향 동작, 포트 기반 동작, 중복/2회 NAT 동작.
IP NAT 단방향 동작
RFC 1631에서 명시된 최초의 NAT이다.
사설 네트워크의 호스트가 인터넷에 접근할 때, 공인 IP 주소를 공유하고자 고안됐다. 대부분 호스트가 먼저 데이터를 요청했기 때문에 ‘내부 네트워크 → 외부 네트워크로 송신된다’라는 전제 조건 하에 설계되었다.
그래서 단방향 NAT, Outbound NAT라고 한다.

IP NAT 양방향 동작
기존 단방향 NAT는 Outbound 트래픽에 대한 NAT만 수행하기 때문에 Inbound 트래픽에 대한 NAT는 수행하지 않는다. 양방향 NAT는 Outbound / Inbound 트래픽에 대한 NAT를 모두 수행한다.
일반적으로 내부 네트워크에서 외부 네트워크 IP주소는 알아도, 외부 네트워크에서 내부 네트워크 IP 주소는 모른다. 설사, 외부 네트워크에서 내부네트워크 IP 주소를 안다고 해도 목적지 주소로 넣을 수 없다. (이것을 비대칭 구조라 부름.) 그래서 Inbound NAT는 단방향 NAT보다 적용하기 까다롭다. 하지만 방법은 있다.
① 외부에서 접근하는 내부 네트워크의 장비를 위한 정적 매핑(Static NAT)
② DNS를 통해 동적 매핑
이렇게 2가지가 있다. 2가지 방법 중 DNS를 통해 동적 매핑하는 과정을 알아보자.

아웃바운드 NAT나 인바운드 NAT가 크게 다르지 않다.
IP NAT 포트 기반 동작
단방향, 양방향 NAT가 개선된 NAT다.
IP와 포트번호를 사용하면서 한 개의 내부 전역 IP를 여러 내부 로컬 호스트들이 나누어 사용할 수 있다.
Overloaded NAT, NAPT, PAT 라고 불리기도 한다.

①번에서 ‘라우터 → 서버’ 패킷을 보면 출발지 포트번호도 바뀐다. 그 이유는 PC 2에서 이미 7000번을 사용하므로 겹치지 않는 포트번호로 매핑해야 되기 때문이다.
IP NAT Overlapping / Twice NAT
아래와 같은 상황에서는 IP 충돌이 발생할 수 있고, 내부 라우터는 목적지 주소가 내부인지 외부인지 구별할 수 없다.
1. 서로 다른 곳에 위치한 사설 네트워크 간 동일 IP 대역 사용
2. 공인IP 대역을 사설 네트워크 IP 대역으로 사용
3. 공인IP 할당 후 만료됐으나, 무시하고 계속 사용
예를 들어, ‘호스트 192.168.0.2’가 목적지 주소를 ‘다른 네트워크의 호스트 192.168.0.100’로 지정하고 라우터로 송신한다면, 라우터는 목적지가 내부인지 외부인지 모른다. 이 때, Twice NAT를 사용한다.
EX) 사설 네트워크에서 공인 IP대역(160.20.20.2)를 사용하는데, 특정 서버와 통신해야한다. 그러나 그 서버의 공인IP가 160.20.20.100으로 IP 대역이 겹치는 상황이다. 어떻게 설정해야 정상적으로 통신할 수 있을까?
DNS와 NAT를 사용하면 된다.

DNS 요청을 통해 ‘www.nat.com’의 IP를 알아냈다. 하지만 이 IP는 유요한 공인IP가 아닌 사설IP이다. 통신을 하기 위해선 NAT로 IP를 변환해야 한다. 또한, PC IP 역시 외부 공인 IP 대역과 겹치므로 NAT를 사용해야 한다.

3. IP NAT 매핑 방식
NAT가 IP를 변환할 때, 사전 정의된 IP로 변환하는 방법과 사전 정의된 IP Pool에서 IP 하나를 선택하여 변환하는 방법이 있다.
Static NAT
IP를 1대1 매칭시켜 변환시킨다.
내부/외부 장비의 전역 표현과 로컬 표현이 고정적으로 정의된 관계이다. 설정을 삭제하지 않는 이상 영구적이기 때문에 외부 네트워크에 항상 동일한 공인 IP주소로 표현되어야 하는 장비에 적합하다.
[설정]
Router(config)# ip nat inside source static <내부로컬IP> <내부전역IP> Router(config)# int <내부인터페이스> Router(config-if)# ip nat inside Router(config)# int <외부인터페이스> Router(config-if)# ip nat outside
[확인]
Router(config)# show ip nat translations
Dynamic NAT
IP Pool 중 IP 하나를 매칭시켜 변환한다.
전역 표현과 로컬 표현이 고정적이지 않고, 계속 바뀌는 관계(동적)이다. 지정된 내부 전역 주소 범위에서 아무 IP 하나를 선택해 변환한다.
양방향 통신을 할 수 없다. 이유는 아래의 예시를 보자.
192.168.0.0/24에 속한 호스트들이 125.11.22.1~14 범위의 공인IP를 사용한다고 가정해보자. 내부에서 외부로 통신은 문제가 없지만, 외부에서 내부로 먼저 통신시도를 할 수는 없다. 외부에서 125.11.22.1과 통신하겠다고 하면, 라우터는 192.168.0.1~192.168.0.253, 다시 말해 253개 호스트 중 누구와 통신하고 싶은지 알 수 없기 때문이다.
[설정]
Router(config)# access-list [1-99] permit <내부로컬IP> Router(config)# ip nat pool <첫내부전역IP> <마지막내부전역IP> netmask <서브넷> Router(config)# ip nat inside source list <acl번호> pool <Pool이름> Router(config)# int <내부인터페이스> Router(config-if)# ip nat inside Router(config)# int <외부인터페이스> Router(config-if)# ip nat outside
* 참고. SNAT는 Source NAT, DNAT는 Destination NAT다.
SNAT = Static NAT, DNAT = Dynamic NAT가 아니다.
Source NAT는 출발지 IP를 변환하기 때문에 사설 IP주소(내부 로컬 주소)를 공인 IP주소(내부 전역 주소)로 변환한다. 내부에서 외부로 진행되므로 Outbound NAT라고도 한다.
Destination NAT는 목적지 IP를 변환하기 때문에 공인 IP주소(내부 전역 주소)를 사설 IP주소(내부 로컬 주소)로 변환한다. 외부에서 내부로 진행되므로 Inbound NAT라고도 한다.