포스트

[Network] NAT & PAT

Computer Science / Network

네트워크의 기초인 NAT와 PAT에 대한 개념 정리

NAT(Network Address Translation)의 개념

네트워크 주소 변환(Network Address Translation, NAT)란, IP 패킷의 출발지, 목적지 IP 주소와 TCP1 또는 UDP2의 포트 번호를 재기록하면서 라우터와 같은 네트워크 장치를 통해 네트워크 통신을 하는 기술이다.

공유기는 이러한기술을 이용하여 내부 네트워크에 있는 여러 대의 PC들에게는 사설 IP를 할당하고, 해당 PC가 통신하려고 할 떄는 공인 IP로 변경해서 외부 네트워크와 통신하게 하는 역할을 수행한다.

왜 NAT를 해야 하는가?

image_2 영업부 내부 네트워크에서(사설 IP) → Router로 인한 NAT 변환 → 공인 IP로 변환

NAT를 사용해야 하는 이유는 아래와 같다.

  • 공인 IP의 부족한 문제 해결
    전세계 사람들이 공인 IP를 사용하기에는 개수가 많이 부족하다.
    그렇게 때문에 NAT를 사용하여 한 개의 공인(public) IP에 여러 개의 사설(private) IP 개수 문제를 해결할 수 있다.
  • 외부로부터 보안성이 우수성
    사설(private) IP는 인터넷 구간에서 라우팅되지 않아, 방화벽의 기능을 제공한다.
  • 기존 설정 유지
    공인 IP가 변경되어도, 서버 안의 기존 설정을 유지할 수 있다.

NAT 테이블

특정 출발지 IP와 특정 목적지 IP를 가진 네트워크 패킷이 NAT를 통해 변환되면 NAT 테이블에 기록하고 해당 패킷이 다시 돌아왔을 때 기록해둔 내용을 보고 원래의 출발지 경로로 패킷을 보내준다.

NAT 테이블의 원리

image_1

192.168.1.268.1.31.1의 웹 사이트에 들어가고 싶다는 가정으로 시작

  1. 192.168.1.2는 자신의 IP 주소와 목적지의 IP 주소, 웹 사이트 액세스 요청을 포함하는 패키지를 만들어서 보낸다.

    Source IP AddressDestination IP AddressRequests
    192.168.1.268.1.31.1요청
  2. 하지만 68.1.31.1은 웹 사이트를 192.168.1.2에게 보내줄 수 없는데, 192.168.1.2와 같은 사설 IP가 어디있는지도 모르고, 사설 IP를 사용하는 모든 대상에게 데이터를 보낼 수 없기 때문이다.

    예를 들면, 지나가던 사람(68.1.31.1)에게 다짜고짜 홍길동(192.168.1.2)에게 편지를 전해달라는 것과 같다.

    홍길동(192.168.1.2)이 어디있는지, 동명이인이 많을 것이고, 애초에 누군지도 모르는 상황인 것이다.

    Source IP AddressDestination IP AddressResponses
    68.1.31.1192.168.1.2 (몰?루)응답 (누구?어디?맞나?)
    • 결과적으로 웹 사이트 접속(요청/응답) 실패
  3. 처음으로 돌아와서 NAT 라우더는 한 가지 기능을 추가로 수행하는데, 192.168.1.2가 다시 한번 패키지를 만들어 전송하면 NAT 라우터는 이 패키지에서 수신 IP를 자신의 공인 IP 주소로 바꾼 후, 192.168.1.268.1.31.1로 접속하려 했다는 것을 기억하고 전달(테이블 생성)하게 된다.

    Source IP AddressDestination IP AddressRequests
    192.168.1.2101.89.101.1268.1.31.1요청
    • NAT 라우터가 보관하는 테이블

      NAT Table
      Private IP AddressSource IP AddressDestination IP Address
      192.168.1.2101.89.101.1268.1.31.1
  4. 다시 68.1.31.1은 웹 사이트를 101.89.101.12로 보내면, 라우터는 테이블을 바탕으로 데이터를 192.168.1.2에게 보낼 수 있게 된다.

    Source IP AddressDestination IP AddressResponses
    68.1.31.1101.89.101.12응답 (성공)

