보안개구리

NAT(Network Address Translation) 본문

IT/네트워크

NAT(Network Address Translation)

보안개구리 2024. 6. 14. 11:31

 이번 시간에는 NAT에 대하여 배워보도록 하겠습니다.

 NAT란 한쪽 네트워크의 IP 주소가 다른 네트워크로 넘어갈 때 네트워크의 주소가 변환되어 넘어가는 것을 말합니다.

 예전에 IP를 배웠을 때 사용할 수 있는 IP의 숫자는 한정 되었으며 점점 고갈되는 상황이라고 말씀드렸는데 그렇기 때문에 내부에서는 사설 IP를, 외부에서는 공인 IP를 사용하여 인터넷에 접근할 때 NAT가 유용하게 사용됩니다.

 NAT의 경우는 Static 방식과 Dynmaic 방식으로 나눠지는데 Static은 특정 IP를 1:1 형식으로 바꾸는 것을 말하고, Dynamic 방식은 특정 IP 대역 전부를 원하는 IP 대역으로 바꾸는 것을 말합니다.

 쉽게 생각하면 Static은 1:1, Dynamic은 n:m이라고 생각하시면 됩니다.

 여기서 NAT라는 것을 배우다보면 PAT(Port Address Translation)라는 개념도 나오게 되는데 PAT란 Dynamic NAT와 유사한 형태로 공인 IP 주소 1개에 여러 개의 사설 IP 주소를 매핑하는 것으로 구별을 위하여 포트번호를 사용합니다.

 즉 밖으로 나가는 공인 IP 주소가 하나만 존재합니다.

 

 자 그러면 NAT가 네트워크에서 어떤식으로 적용되는지 한번 보겠습니다.

 

 

 위처럼 네트워크를 구성하였는데 Router-A쪽이 내부를 가정하였고 Router-B 쪽이 외부를 가정하였습니다.

 참고로 내부 네트워크에서 사용하는 비공인 주소를 Inside Local Address라 하고 외부로 나갈 때의 주소를 Inside Global Address라고 합니다.

 위 네트워크에서는 192.168.0.0/24 네트워크의 호스트 .1, .2가 Inside Local Address가 됩니다.

 자 그러면 먼저 Static NAT부터 보도록 하겠습니다.

 

 우리의 목표는 PC 1번의 IP 192.168.0.1을 외부로 나갈 때 다른 IP로 바꾸는 것인데 여기서는 172.10.0.1이라고 가정하겠습니다.

 Router-A(config-if)# ip nat inside            

 Router-A(config-if)# ip nat outside

 위 두 명령어는 라우터를 기준으로 inside와 outside를 구별해주는 것으로 Fa 0/0 인터페이스에 접속하여 inside 명령을 Se 1/0 인터페이스에 접속해서 outside 명령을 써줍니다.

 

 그 후 스태틱 명령어를 써주면 되는데 명령어는

 Router(config)# ip nat inside source static [기존 ip] [바꿀 ip]입니다. 여기서 위에 네트워크를 적용시킨다면

 Router-A(config)# ip nat inside source static 192.168.0.1 172.10.0.1 처럼 됩니다.

 이렇게 입력하신 후 Router# show ip nat translations를 입력하시면 NAT 명령이 제대로 수행됐는지 알 수 있습니다.

 

 처음 입력한 명령은 ping 테스트를 하기전이고 두 번째는 ping 테스트를 수행한 후의 명령어입니다.

 어쨌거나 두 개 다 inside local인 192.168.0.1이 172.10.0.1이라는 inside global로 바뀐 것을 확인할 수 있습니다.

 

 그럼 이번에는 Dynamic NAT에 대하여 알아보겠습니다.

 Dynamic NAT는 3 가지 명령어를 기억하셔야 되는데

 Router(config)# access-list 1 permit [사설 IP 대역] [와일드카드 마스크]

 Router(config)# ip nat pool [영역 이름] [공인 시작 IP] [공인 끝 IP] netmask [서브넷 마스크] 

 Router(config)# ip nat inside source access-list [ACL 넘버] pool [영역 이름]

 이렇게 3가지입니다. 그럼 하나하나씩 보겠습니다.

 

 Router(config)# access-list 1 permit [사설 IP 대역] [와일드카드 마스크]는 access-list 시간에 배웠었습니다.

 위 네트워크로 예를 들자면

 Router-A(config)# access-list 1 permit 192.168.0.0 0.0.0.255 가 됩니다.

 192.168.0.0 네트워크를 허용하라는 뜻입니다.

 

 Router(config)# ip nat pool [영역 이름] [공인 시작 IP] [공인 끝 IP] netmask [서브넷 마스크] 

 위 명령은 내가 변경해줄 IP의 영역을 지정해주는 건데 스태틱은 하나만 지정했다면 다이내믹은 시작 IP의 마지막 IP를 지정하여 특정 영역의 IP를 바꿔줄 수 있습니다.

 Router(config)# ip nat pool light 172.10.0.10 172.10.0.254 netmask 255.255.255.0으로 지정해줄 수 있습니다.

 위 명령은 172.10.0.10 ~ 172.10.0.254에 해당하는 IP로 변환하여 외부로 나간다는 뜻입니다.

 

 Router(config)# ip nat inside source list [ACL 넘버] pool [영역 이름]

 위 명령은 insid로 지정한 인터페이스에서 들어오는 주소가 액세스 리스트 번호와 일치하다면 pool list에 정의된 주소로 변환하겠다는 뜻입니다.

 즉 inside 쪽에서 192.168.0.0 네트워크에 해당하는 IP가 들어왔을 때 access-list 번호가 서로 일치하다면 172.10.0.10 ~ 172.10.0.254의 해당하는 IP로 바꿔주어라 라는 뜻입니다.

 그 후 show ip nat translations 명령어를 입력해주시면 아까와 같이 IP가 바뀐 것을 확인하실 수 있습니다.

 참고로 NAT IP는 DHCP와 마찬가지로 시작 IP부터 순서대로 분배되며 기존에 정해놓은 IP(스태틱으로 정해놓은 IP)가 범위 안에 있을 경우 해당 IP는 제외하고 그다음 IP를 분배합니다.

 

 마지막으로 PAT입니다.

 PAT의 경우 Dynamic NAT와 유사하다고 했는데 명령어는 다음과 같습니다.

 Router(config)# access-list 1 permit [사설 IP 대역] [와일드카드 마스크]

 Router(config)# ip nat pool [영역 이름] [공인 시작 IP] [공인 끝 IP] netmask [서브넷 마스크] 

 Router(config)# ip nat inside source access-list [ACL 넘버] pool [영역 이름]

  

 위에 부분은 Dynamic NAT에 명령어입니다.

 여기서 우리는 PAT의 경우 공인 IP 주소가 하나라고 배웠습니다. 

 따라서 시작 IP와 끝 IP가 일치해야 합니다.

 그리고 마지막 명령인 ip nat inside source access-list [ACL 넘버] pool [영역 이름] 입력 후 overload라고 입력하시면 pat 명령이 완성됩니다.

 

 이상으로 NAT에 대하여 알아봤습니다.