NAT
Network Address Translation
프라이빗 IP를 퍼블릭 IP로 변환. VPC 외부 통신에 필요.
Network Address Translation
프라이빗 IP를 퍼블릭 IP로 변환. VPC 외부 통신에 필요.
NAT(Network Address Translation)는 사설 IP 주소를 공인 IP 주소로 변환해주는 네트워크 기술입니다. IPv4 주소 고갈 문제를 해결하고, 내부 네트워크를 외부로부터 보호하는 역할을 합니다. 하나의 공인 IP로 여러 내부 장치가 인터넷에 접속할 수 있게 해줍니다.
NAT는 1990년대 중반 RFC 1631로 처음 정의되었으며, 현재 거의 모든 가정용 라우터와 기업 네트워크, 클라우드 환경에서 사용됩니다. 특히 AWS VPC의 Private Subnet에서 인터넷 접근이 필요할 때 NAT Gateway가 필수적입니다.
NAT에는 SNAT(Source NAT)와 DNAT(Destination NAT)가 있습니다. SNAT는 내부에서 외부로 나가는 트래픽의 소스 IP를 변환하고, DNAT는 외부에서 들어오는 트래픽의 목적지 IP를 변환합니다. PAT(Port Address Translation)은 포트 번호까지 변환하여 하나의 공인 IP로 수천 개의 동시 연결을 처리합니다.
클라우드 환경에서 NAT Gateway는 고가용성(HA)과 자동 확장을 제공하며, 시간당 요금과 데이터 처리 요금이 부과됩니다. AWS NAT Gateway는 최대 45Gbps 대역폭을 지원하며, 각 AZ별로 배포하여 이중화하는 것이 권장됩니다.
# AWS NAT Gateway Terraform 구성
resource "aws_eip" "nat" {
domain = "vpc"
tags = {
Name = "nat-gateway-eip"
}
}
resource "aws_nat_gateway" "main" {
allocation_id = aws_eip.nat.id
subnet_id = aws_subnet.public.id
tags = {
Name = "main-nat-gateway"
}
depends_on = [aws_internet_gateway.main]
}
# Private 서브넷 라우팅 테이블
resource "aws_route_table" "private" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.main.id
}
tags = {
Name = "private-route-table"
}
}
# Private 서브넷 연결
resource "aws_route_table_association" "private" {
subnet_id = aws_subnet.private.id
route_table_id = aws_route_table.private.id
}
"Private Subnet의 EC2 인스턴스에서 외부 API를 호출해야 하니까 NAT Gateway가 필요합니다. 각 AZ마다 하나씩 배포해서 단일 장애점을 없애고, 데이터 전송 비용을 줄이려면 VPC Endpoint도 같이 검토해보죠."
"NAT Gateway와 NAT Instance의 차이점을 설명드리면, Gateway는 AWS 관리형으로 고가용성과 자동 확장을 제공하고, Instance는 EC2 기반이라 커스터마이징이 가능하지만 직접 관리해야 합니다. 비용 최적화가 중요하면 NAT Instance, 안정성이 중요하면 Gateway를 선택합니다."
"NAT Gateway 비용이 월 $300 넘게 나오는데, S3나 DynamoDB 접근은 VPC Endpoint로 바꾸면 NAT 트래픽을 줄일 수 있어요. Gateway Endpoint는 무료고, Interface Endpoint는 시간당 요금이 있지만 대량 데이터 전송보다는 싸거든요."
하나의 AZ에만 NAT Gateway를 두면 해당 AZ 장애 시 다른 AZ의 Private Subnet도 인터넷 접근이 불가능합니다. 크로스 AZ 트래픽 비용도 발생하므로 각 AZ에 NAT Gateway를 배포하세요.
NAT Gateway당 최대 55,000개의 동시 연결을 지원합니다. 대량의 아웃바운드 연결이 필요하면 여러 NAT Gateway로 분산하거나, 연결 풀링을 사용하세요.
S3, DynamoDB는 Gateway Endpoint(무료), ECR, CloudWatch 등은 Interface Endpoint를 사용하세요. NAT Gateway는 시간당 $0.045 + GB당 $0.045가 부과되므로 큰 트래픽은 다른 방법을 검토하세요.