NAT의 변환 방식에 따른 종류

Static(정적) NAT

image_3 1:1 방식의 Static NAT

공인 IP 1개와 사설 IP 1개를 1:1로 매핑하여 변환한다.

Static(동적) NAT의 주된 사용 이유는 사설 대역의 서버가 역할이 많아 #포트포워딩 작업이 많이 필요한 경우에 해당 사설 IP를 공인 IP로 정적 맵핑(연결)하기 위한 목적으로 사용된다.

대표적인 사용 예시로는 Elastic IP(AWS), Floating IP(OpenStack) 등이 있다.

Dynamic(동적) NAT

image_4 1:N 또는 N:N 방식의 Dynamic NAT

공인 IP 여러 개와 사설 IP 여러 개를 N:N 방식으로 맵핑하여 변환한다.

공인 주소 여러 개는 공인 주소 pool에 담겨있고, 사설 주소가 이를 요청했을 경우, pool에 있는 공인(public) 주소를 그때마다 꺼내서 동적으로 맵핑해 준다.

보통 공인 IP가 사설 IP보다 적을 경우에 사용되며, 공인 IP를 효율적으로 사용하려는 목적에 부합하는 NAT 방식이다.

또한 이 경우에는 Global Address Pool이라는 곳에 담겨있는 공인 IP를 필요에 따라 사설 IP가 사용하고, 사용이 끝나면 반환하는 형식으로 동작하기 때문에, 내부망과 외부망이 명확히 분리되면서 보안의 효과까지 기대할 수 있게 되는 것이다.

내부망과 외부망 사이에 방화벽(Firewall)을 운영하여 외부 공격으로부터 내부를 지킬 수 있게 되며, NAT 장비는 따라서 라우터일 수도 있고, 방화벽 형태일 수도 있다.

대표적으로 #Well-known Port(0~1024)가 있다.

패킷 방향에 따른 NAT 종류

1. SNAT (Sourve Network Address Translation)

내부에서 외부로 나가는 패킷의 출발지 IP 변경하는 것으로, Source NAT, SNAT, IP 마스커레이드라고 불린다.

대표적으로 가정용 공유기 정도의 장비를 떠올리면 된다.

2. DNAT (Destination Network Address Translation)

외부에서 내부로 들어오는 패킷에 있는 목적지 IP 주소를 변경하여 내부에 도달할 수 있게 하는 것이다.

대표적으로 방화벽, 로드 밸런서의 장비 등이 있다.

3. Twice-NAT

출발지와 목적지 모두 주소가 바뀌는 방식으로 서로 다른 두 지점간에 연결을 위한 중간 네트워크 허브 구조를 이용할 때 사용한다.

4. 헤어핀 또는 NAT Loopback

접속하려는 목적지가 자기 자신일 경우, 데이터를 내부에서 바로 전환해 주는 기술이다.

DNS 웹 서버의 경우에 사용된다.

PAT(Port Address Translation, NPAT)의 개념

image_5

위의 NAT 내용에서 한 가지 허점이 있다.

세 명의 각기 다른 서버에 접속한다고 가정하면,

Source IP AddressDestination IP AddressRequests
192.168.1.1101.89.101.1268.1.31.1요청
192.168.1.2101.89.101.208.8.8.8요청
192.168.1.3101.89.101.5068.7.5.16요청
Source IP AddressDestination IP AddressResponses
68.1.31.1101.89.101.12응답 (성공)
8.8.8.8101.89.101.20응답 (성공)
68.7.5.16101.89.101.50응답 (성공)

위와 같은 식으로 각 NAT 테이블이 해당 내용을 통해 구분할 수 있기에 문제될 것이 없다.

