NAT와 PAT에 대하여

양승현·2022년 7월 9일
0

network

목록 보기
3/13
post-thumbnail
post-custom-banner

1. NAT(Network Adress Translation)란?

  • 네트워크 주소 변환(Network Address Translation, NAT)란 IP 패킷의 출발지, 목적지 IP 주소와
  • TCP 또는 UDP의 포트 번호를 재기록하면서 라우터와 같은 네트워크 장치를 통해 네트워크 통신을 하는 기술
  • 공유기는 이러한 기술을 이용하여 내부 네트워크에 있는 여러 대의 PC들에게는 사설 IP를 할당하고 해당 PC가 통신하려고 할 때 공인 IP로 변경해서 외부 네트워크와 통신하게 하는 역할을 수행한다.
NAT 테이블
  • 특정 출발지 IP와 특정 목적지 IP를 가진 네트워크 패킷이 NAT를 통해 변환되게 되면
  • NAT 테이블에 기록하고 해당 패킷이 다시 돌아왔을 때 기록해둔 내용을 보고 원래의 출발지 경로로 패킷을 보내준다.
인터넷 주소 번역 원리

공유기(라우터)에 연결되어있는 각각의 컴퓨터들의 사설 IP (192.168.0.xxx)를 받아와 유일한 공인 IP로 변환한다. 그리고 외부 인터넷으로 공인 IP 주소정보를 보내는 것이다.
외부 입장에서는 어떤 사설IP가 보냈는지 알지 못한다. 그냥 공유기 주소(공인 IP)만 알고있는 것이다.
답변을 하게되면, 인터넷 정보가 다시 공유기로 올것이고 공유기에서는 이전에 요청한 정보들을 다 기억하고 있어서, 확인하고 그대로 사설 IP에게 넘겨준다.


1.1 왜? NAT를 해야 하는가?

1) 공인 IP의 부족한 문제 해결

  • 전세계 사람들이 공인 IP를 사용하기에는 개수가 많이 부족하다. 그렇기 때문에 NAT를 사용하여 한개의 공인(public)IP에 여러 개의 사설(private)IP를 부여하여 IP 개수 문제를 해결할 수 있다.

2) 외부로부터 보안성이 우수하다.

  • 사설(private)IP는 인터넷 구간에서 라우팅 되지 않아 방화벽의 기능을 제공한다.

3) 기존 설정 유지

  • 공인 IP가 변경 되어도, 서버안의 기존 설정을 유지할 수 있다.


출처 : https://rednooby.tistory.com/25

  • 영업부 내부 네트워크에서는 사설 IP를 사용하고 있다. 하지만 Router를 통해 외부 인터넷에 출/입 하는 경우에는 NAT 변환에 의해 사설 IP가 공인 IP로 변환되어 나가게 된다.

1.2 NAT의 변환 방식에 따른 종류

Static(정적) NAT

  • 공인 IP 1개와 사설 IP 1개를 일대일로 맵핑하여 변환한다.
  • Static(동적) NAT의 주된 사용 이유는 사설 대역의 서버가 역할이 많아 포트포워딩 작업이 많이 필요한 경우에 해당 사설 IP를 공인 IP로 정적 맵핑(연결)하기 위한 목적으로 사용된다.
  • Elastic IP (AWS), Floating IP (OpenStack)

Dynamic(동적) NAT

  • 공인 IP 여러개와 사설 IP 여러개를 다대다로 맵핑하여 변환한다.
  • 공인 주소 여러 개는 공인 주소 pool에 담겨 있고 사설 주소가 이를 요청했을 경우 pool 에 있 공인(public) 주소를 그때마다 꺼내어 동적으로 맵핑(연결)해 준다. 따라서 공인 주소와 사설 주소는 지되지 않는다.
  • 보통 공인 IP가 사설 IP 보다 적을 경우에 사용되며, 공인 IP를 효율적으로 사용하려는 목적에 부합하는 NAT 방식이다.
  • port = 0~65535
  • 0~1024 (well known)

PAT(Port Address Translation)란?

  • 공인 IP 1개와 사설 IP 여러개 를 맵핑하여 변환한다. (공인 주소가 1개인 경우 다수의 사설 주소가 한 개의 공인 주소를 공유하여 주소 변경을 하고자 하는 경우에 사용하는 방법)
  • 변환된 IP주소로는 사내망 호스트들을 구분할 수 없기 때문에 포트번호를 부여하여 구분한다.
  • PAT는 공인IP(L3) 뿐만 아니라 포트(L4)까지 함께 패킷에 사용되기 때문에, 공인 포트번호에 맵핑된 호스트의 사설 IP를 찾아, 올바른 호스트에게 패킷을 전달해줄 수 있다.

