Network

NAT

Habilis 2022. 6. 16. 15:46

NAT

1개의 실제 공인 IP 주소에, 다량의 가상 사설 IP 주소를 할당 및 매핑하는 1:1 또는 1:다수 주소 변환 방식

 

※NAT DHCP 비교

NAT : 사설 IP 주소 공간을 별도로 정하고 IP 주소 변환에 중점을 둔다.

DHCP : 기확보된 공인 IP 주소 Pool를 집단 공유하며, 사용 후 반납

 

NAT의 사용 이유 및 유의점

1. IPv4 IPv4 주소 고갈 및 라우팅 테이블의 대형화(Routing Scalability)에 대한 해소책

2. 공인 IP 주소의 효율적 공유 및 절약

  - 공인 IP 주소 사용시 ISP사를 바꿀 때 마다, 모든 컴퓨터 주소를 바꿔야하는 등의 단점 해소

3. 주소 변환을 통해 내부 사설망 보안 및 Load Balancing 등도 가능

  - 통상, 방화벽 등과 결합되어 함께 기능 수행

     /외 주소 변환 규칙을 외부에서 알 수 없으므로, 내부 망에 대한 정보가 외부의 노출 안됨

  - 주로 외부망과 사설망 간에 연결점에 있는 라우터에서 수행됨

4. NAT IP 주소 변환 뿐만 아니라 IP주소, TCP Checksum, UDP Checksum 등 서로 관련된 많은

  분도 변경해야 하므로, FTP, SIP 등에서 문제가 발생

 

 

NAT의 주요 기능

1. IP masquerading(IP위장)

  - 외부망에서 볼 때 내부망 여러 호스트들이 단일 NAT 서버 하나로만 보인다.

    (외부) <-> (NAT 1) : (다수 호스트)

2. Port Forwarding(포트 포워드)

  - 내부망 여러 호스트들이 외부망과 트랜스포트계층에서 각각 별도로 연결 짓게 할 수 있다.

    서비스 포트 번호 별로 내부의 사설 IP로 지정된 호스트로 전달

3. Load Balancing

  - 각 포트별로 트래픽을 균형있게 함

 

NAPT (Network Address Port Translation) 또는 PAT (Port Address Translation), 그리고 문제점

1. 원래는 (Basic NAT)

  - IP 주소 변환(공인 IP 주소 -> 사설 IP 주소) 만을 이용하는 기본적인 NAT 방식 이었음

  - , IP 헤더의 목적지와 출발지 주소만 변경하고, IP 패킷 내부에 다른 어떤 처리도 안함

 

2. NAPT

  - TCP, UDP 헤어 내 포트 번호 변환을 통해 (IP 주소 및 포트 번호를 모두 함께 결함시킴)

  - 하나의 IP 주소 및 여러 포트 번호에 의해 여러 내부 호스트 주소 및 포트를 연결이 가능해

    진다. ( IP Masquerading)

3. 이에따라 구현이 복잡해지는 등 문제점 발생

  - 프로토콜 응용마다 NAT 구현이 달라짐

  - NAT 자신이 연결 마다 내부 상태 정보(내부 호스트 IP 주소, 포트 번호 등)를 보존 필요

  - SIP를 이용한 어플리케이션 등

 

 

Twice NAT 방식

1. 출발지 주소, 목적지 주소 모두를 변환하는 방식

  - 동일 회사 내 멀리 떨어진 두 지사 간에 인터넷 경유 연결 등

 

Static NAT

Inside Local IP 주소와 Inside Global IP 주소간에 1:1 Mapping 하도록 설정한다.

DNS서버나 이메일 서버 같이 외부 인터넷에서 접속해야 하는 내부 IP 호스트에 유용하다.

호스트가 꼭 변하지 않는 global 주소를 가져야 할 경우 static NAT를 사용한다.

외부에서 내부 사설망을 접속하고자 할 때 사용

Dynamic NAT

Inside Global IP 주소 그룹에서 하나의 Inside Global IP 주소를 IP 주소와 동적으로 Mapping되도록 설정한다.

(공인 IP 그룹과 사설 IP 그룹을 그룹 대 그룹으로 Mapping)

사설망에서 인터넷에 접속할 때 주로 사용한다.

  동적 NAT 정적 NAT
설정 1:N, N:1, N:M 1:1
테이블 NAT 수행 시 생성 사전 생성
테이블 타임 아웃 동작 없음
수행 정보 실스간으로만 확인하거나 별도 변경 로그 저장 필요 별도 필요없음
설정 = NAT