하지만 아래와 같이 세 명이 모두 같은 서버에 접속한다며느 라우터는 받은 패킷을 테이블을 보고도 누구에게 전달해야 할 지 모르게 된다.

Source IP AddressDestination IP AddressResponses
68.1.31.1101.89.101.12 (홍길?동)응답 (똑같은데?)
68.1.31.1101.89.101.12 (홍길?동)응답 (똑같은데?)
68.1.31.1101.89.101.12 (홍길?동)응답 (똑같은데?)
NAT Table
Private IP AddressSource IP AddressDestination IP Address
192.168.1.1101.89.101.1268.1.31.1
192.168.1.2101.89.101.1268.1.31.1
192.168.1.3101.89.101.1268.1.31.1

그래서 추가적으로 IP 뒤에 포트 번호까지 붙여 이 대상들을 구분하는 것이 PAT이다.

image_6

위의 이미지를 다시 보면, 192.168.1.2:1253은 라우터를ㅇ 통해 패키지를 보내고, NAT 라우터는 Source IP AddressIP:PORT(101.89.101.12:8801) 형태로 변경한다.

호스트는 이제 응답을 101.89.101.12:8801로 보내게 되며, NAT 라우터는 8801 포트에서 응답을 수신하면 192.168.1.2:1253으로 전달할 곳을 확실하게 알 수 있게 된다.

PAT 개념 정리

image_7

  1. HTTP 요청이 80번 포트로 NAT 라우터에 도착
  2. 라우터는 테이블을 확인하고 80번 포트로 온 패킷을 192.168.100.2:7575로 전달
  3. 정상적인 통신 가능

그렇다면 돌아올 때는 어떻게 찾아오는가?

image_8

A가 통신을 할려고 할 때, PATA에게 포트 번호를 부여하고, 포트 번호는 그대로 기억되고 IP만 공인과 사설을 지나며 변화하게 된다.

그리고 다시 돌아오게 될 때, 기억하고 있던 포트 번호를 통해 다시 A의 사설 IP 정보로 찾아오게 된다.

  1. 요청

    Source IP AddressDestination IP AddressRequests
    192.168.1.2:8001101.89.101.12:800168.1.31.1요청
  2. 응답

    Source IP AddressDestination IP AddressResponses
    68.1.31.1101.89.101.12:8001192.168.1.2:8001응답

PAT의 예시

MAC 주소로 통신

MAC 주소(media access control address, MAC address)는 네트워크 세그먼트의 데이터 링크 계층에서 통신을 위한 네트워크 인터페이스에 할당된 고유 식별자이다.

  1. src ——–> dst

    Sender IPSender MACDestination IPDestination MAC
    1.1.1.1000c.000c.000c00:00:00:0000.00.00.00
    • 나는 1.1.1.1이고 내 MAC 주소는 000c.000c.000c인데, 해당 네트워크의 모든 PC 중에 1.1.1.5가 있다면 대답 바람
  2. src <——– dst

    Sender IPSender MACDestination IPDestination MAC
    1.1.1.1000c.000c.000c00:00:00:0000.00.00.00
    • 수소문을 통해 1.1.1.5의 MAC 주소는 000a.000a.000a.000a로 확인, arp 테이블에 저장하겠음

같이 보기

포트포워딩 (Port Forwarding)

일반적으로 사설 IP를 사용하는 PC는 NAT 테이블을 통해 기록된 내용이 있을 때만 직접 통신이 가능하다.

즉, 패킷의 요청이 내부에서 외부로 나갔다가 응답이 들어오는 것은 가능하지만, 애초에 외부에서의 요청 패킷이 직접 사설 네트워크 대역으로 들어오는 것은 불가능하다는 것이다.

이때 사용하는 것이 바로 포트포워딩이다.

