NAT는 Network Address Translation의 약자이며 패킷의 IP 주소, 포트 등을 변환하는 기술을 의미한다.
NAT는 주로 Private Network가 외부의 Public Network와 통신하기 위해 사용한다.
각 단체 또는 기업이 할당 받을 수 있는 IP는 한계가 존재하므로 단체의 구성원 모두에게 Public IP를 부여하는 것은 사실상 불가능하다.
따라서 Private Network를 사용하게 되는데, 이 Private Network의 구성원이 외부 인터넷과 통신하고 싶다면 외부에서 식별 가능한 IP가 필요하다.
이 상황에 NAT가 등장하며, 내부 구성원이 외부와 통신할 때 패킷에 기록된 IP와 포트 번호를 변환하여 외부에서 해당 단체를 식별할 수 있는 Public IP로 변환한다.
AWS에서 NAT를 사용하는 방법은 두가지가 존재한다.
몇 가지 차이점이 존재하고, 게이트웨이가 더 고 가용성을 보장하는 서비스이기 때문에 게이트웨이 사용을 권한다.
NAT는 Private 서브넷에서 인터넷 또는 다른 AWS 서비스를 사용하기 위해 사용한다.
그러나 프라이빗 서브넷의 인스턴스로 초기 접근하는 인터넷 트래픽은 방어한다.
만약 인스턴스에서 출발한 트래픽의 Response로서 인터넷에서 접근한다면, 허용한다.
AWS의 인터넷 게이트웨이는 VPC와 인터넷이 통신할 수 있도록 도와주는 VPC 컴포넌트이다.
특이한 점은 인터넷 게이트웨이는 단순히 인터넷과의 통로 역할을 할 뿐 아니라 NAT의 역할도 수행한다.
위의 그림을 살펴보면 한 EC2 인스턴스가 Private IP와 Elastic IP를 둘 다 소유하고 있다.
VPC(10.0.0.0/16) 내부에서는 Private IP인 10.0.0.6으로 인식되지만, 외부에서 해당 인스턴스를 특정할 때는 Elastic IP인 198.51.100.2로 인식한다.
그러나 외부에서 198.51.100.2 라는 IP를 목적지로 통신이 실행되면, IGW를 거치면서 198.51.100.2 라는 목적지 IP가 10.0.0.6 이라는 사설 IP로 목적지 IP가 변경된다.
왜냐하면 VPC는 10.0.0.0/16 대역의 사설 대역을 사용하고 있으므로, 그 내부에서는 인스턴스를 사설 IP로서 구별하기 때문이다.
그래서 Internet Gateway가 하는 역할을 정리하자면