본문 바로가기
개발 - Coding/Infra

네트워크 영역에서의 NAT와 AWS NAT Gateway: 1편

by dev_jinyeong 2023. 6. 16.

클라우드 환경에서 인프라를 프로비저닝 할 때, 처음 해보면 어렵고 헷갈리는 개념이 있는데, 바로 NAT Gateway입니다.

사람마다 다를 수 있겠지만 초심자 입장에서 이 개념이 어려운 이유는 크게 두 가지입니다.

  1. private, public ip(private, public subnet)에 대한 이해 부족
  2. NAT 기술에 대한 이해 부족

개인적으로 어려웠던 부분을 어떻게 이해했는지 소개하며 기술의 배경부터 원리, 클라우드 환경에서의 NAT Gateway 개념까지 소개해보겠습니다.

NAT가 무엇이고 왜 필요한가?

NAT란 Network Address Translation의 약자로 네트워크 주소 변환을 의미합니다.

RFC2663에 따르면 NAT는 다음과 같습니다.

Network Address Translation is a method by which IP addresses are mapped from one realm to another, in an attempt to provide transparent routing to hosts.
네트워크 주소 변환은 호스트에 투명한 라우팅을 제공하기 위해 한 영역에서 다른 영역으로 IP 주소를 매핑하는 방법입니다.

https://datatracker.ietf.org/doc/html/rfc2663

 

NAT는 네트워크 통신 중에 라우팅에 투명성을 제공하기 위해서 한 영역에서 다른 영역으로 IP 주소를 매핑해주는 것입니다.

 

라우팅에 투명성을 제공한다는 것이 무엇일까요?

 

컴퓨터 공학에서 투명성이란, 실제로는 존재하지만 존재하지 않는 것처럼 사용할 수 있는 것을 의미하곤 합니다.

마치 분산 DB를 이용하는 사용자가 DB가 분산되어 있다는 것을 느낄 수 없듯이 네트워크 통신 중에도 호스트는 다른 영역으로 트래픽이 넘어간다는 것을 알 수 없는 것입니다.

 

한 영역에서 다른 영역으로 넘어간다는 것은 무엇일까요?

 

NAT의 정의에서 그것이 어떤 영역인지를 명시하고 있지 않지만, 일반적으로 NAT는 private ➡️ public 또는 public ➡️ private 영역으로 이동할 때 사용됩니다.

그것은 네트워크 영역이 private과 public 영역으로 나누어져 있기 때문입니다.

여기서 왜 네트워크 영역이 private과 public 영역으로 나누어지는지 알아보겠습니다.

왜 private 영역이 필요한가?

그것은 IPv4 주소의 고갈 문제 때문입니다.

IPv4 주소는 32bit로 구성되어 있으므로 가짓수로는 약 43억개의 주소를 감당할 수 있습니다.

IPv4 체계를 살펴보면 알 수 있지만 특별한 용도로 예약되어 있는 주소들이 있으므로 실제로는 그것보다는 조금 더 적게 사용 가능합니다.

인터넷이 대중화되면서 많은 기기들이 IP를 필요로 하게 되었고, 클래스 기반의 분배 전략으로는 충분하지 않게 되었습니다.

IPv4 주소의 고갈을 극복하기 위해 여러 전략이 세워지게 되었고, 그 중 단기 전략이 서브네팅, 중기 전략이 NAT와 사설 IP 체계입니다.

 

서브네팅이란 IP 대역폭을 세분화하여 나눌 수 있게 한 것을 의미합니다.

서브네팅을 이용하면 IP 대역폭을 효율적으로 분배할 수 있기 때문에 단기적으로 IP 주소 소모를 줄이는 효과가 있습니다.

 

NAT와 사설 IP 체계는 IP를 public과 private ip로 나누고 인터넷에서 서로를 식별하는 데 사용하는 public ip를 대표 ip로 삼고 내부 네트워크에서는 private ip를 분배받는 체계와 이를 뒷받침하는 변환 기술입니다.

이를 이용하면 네트워크에 1개의 public ip만 있어도 이를 이용하여 여러 기기가 private ip를 나눠받고 인터넷을 사용할 수 있기 때문에 public ip의 고갈 현상이 해결됩니다.

ip는 그냥 예시입니다.

그런데 여기에는 문제가 있습니다.

네트워크 외부에서는 내부의 ip 주소를 알 수 없고, 반대도 마찬가지입니다.

그런데 네트워크 트래픽은 출발지와 도착지를 알아야 신호를 주고받을 수 있습니다.

그럼 그냥 private ip를 서로 알려주면 안 될까요?


네, 안 됩니다. 또 다른 문제가 있는데, 아까 IPv4의 주소가 고갈되었다는 이야기가 있었습니다.

그런데 private ip를 이용하여 이를 해결했다는 말은, 네트워크 안의 private ip의 유일성은 네트워크 안에서만 보장된다는 뜻입니다.

예를 들어서 네트워크 안에서 0.0.0.1의 private ip를 사용하고 있을 때, 다른 네트워크에서도 똑같은 일이 벌어지고 있을 수 있다는 것입니다.

그렇다면 네트워크끼리 통신할 때 private 서로 같은 ip를 가진 기기가 두 개 생기는 경우도 발생할 수 있을 것입니다.

이 경우에는 네트워크 프로토콜이 제대로 동작하지 않을 것입니다.

 

이를 해결하기 위해서 NAT가 필요합니다.

NAT가 private ip와 public ip를 변환해줍니다.

네트워크 트래픽에는 출발지와 도착지가 ip로 명시되어 있습니다.

그리고 NAT를 담당하는 네트워크 하드웨어 기기에는 NAT 테이블이 있어 출발지와 도착지의 ip와 포트 구성을 보고 적절하게 private, public ip를 변환합니다.

 

이를 통해서 우리는 상대 네트워크 내부의 ip 구조를 알지 못해도 원하는 기기로 정보를 보낼 수 있으며, 반대로 내부 네트워크에서 외부 인터넷에 public ip를 출발지로 설정하여 다시 정보를 전달받을 수 있습니다.

이러한 기술을 이용해 마치 private ip를 이용하면서도 public ip를 이용하는 것처럼 투명성을 가지고 인터넷을 이용할 수 있는 것입니다.