포트포워딩은 NAT를 수행하는 장치에서 설정하며, 특정 포트를 열어주고 해당 포트로 들어오는 모든 패킷을 내부의 사설 IP로 전달해주는 기능이다.

이를 이용하면 내부에서 나간 적이 없는 패킷도 직접적으로 내부로 들어올 수 있다.

일반적으로 사설 네트워크 대역에 서버가 있으면 해당 서버에서 서비스 해주는 포트를 포트포워딩으로 접근 가능하게 해줄 수 있다.

image_9

예시로, 위의 이미지처럼 21번 포트로 요청이 왔을 때 공유기는 어느 PC로 연결해줘야 하는지 잘 모르는 상태이다.

이때, 공유기에게 21번 포트 → PC(192.168.1.99)”라는 이정표를 달아준다.

21번 포트로 요청이 오면 공유기는 이정표를 참조해서 192.168.0.20번 PC로 정확하게 전달한다.

Well-known Port

웹 프로토콜인 HTTP와 같이, TCP/IP의 상위 프로토콜을 사용하는 응용 프로그램에서는 미리 지정된 포트 번호들을 가지고 있는데, 이런 것들은 IANA3에 의해 지정되었으며, “잘 알려진 포트(Well-known Port)”라고 불리며, 일종의 약속과도 같은 것이다.

  • Well-known Port Number 종류

    포트 번호용도
    21번FTP
    22번SSH
    23번TELNET4
    25번SMTP5
    53번DNS
    61번SNMP6
    80번HTTP7
    110번POP38
    115번SFTP
    135번RPC
    139번NetBIOS
    143번IMAP9
    194번IRC
    443번HTTPS10 (SSL)
    445번SMB
    3389번원격 데스크탑 연결

참고 사이트

yang.log - NAT와 PAT에 대하여

IT Net Tech - 네트워크 기초 - NAT (Network Address Translation)

Inpa Dev - NAT(Network Address Translation) 이란 무엇인가?

개발자를 꿈꾸는 프로그래머 - 네트워크 통신에서 포트를 왜 사용 하는가? Well-known port란, 종류


  1. 전송 제어 프로토콜(Transmission Control Protocol, TCP)은 데이터와 패킷이 보내진 순서대로 전달하는 것을 보장해주면서 두 개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 중요한 네트워크 프로토콜이다. ↩︎

  2. 사용자 데이터그램 프로토콜 (User Datagram Protocol, UDP) 은 보안과 신뢰성보다 전송 속도와 효율성이 더 중요한 경우 데이터를 전송하기 위해 IP과 함께 오래 사용된 프로토콜이다. ↩︎

  3. IANA(Internet Assigned Numbers Authority)는 인터넷 할당 번호 관리기관의 약자로 IP 주소, 최상위 도메인 등을 관리하는 단체이다. ↩︎

  4. 인터넷을 통해 원격지의 호스트 컴퓨터에 접속할 때 지원되는 인터넷 표준 프로토콜이다. ↩︎

  5. Simple Mail Transfer Protocol(SMTP)은 인터넷에서 전자 우편을 보낼 때 이용하게 되는 표준 통신 규약을 말한다. ↩︎

  6. Simple Network Management Protocol(SNMP)은 네트워크 장비를 관리, 감시하기 위한 목적으로 TCP/IP 상에 정의된 응용 계층 표준 프로토콜이다. ↩︎

  7. Hypertext Transfer Protocol(HTTP)은 인터넷에서 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약이다. ↩︎

  8. Post Office Protocol version 3(POP3)는 인터넷에서 전자 우편을 가져오기 위한 프로토콜이다. ↩︎

  9. Internet Messaging Access Protocol(IMAP)은 인터넷 메일 서버에서 메일을 읽기 위한 인터넷 표준 통신 규약의 한가지로, POP3보다 유연하고 성능이 뛰어나다. ↩︎

  10. Hypertext Transfer Protocol over Secure Socket Layer(HTTPS)는 월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전이다. ↩︎

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.