Network Address Translation (NAT)
퍼블릭 서브넷에 있는 EC2 인스턴스와 프라이빗 서브넷에 있는 EC2 인스턴스가 각각 같은 가용 영역안에서 존재한다고 할 때 퍼블릭 아이피를 가지고 있는 퍼블릭 서브넷에 있는 EC2 인스턴스의 라우팅 테이블은 인터넷 게이트웨이와 연결되어 인터넷과 통신이 가능하지만 프라이빗 서브넷에 있는 EC2 인스턴스가 인터넷 통신을 하기 위해 라우팅 테이블에 인터넷 게이트웨이를 연결한다고 해도 퍼블릭 IP가 없기 때문에 인터넷 통신을 할 수 없게 됩니다. 이럴 때 사용하는 것이 NAT 디바이스(인스턴스)로 Private IP주소로 변환해주는 기능을 합니다.
기능적으로 보면 프라이빗 서브넷에 위치한 인스턴스가 퍼블릭 서브넷에 위치한 NAT 인스턴스로 Private IP(Private Link)를 사용하여 트래픽을 전달하게 되고 인터넷 게이트웨이가 NAT 인스턴스로부터 요청을 받을 때 Source IP(Private IP)를 퍼블릭 IP주소로 매핑해주게 됩니다.
Amazon EC2와 Amazon VPC는 IPv4 및 IPv6 주소 지정 프로토콜을 모두 지원합니다. Amazon VPC는 IPv4 주소 지정 프로토콜을 사용하도록 기본 설정되어 있으며 이 동작은 비활성화할 수 없습니다. VPC를 생성할 때 VPC에 IPv4 CIDR 블록(프라이빗 IPv4 주소)를 지정해야 합니다. IPv6 CIDR 블록을 VPC에 할당하고 해당 블록에 속한 IPv6 주소를 서브넷의 인스턴스에 할당할 수도 있습니다.
프라이빗 IPv4 주소
프라이빗 IPv4 주소는 인터넷을 통해 접근할 수 없는 IP입니다. 프라이빗 IPv4 주소는 동일 VPC에서 인스턴스 간의 통신을 위해 사용될 수 있 습니다. DHCP를 사용하여 개인 IPv4 주소를 인스턴스에 할당합니다.
VPC 서브넷은 다음 유형 중 하나일 수 있습니다.
- IPv4 전용 서브넷: 이러한 서브넷에는 IPv4 주소가 할당된 리소스만 생성할 수 있습니다.
- IPv6 전용 서브넷: 이러한 서브넷에는 IPv6 주소가 할당된 리소스만 생성할 수 있습니다.
- IPv4 및 IPv6 서브넷: 이러한 서브넷에는 IPv4 또는 IPv6 주소가 할당된 리소스만 생성할 수 있습니다.
NAT 인스턴스
- EC2 인스턴스에 NAT 기능을 설치
- 사용자가 직접 EC2에 NAT 기능을 구성해야 함 (보안그룹 적용)
- EC2에 문제가 생기면 NAT 기능이 동작하지 않음
- 많은 트래픽이 발생해 NAT 요청이 많으면 EC2의 CPU, Memory를 많이 사용하게 됨
- 인스턴스 유형이 지원하는 네트워크 대역폭에 따라 처리량이 다름
- NAT Gateway에 비해 더 많은 기능을 구현할 수 있음
- EC2 인스턴스이므로 Security Group 적용 가능
ex) Squid Proxy를 설정하여 특정 URL로만 액세스 제한 가능 (DNS Filtering)
NAT 인스턴스 사용시 EC2 ENI의 Source / Destination 확인
Source / Destination Check 비활성화
활성화가 되어 있으면 인스턴스가 보내거나 받는 트래픽이 원본 또는 대상이 아니므로 트래픽이 Drop되어 트래픽을 중개하는 NAT의 기능을 상실합니다.
https://github.com/ghdwlsgur/proxy-architecture
NAT Gateway
- NAT Instance처럼 EC2에 구성하지 않고 AWS에서 제공하고 관리하는 서비스
- 고가용성을 지원
- 최대 45Gbps까지 자동으로 대역폭이 확장
- NAT Gateway에 Security Group 적용 불가
- NAT Gateway 생성시 Elastic IP를 지정해야 하며 하나의 Elastic IP 주소만 NAT 게이트웨이에 연결 가능
- NAT Gateway는 포트
1024
-65535
를 사용하므로 NACL 인바운드 트래픽에서 해당 포트가 허용되어 있어야 트래픽 수신 가능 - AWS managed NAT, higher bandwidth, better availability, no admin
- Pay by the for usage and bandwidth
- NAT is created in a specific AZ, uses an EIP
- 5 Gbps of bandwidth with automatic scaling up to 45Gbps
- No security group to manage / required, NACL at subnet level applies to NAT Gateway
- Supported protocols: TCP, UDP, and ICMP
- Uses ports 1024-65535 for outbound connection1
NAT Gateway 문제 해결
포트 할당 오류로 인해 연결이 실패하거나 연결오류(ErrorPortAllocation)가 발생
- NAT Gateway는 최대 55,000 동시 접속 지원
- NAT Gateway를 추가해서 더 많은 접속 지원 가능
인스턴스에서 인터넷에 액세스할 수 있지만 특정 시간(예, 350초 후)에 연결이 끊어짐
- NAT 게이트웨이를 사용하는 연결이 350초 이상 유휴 상태인 경우 연결이 시간 초과됨
- EC2 인스턴스에서 350초 미만의 값으로 TCP Keepalive를 활성화
프라이빗 서브넷의 인스턴스에서 NAT 게이트웨이를 통해 특정 대상에 연결할 때 일부 TCP 연결은 성공하지만 일부는 실패하거나 시간이 초과됨
- 대상 엔드포인트가 조각난 TCP 패킷으로 응답하는 것이 원인
- NAT 게이트웨이는 조각난 패킷(fragmented packets)를 지원하지 않음