TroubleShooting

[Troubleshoot] NAT ErrorPortAllocation 에러

[앙금빵] 2024. 9. 8.

개요

트래픽 급증으로 NAT 지표에서 ErrorPortAllocation 에러를 경험하였다. 이에 대하여 조치 방안들에 대한 정리글이다.
 

본문

ErrorPortAllocation이란?

(1) IPv4 주소에서 최대 65,535 개의 소스 포트를 사용할 수 있다. 그러나 NAT Gateway 1개당 할당된 동시 연결에서는 55,000개의 포트만 사용할 수 있다. 나머지 약 10,000개의 포트는 AWS의 내부 운영 및 관리 목적으로 예약되어 있어 사용하지 못하도록 내부적으로 설계되어져 있다. 

여기서 최대 65,535인 이유에 대해 알아보자.
- TCP/UDP에서는 16비트 포트 번호를 사용하며 65,535 숫자는 16비트(2바이트)로 표현할 수 있는 값의 최댓값이다.
(2의 16승 - 1, 0번포트는 미사용되기 때문에 -1을 한다.)

- 16비트 사용하는 이유는 이는 효율성에 기반한 역사적인 결정에 기반한다. TCP/IP 프로토콜이 개발될 당시, 16비트는 충분히 큰 주소 공간을 제공하면서도 당시의 컴퓨팅 리소스에 부담을 주지 않는 적절한 크기였다고 한다.

 
(2) 일반적으로 ErrorPortAllocation 지표는 동시 연결 한도를 초과할 때 발생한다. 이 커넥션 한도에 도달하면 NAT 게이트웨이는 더 이상 새로운 연결을 위한 포트를 할당할 수 없으며, 이때 ErrorPortAllocation 메트릭의 카운트가 증가하게 된다.
 
(3) 이 외에도 Source Port 재사용 지연시간 및 비활성 연결 수의 존재 이유로도 발생한다.

재사용 지연시간: NAT 게이트웨이는 사용한 소스 포트를 일정 시간 동안 재사용하지 않는 대기시간이 존재한다. 이러한 특성으로부터 NAT 여전히 연결이 열린 상태를 유지하게 되며 가용 포트 수를 점유한다.

비활성 연결 수: 연결이 종료되지 않았으나 트래픽이 흐르지 않는 Connection이다.

 

해결방안

방안 1. 보조 IPv4 주소 추가
각 NAT 게이트웨이에 최대 7개의 보조 IPv4 주소를 추가할 수 있다. 각 보조 IP는 추가로 55,000개의 연결을 제공하며, 한 NAT 게이트웨이에서 최대 440,000개의 동시 연결(55,000 x 8 IPv4 주소)을 처리할 수 있다.
 
방안 2. 가용영역별 여러 NAT 게이트웨이 사용
각 AZ 별로 NAT 게이트웨이가 가용영역별로 분산 배치가 되지 않는 경우, 분산 배치를 통해 해결을 모색할 수 있다. 또한 AWS에서는 각 가용영역마다  NAT 게이트웨이를 설정을 권장한다. 각 NAT 게이트웨이는 55,000개의 연결을 처리할 수 있으므로, 가용 영역에 추가되는 NAT 게이트별로 55,000개의 리밋이 추가된다.
 
아래 표는 보조 IPv4 주소를 추가하는 방식과 가용영역별 NAT 게이트웨이를 추가하는 방식에 대한 차이점을 비교한 내용이다.

항목 보조 IPv4 추가 NAT 게이트웨이 추가
IP 추가 자체 비용 없음 추가 NAT 게이트웨이마다 시간당 요금 발생
NAT 게이트웨이 시간당 비용 기존 NAT 게이트웨이 시간당 요금만 발생 NAT 게이트웨이 수에 따라 시간당 요금 증가
데이터 처리 비용 NAT 게이트웨이 수량 변화가 없기에
트래픽 처리 요금은 동일
NAT 게이트웨이마다 처리되는 트래픽 추가 비용 발생

 
검토사항 1. AWS PrivateLink 및 VPC Endpoints 사용
Amazon S3, DynamoDB와 같이 AWS 내부 통신은 PrivateLinkVPC Endpoint를 사용하여 NAT 게이트웨이를 거치지 않도록 통신하도록 구성하는 것이다. 이를 통해 NAT 게이트웨이에 점유되는 포트 수를 줄일 수 있다.
 
검토사항 2. Idle 연결 정리
NAT 게이트웨이에서 IdleTimeoutCount 메트릭을 제공한다. 이를 통해 비활성 연결을 파악할 수 있다.

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/metrics-dimensions-nat-gateway.html

이를 바탕으로 애플리케이션이 불필요한 비활성 연결을 닫도록 설정하는 것도 NAT 게이트웨이 포트 할당 문제를 완화하는데 도움이 될 수 있다.
 


Reference

https://repost.aws/knowledge-center/vpc-resolve-port-allocation-errors

댓글