사설 서브넷의 서버가 외부(플랫폼 인증·결제·외부 API)로 나가는 연결은 NAT 게이트웨이가 주소와 포트를 바꿔 내보냅니다. 같은 목적지로 가는 동시 연결이 게이트웨이의 포트 한도를 넘으면 새 연결이 실패합니다.
왜 서버들이 플랫폼 인증·결제처럼 같은 외부 주소로 짧은 연결을 많이 열거나 연결을 오래 열어 둠 → 그러면 NAT 게이트웨이가 그 목적지에 쓸 원본 포트를 더 할당하지 못해 새 연결이 실패함 → 화면에서는 게임 안은 멀쩡한데 로그인·결제·보상 지급처럼 외부를 부르는 기능만 실패하거나 늦어짐(접속 불가·무한 로딩, 씹힘·롤백)
외부 API는 연결을 재사용(HTTP keep-alive, 커넥션 풀)하고 요청마다 새 연결을 열지 않기, 풀에 남겨 둔 유휴 연결은 NAT 유휴 타임아웃(AWS 350초)보다 짧은 간격으로 keepalive를 보내거나 먼저 닫기, 실패하면 재시도 간격을 늘려 가며 무작위로 분산, 외부 호출별 실패율·지연 기록.
인프라팀 할 일
NAT 게이트웨이에 IP 주소 추가(AWS 공인 NAT 게이트웨이는 탄력적 IP를 기본 2개까지만 붙일 수 있어 그 이상은 할당량 상향 요청), 가용 영역·서브넷별로 게이트웨이 나누기, 포트 할당 실패 지표(AWS ErrorPortAllocation, Azure SNAT Connection Count의 Failed, Google Cloud dropped_sent_packets_count의 OUT_OF_RESOURCES) 경보, Google Cloud NAT는 VM당 최소 포트 수를 늘리거나 동적 포트 할당 사용.
수치 감각
AWS NAT 게이트웨이는 IP 주소 하나로 같은 목적지(IP·포트·프로토콜)에 동시 연결 5만 5천 개까지 열 수 있고, IP를 8개까지 붙여 늘립니다. 350초 동안 조용한 연결은 지우고 그 뒤 이 연결로 보내는 패킷에는 RST를 돌려줍니다. Azure NAT Gateway는 공인 IP 하나당 SNAT 포트 64,512개(IP 최대 16개)입니다. Google Cloud NAT는 NAT IP 하나당 64,512포트를 VM마다 나눠 줍니다. VM당 최소 포트 기본값이 64개(정적 할당)라서 기본 설정이면 VM 하나가 같은 목적지로 동시에 열 수 있는 연결이 대개 64개로 묶입니다.
그래프에서는
한도에 닿아 평평해짐 · NAT 게이트웨이 동시 연결 수, 포트 할당 실패 수
확인할 곳
AWS는 CloudWatch의 NAT 게이트웨이 지표 ErrorPortAllocation·ActiveConnectionCount·PacketsDropCount(Azure는 SNAT Connection Count를 Failed 상태로 거른 값과 Dropped Packets, Google Cloud는 dropped_sent_packets_count의 reason OUT_OF_RESOURCES)를 게임 서버의 외부 호출 실패 시각과 나란히 봄
이러면 맞음
외부 호출이 실패한 시각에 ErrorPortAllocation(Azure는 Failed 상태의 SNAT Connection Count, Google Cloud는 OUT_OF_RESOURCES 폐기)이 0보다 커지고, 실패가 인증·결제 서버처럼 연결이 많이 몰리는 한두 목적지로 가는 호출에 모임
이러면 아님
포트 할당 실패가 0인데 게임 서버의 connect가 EADDRNOTAVAIL로 실패하고 TIME_WAIT가 임시 포트 범위에 가까우면 “서버 간 연결의 임시 포트 고갈”. 연결은 되는데 응답만 느리면 “외부 서비스 의존”
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
서버 한 대의 임시 포트가 바닥나는 “서버 간 연결의 임시 포트 고갈”과 달리, 이 한도는 NAT 게이트웨이에 걸리고 게이트웨이 뒤의 서버들이 함께 씁니다(Google Cloud NAT는 VM마다 나눠 줌). 서버 쪽 TIME_WAIT와 임시 포트 범위는 여유가 있는데도 외부 호출만 실패하면 이쪽입니다. 닫힌 연결의 포트도 곧바로 같은 목적지에 다시 쓰이지 않아(Azure는 쿨다운, Google Cloud는 TIME_WAIT 동안 사용 불가) 짧은 연결을 반복할수록 한도에 빨리 닿습니다.
출처
NAT gateway basicsAWS IPv4 주소 하나당 같은 목적지(목적지 IP·포트·프로토콜)로 동시 연결 5만 5천 개, IP를 8개까지 붙여 늘림(공인 NAT 게이트웨이의 탄력적 IP는 기본 2개, 할당량 상향 요청으로 늘림), 대역폭은 5Gbps에서 100Gbps까지, 처리량은 초당 100만에서 1,000만 패킷까지 자동으로 늘고 그 한도를 넘으면 패킷을 버림
NAT gateway metrics and dimensionsAWS ErrorPortAllocation: 원본 포트를 할당하지 못한 횟수(0보다 크면 동시 연결 과다), ActiveConnectionCount, IdleTimeoutCount(350초 유휴로 정리된 연결), PacketsDropCount
Troubleshoot NAT gatewaysAWS 350초 유휴면 연결이 만료되고 이어서 보내면 RST를 돌려줌, 350초보다 짧은 keepalive 권장, 연결 한도에 닿으면 가용 영역별 게이트웨이·IP 추가·연결 수 줄이기
IP addresses and portsGoogle Cloud NAT IP 하나당 TCP·UDP 각각 64,512포트, VM당 최소 포트 기본 64(정적 할당)·32(동적 할당), VM에 예약된 포트 수가 같은 목적지로 가는 동시 연결 수를 제한, 닫힌 연결은 TIME_WAIT 동안 못 씀
Logs and metricsGoogle Cloud dropped_sent_packets_count의 reason OUT_OF_RESOURCES: NAT IP나 포트가 모자라 버린 패킷