(그렇다면 돌아올때는 어떻게 찾아올까?)


A가 통신을 하려고 할때 PAT는 A에게 포트 번호를 부여한다. 포트 번호는 그대로 기억되고 IP만 공인과 사설을 지나며 변화하게 된다. 그리고 다시 돌아오게 될 때 기억하고 있던 포트번호를 통해 다시 A의 사설 IP 정보로 찾아오게 된다.

예)

  • 요청 (사설IP) 192.168.1.2/8001 가 (공인IP)220.160.10.72/8001로 변환되어 인터넷으로 요청되고

  • 응답 인터넷에서 (공인 IP)220.160.10.72/8001에서 (사설IP)192.168.1.2/8001로 변환된다.

  • 이렇게 포트 번호를 보고 A가 포트 번호 8001를 사용해서 요청했으니 8001포트로 응답이 온 A에게 다시 보내주는 것이다.


예) MAC 주소로 통신

  • src -----> dst
    sender ip : 1.1.1.1
    sender mac : 000c.000c.000c
    destination ip : 00:00:00:00
    destination mac : 00.00.00.00
    “나는 1.1.1.1 이고 나의 mac 주소는 000c... 인데.. 너희들 중 1.1.1.5가 있다면 나에게 대답해 줄래?”

  • src <----- dst
    sender ip : 1.1.1.1
    sender mac : 000c.000c.000c
    destination ip : 00:00:00:00
    destination mac : 00.00.00.00
    아~~~ 1.1.1.5 의 mac 주소는 000a.000a.000a.000a 구나! 기억해야지!! -> arp 테이블에 저장

예) 동적 PAT

  • 동적 PAT 구성(일반적으로 공유기에서 제공하는 기능)
    (config)# access-list 1 permit any <-- 변경할 주소 지정
    (config)# ip nat inside so list 1 int fa0/0 overload
    "ip nat" 주소 변경할게!!
    "inside source list 1" 주소를 변경할 출발지 주소는 list 1 에 지정된 친구들이야!!!
    "int fa0/0" fa0/0(192.168.1.x) 에 할당된 공인주소로 변경할게!!!
    "overload" pat 활성화 => 다수의 사설 주소가 fa0/0 의 주소를 공유!!!
    (config)# int fa0/0
    (config-if)# ip nat outside
    (config-if)# int fa0/1
    (config-if)# ip nat inside
    (config-if)#

예)

(http://192.168.1.1xx) —> Router —> 172.16.1.100:80

  • 정적 PAT
    시나리오 - 외부에 있는 사용자들은 192.168.1.1xx:8001 포트로 접속할 경우 내부에 있는 사설 주소인172.16.1.100의 80번 포트로 접속되도록 한다.
    192.168.1.1xx:8001 = 172.16.1.100:80
    (config)# ip nat inside so static tcp 172.16.1.100 80 int fa0/0 8001
    내부에 있는 사설 IP 주소인 172.16.1.100 의 TCP 포트번호 80 번과 공인IP 주소가 할당된 fa0/0 의 8001 포트를 정적으로 매핑하겠다!!!

(http://192.168.1.199:8001/)
웹서버 httpd 는 동작중이어야 하며, 방화벽은 해제되어 있는 상태여야 한다.
root@localhost ~# systemctl start httpd # 웹서버 실행
root@localhost ~# echo "HELLO ALL" > /var/www/html/index.html
root@localhost ~# systemctl stop firewalld # 방화벽 종료
root@localhost ~# cat /var/www/html/index.html
HELLO ALL

Port Forwarding

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

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

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

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

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

예)

  • 21번 포트로 요청이 왔을때 공유기는 어느 PC로 연결 해줘야 하는지 잘 모르는 상태이다.
  • 공유기에게 21번 포트는 PC(192.168.1.99)야 라고 이정표를 달아준다.
  • 21번 포트로 요청이 오면 공유기는 이정표를 참조해서 192.168.0.20번 PC로 정확하게 전달한다.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 4월 12일

먼저 친절한 예시 감사합니다. 잘 이해가 안되는 부분이 있는데 그럼 PAT과 PORT Forwarding의 차이점이 무엇인가요?

답글 달기