NAT 동작과정

1. 출발지 IP 10.10.10.10으로, 목적지 IP와 서비스 포트는 20.20.20.20. 80으로 패킷을 전송한다. 출발지 서비스 포트      는 임의의 포트로 할당됩니다. 여기서는 2000번을 썼다.

2. NAT 역할을 수행하는 장비에서는 사용자가 보낸 패킷을 수신한 후 NAT 정책에 따라 외부 네트워크와 통신이 가능한 공      인 IP 11.11.11.11 IP 주소를 변경합니다. NAT 장비에서 변경 전후의 IP 주소는 NAT 테이블에 저장됩니다.

3. NAT 장비에서는 출발지 주소를 11.11.11.11로 변경해 목적지 웹 서버로 전송합니다.

4. 패킷을 수신한 웹 서버는 사용자에게 응답을 보냅니다. 응답이므로 수신한 내용과 반대로 출발지는 웹 서버 

    (20.20.20.20)가 되고 목적지는 NAT 장비에 의해 변환된 공인 IP 11.11.11.11로 사용자에게 전송합니다.

5. 웹 서버로부터 응답 패킷을 수신한 NAT 장비는 자신의 NAT 테이블에서 목적지 IP에 대한 원래 패킷을 발생시킨 출발지

    IP 주소가 10.10.10.10인 것을 확인합니다.

6. NAT 변환 테이블에서 확인된 원래 패킷 출발지 IP(10.10.10.10)로 변경해 사용자에게 전송하면 사용자는 최종적으로

    패킷을 수신합니다.

 

 

NAT-PAT 동작과정

1. 사용자가 웹 서버로 접근하기 위해 패킷에 출발지 10.10.10.10 목적지 20.20.20.20 목적지 서비스 포트는 웹 서비스

    포트80으로 채워 패킷을 전송합니다. 출발지 서비스 포트는 NAT와 마찬가지로 임의의 서비스 포트가 할당되며 이

    예제에서는 2000번 포트로 할당 되었다고 가정합니다.

2. NAT 장비는 사용자가 보낸 패킷을 받아 외부 네트워크와 통신이 가능한 공인 IP 11.11.11.11로 변경합니다. 다만

   출발지에 있는 다수의 사용자가 동일한 공인 IP로 변환되어야 하므로 패킷의 주소 변경 시 출발지 IP뿐만 아니라 출발

   지의 서비스 포트도 변경됩니다. 출발지 IP와 출발지 서비스 포트는 NAT 장비에 의해 모두 변경되고 NAT 장비가 이

   변경 정보를 NAT 테이블에 기록합니다.

3. NAT 장비에서 변경된 출발지 IP 주소인 11.11.11.11과 서비스 포트 3000으로 패킷을 재작성해 웹 서버로 다시

    전송합니다.

4. 사용자가 보낸 패킷을 수신한 웹 서버는 사용자에게 패킷을 응답하는데 출발지 IP는 웹서버의 IP 주소인 20.20.20.20

    으로 채워지고 목적지 IP NAT 장비에 의해 변환된 공인 IP 11.11.11.11과 서비스 포트로 채워져 전송합니다.

5. 웹 서버로부터 응답 패킷을 수신한 NAT 장비는 NAT 테이블을 확인해 웹 서버로부터 받은 패킷의 목적지 IP

    주소인 11.11.11.11이 원래 10.10.10.10이며 서비스 포트 3000이 원래 2000인 것을 확인합니다.

 

만약 다른 IP를 가진 사용자가 동일하게 20.20.20.20 서버로 접속하는 경우, NAT 장비에서는 출발지 IP 11.11.11.11로 동일하게 변경하고 서비스 포트는 다른 포트로 변경합니다.

 

, PAT 동작 방식은 NAT와 거의 동일하게 이루어지지만 IP 주소뿐만 아니라 서비스 포트까지 함께 변경해 NAT 테이블을 관리하므로 하나의 IP만으로도 다양한 포트 번호를 사용해 사용자를 구분할 수 있습니다. 하지만 이 서비스 포트의 개수는 제한되어 있어 재사용됩니다. 만약 서비스 포트가 동시에 모두 사용 중이거나 재사용할 수 없는 때는 PAT이 정상적으로 동작하지 않습니다. 이 때 동시 사용자가 매우 많을 때는 PAT에서 사용하는 공인 IP 주소를 IP 하나가 아닌 풀로 구성해야 합니다.

 

PAT는 다수의 IP가 있는 출발지에서 목적지로 갈 때 NAT 테이블이 생성되고 응답에 대해 NAT 테이블을 참조할 수 있지만 PAT IP가 목적지일 때는 해당 IP가 어느 IP에 바인딩되는지 확인할 수 있는 NAT 테이블이 없으므로 사용할 수 없습니다. , PAT는 뒤에서 다룰 SNAT DNAT SNAT에 대해서만 적용되고 DNAT에는 적용되지 않습니다.

 

NAT + DHCP 실습

내부 사설 IP대역 : 192.168.10.0/24

DHCP : R1에서 192.168.10.0/24 할당, 제외 IP 192.168.10.251 ~ 254

NAT : R1에서 내부 대역 1.1.1.1/24로 설정해주기

VMnet8 : 10.0.0.0/24 대역 사용

Client 1 : Winows10, Client 2 : Winows10

 

 

R1 설정

conf t
int f0/0
ip add 192.168.10.254 255.255.255.0
no sh
int f0/1
no sh
ip add dhcp
ip dhcp pool KHC
network 192.168.10.0
default-router 192.168.10.254
dns-server 8.8.8.8
exit
ip dhcp excluded-address 192.168.10.251 192.168.10.254
ip nat pool KHC2 1.1.1.1 1.1.1.1 prefix-length 24
access-list 1 permit 192.168.10.0 0.0.0.255
ip nat inside source list 1 pool KHC2 overload
int f0/0
ip nat inside
int f0/1
ip nat outside

DHCP server

Client 1

Client에서 Ping Test

외부 대역으로 ping이 가지 않는다.

1. NAT가 정확히 되는지 확인한다.

2. NAT의 경로가 있는지 확인한다.

Vmnet2 Packet

보면 source 주소가 192.168.10.1이라는 것을 확인 할 수 있다.

Vmnet8 Packet

NAT는 정상적으로 작동 되는 것을 확인 할 수 있다.

위쪽이 Vmnet2번의 Ethernet부분이고 밑에가 VMnet8번이다

Dst가 바뀌어서 나가는 것을 확인 할 수 있다.

 

그렇다면 NAT의 문제는 없는 것을 확인 할 수 있다. 2번째 문제인 경로상의 문제이다. NAT를 사용 했을 때 다음 네트워크와의 대역이 같게 NAT를 해주면 이러한 경로상의 문제가 발생 하지 않는다. 하지만 지금 시나리오의 NAT 대역은 1.1.1.1/24이기 때문에 받아 줄 수 있는 장비가 없다.

따라서 R1에서 ip route 1.1.1.1 255.255.255.255 f0/0으로 경로 설정을 해주면 받아 올 수 있게 된다.

을 추가해준다

 

Client 1

Ping 통신과 Web 이용이 가능한 것을 확인 할 수 있다.

 

위 패킷은 경로 지정 후 NAT를 이용해서 1.1.1.1로 변환이 잘 되어 통신하는 모습이다.

 

 

논리적 구성

첫번째 NAT가 발생했을 때 동작 과정이다.

마찬가지로 두번째 NAT가 발생 할 때는 Inside 10.0.0.0/24 대역을 쓰고 Outside 192.168.0.0/24대역이 된다.

세번째 NAT는 실제 공유기와 외부이기 때문에 Inside 192.168.0.0/24대역 Outside는 외부 대역을 쓰게 된다.

 

따라서 NAT를 해주는 IP를 받아 줄 수 있는 장치만 있다면 외부에서도 쉽게 접근이 가능하다. 하지만 본 토폴로지에서 따로 추가 할 수 없다면 포트 포워딩을 해주는 것도 좋은 방법이다.

 

 

포트 포워딩(Port forwarding)

그렇다면 NAPT를 수행하는 기기에 호스트들이 고정 포트로 매핑된 상태면 외부에서 내부로 통신을 할 수 있겠다는 생각이 든다. 바로 그 개념이 포트 포워딩이다. 그리고 고정포트를 포워딩하기 때문에 역시 두 개의 IP가 동일 포트로 포워딩할 수 없다는 제약사항이 있다. 그리고 특정 포트로 포워딩 하기 위해서 반드시 사설 IP 주소 : 포트형식으로 매핑 정보가 필요하다.

 

SSH 포트 포워딩의 사용 예

두 임의 응용 간에 보안되지 않은 TCP 연결을 보안된 TCP 연결(터널링)로 바꿈

어떤 포트로 유출입 되는 데이터를 또 다른 포트로 자동 전달

한편, 여러 연결을 여러 그룹으로 다중화 시킬 수도 있다.