아웃바운드 연결에 SNAT(Source Network Address Translation) 사용
특정 시나리오에는 인터넷에 대한 아웃바운드 연결을 위한 가상 머신 또는 컴퓨팅 인스턴스가 필요합니다. 공용 부하 분산 장치의 프런트 엔드 IP를 사용하여 백 엔드 인스턴스에 대한 인터넷에 아웃바운드 연결을 제공할 수 있습니다. 이 구성은 SNAT(Source Network Address Translation)를 사용하여 가상 머신의 개인 IP를 부하 분산 장치의 공용 IP 주소로 변환합니다. SNAT는 백 엔드의 IP 주소를 부하 분산 프로그램의 공용 IP 주소에 매핑합니다. SNAT는 외부 원본이 백 엔드 인스턴스에 대해 직접적인 주소를 가질 수 없습니다.
Azure의 아웃바운드 연결 방법
다음 방법은 아웃바운드 연결을 사용하도록 설정하기 위해 Azure에서 가장 일반적으로 사용되는 방법입니다.
# | 메서드 | 포트 할당 유형 | 프로덕션 등급 | 등급 |
---|---|---|---|---|
1 | 아웃바운드 규칙을 통해 아웃바운드에 대한 부하 분산 장치의 프런트 엔드 IP 주소 사용 | 고정적, 명시적 | 예, 하지만 대규모는 아님 | 확인 |
2 | NAT 게이트웨이를 서브넷에 연결 | 동적, 명시적 | 예 | 가장 좋음 |
3 | 가상 머신에 공용 IP 할당 | 고정적, 명시적 | 예 | 확인 |
4 | 기본 아웃바운드 액세스 | 암시적 | 아니요 | 최악 |
1. 아웃바운드 규칙을 통한 아웃바운드에 대한 부하 분산 장치의 프런트 엔드 IP 주소 사용
아웃바운드 규칙을 사용하면 표준 SKU 공용 부하 분산 장치에 대한 SNAT(Source Network Address Translation)를 명시적으로 정의할 수 있습니다. 이 구성을 통해 백 엔드 인스턴스의 아웃바운드 연결에 공용 IP 또는 부하 분산 장치의 IP를 사용할 수 있습니다.
이 구성을 사용하면 다음을 수행할 수 있습니다.
IP 위장
허용 목록 단순화
배포할 공용 IP 리소스 수 줄이기
아웃바운드 규칙을 사용하여 아웃바운드 인터넷 연결을 완전하게 제어할 수 있습니다. 아웃바운드 규칙을 사용하면 수동 포트 할당을 통해 특정 요구에 맞게 이 기능을 확장하고 조정할 수 있습니다. 백 엔드 풀 크기 및 frontendIPConfigurations 수에 따라 SNAT 포트를 수동으로 할당하면 SNAT 소모를 방지할 수 있습니다.
"인스턴스당 포트" 또는 "백 엔드 인스턴스의 최대 수"로 SNAT 포트를 수동으로 할당할 수 있습니다. 백 엔드에 가상 머신이 있는 경우 최대 SNAT 포트 사용량을 얻기 위해 "인스턴스당 포트"로 포트를 할당하는 것이 좋습니다.
다음과 같이 인스턴스당 포트 수를 계산합니다.
프런트 엔드 IP 수 * 64K/백 엔드 인스턴스 수
백 엔드에 Virtual Machine Scale Sets가 있는 경우 포트를 "백 엔드 인스턴스의 최대 수"로 할당하는 것이 좋습니다. 허용되는 나머지 SNAT 포트보다 더 많은 VM이 백 엔드에 추가되는 경우 Virtual Machine Scale Sets의 스케일 아웃이 차단될 수 있거나 새 VM이 충분한 SNAT 포트를 수신하지 못합니다.
아웃바운드 규칙을 사용하여 여러 프런트 엔드 IP를 구성하는 경우 백 엔드 인스턴스에 구성된 프런트 엔드 IP 중 하나에서 아웃바운드 연결이 발생할 수 있습니다. 연결에 대해 선택할 수 있는 프런트 엔드 IP에 대한 종속성을 빌드하지 않는 것이 좋습니다.
아웃바운드 규칙에 대한 자세한 내용은 아웃바운드 규칙을 참조하세요.
2. NAT 게이트웨이를 서브넷에 연결
Azure NAT Gateway는 가상 네트워크에 대한 아웃바운드 전용 인터넷 연결을 단순화합니다. 서브넷에 구성되는 경우 모든 아웃바운드 연결에서 지정된 고정 공용 IP 주소를 사용합니다. 가상 머신에 직접 연결되는 부하 분산 장치 또는 공용 IP 주소가 없으면 아웃바운드 연결이 가능합니다. NAT Gateway는 완전 관리형이며 복원력이 높습니다.
아웃바운드 연결을 위한 가장 좋은 방법은 NAT 게이트웨이를 사용하는 것입니다. NAT 게이트웨이는 확장성이 뛰어나고 안정적이며 SNAT 포트 고갈과 동일한 문제를 해결하지는 않습니다.
NAT 게이트웨이는 부하 분산 장치, 인스턴스 수준 공용 IP 주소, Azure Firewall을 비롯한 다른 아웃바운드 연결 방법보다 우선합니다.
Azure NAT Gateway에 대한 자세한 내용은 Azure NAT Gateway를 참조하세요.
3. 가상 머신에 공용 IP 할당
연결 | 메서드 | IP 프로토콜 |
---|---|---|
VM NIC의 공용 IP | SNAT(Source Network Address Translation) 는 사용되지 않습니다. |
TCP(Transmission Control Protocol) UDP(User Datagram Protocol) ICMP(Internet Control Message Protocol) ESP(Encapsulating Security Payload) |
트래픽은 가상 머신의 공용 IP 주소(인스턴스 수준 IP)에서 요청하는 클라이언트에 반환됩니다.
Azure는 모든 아웃바운드 흐름에 대해 인스턴스 NIC의 IP 구성에 할당된 공용 IP를 사용합니다. 인스턴스에 있는 모든 삭제 포트를 사용할 수 있습니다. VM이 부하 분산되었는지는 중요하지 않습니다. 이 시나리오는 NAT Gateway를 제외하고 다른 시나리오보다 우선합니다.
VM에 할당된 공용 IP는 1:다가 아닌 1:1 관계이며 상태 비저장 1:1 NAT로 구현됩니다.
4. 기본 아웃바운드 액세스
Azure에서 명시적인 아웃 바운드 연결을 사용 하지 않고 가상 네트워크에서 생성 된 가상 컴퓨터에는 기본 아웃 바운드 공용 IP 주소가 할당 됩니다. 이 IP 주소는 리소스에서 인터넷으로의 아웃 바운드 연결을 사용하도록 설정합니다. 이 액세스를 기본 아웃 바운드 액세스라고 합니다. 이 액세스 방법은 안전하지 않고 IP 주소가 변경될 수 있으므로 권장 되지 않습니다.
Important
2025년 9월 30일에 새 배포에 대한 기본 아웃바운드 액세스가 사용 중지됩니다. 자세한 내용은 공식 공지를 참조하세요. 위의 옵션 1-3에 표시된 것처럼 명시적 형태의 연결을 사용하는 것이 좋습니다.
SNAT 포트란?
포트는 고유한 흐름을 유지하는 데 사용되는 고유 식별자 생성에 사용됩니다. 인터넷은 5개의 튜플을 사용하여 해당 고유성을 제공합니다.
인바운드 연결에 포트를 사용하는 경우 해당 포트의 인바운드 연결 요청에 대한 수신기가 존재합니다. 아웃바운드 연결에는 해당 포트를 사용할 수 없습니다. 아웃바운드 연결을 설정하려면 고유한 트래픽 흐름을 전달하고 유지할 수 있는 포트를 대상에 제공하는 임시 포트가 사용됩니다. 임시 포트가 SNAT에 사용되는 경우 이를 SNAT 포트라고 합니다.
정의에 따르면 모든 IP 주소에는 65,535개의 포트가 있습니다. 각 포트는 TCP(Transmission Control Protocol) 및 UDP(User Datagram Protocol)의 인바운드 또는 아웃바운드 연결에 사용할 수 있습니다. 공용 IP 주소를 부하 분산 장치에 프런트 엔드 IP로 추가하면 64,000개의 포트가 SNAT에 적합합니다.
부하 분산 또는 인바운드 NAT 규칙에 사용되는 각 포트는 사용 가능한 64,000개의 SNAT 포트에서 8개의 포트 범위를 사용합니다. 이렇게 하면 아웃바운드 연결에 동일한 프런트 엔드 IP가 사용되는 경우 SNAT에 적합한 포트 수가 줄어듭니다. 부하 분산 또는 인바운드 NAT 규칙에 사용되는 포트가 다른 규칙에서 사용하는 것과 동일한 8개 포트 블록에 있는 경우 규칙에는 추가 포트가 필요하지 않습니다.
참고 항목
Azure Virtual Network를 Azure Storage, Azure SQL, Azure Cosmos DB와 같은 지원되는 Azure PaaS 서비스에 연결해야 하는 경우 Azure Private Link를 사용하여 SNAT를 완전히 방지할 수 있습니다. Azure Private Link는 인터넷 대신 Azure 백본 네트워크를 통해 트래픽을 가상 네트워크에서 Azure 서비스로 보냅니다.
Private Link는 Azure 호스팅 서비스에 대한 프라이빗 액세스를 위해 서비스 엔드포인트를 대신하여 권장되는 옵션입니다. Private Link와 서비스 엔드포인트의 차이점에 대한 자세한 내용은 프라이빗 엔드포인트와 서비스 엔드포인트 비교를 참조하세요.
기본 SNAT는 어떻게 작동하나요?
VM이 아웃바운드 흐름을 만든 경우 Azure에서는 원본 IP 주소를 임시 IP 주소로 변환합니다. 이 변환은 SNAT를 통해 수행됩니다.
퍼블릭 부하 분산 장치를 통해 아웃바운드 규칙 없이 SNAT를 사용하는 경우 다음 기본 SNAT 포트 할당 테이블에 설명된 대로 SNAT 포트가 미리 할당됩니다.
기본 포트 할당 테이블
기본 포트 할당을 사용하도록 부하 분산 규칙을 선택하거나 아웃바운드 규칙이 “기본 아웃바운드 포트 수 사용”으로 구성된 경우 SNAT 포트는 기본적으로 백 엔드 풀 크기에 따라 할당됩니다. 백 엔드는 프런트 엔드 IP당 테이블에 정의된 포트 수를 최대 1024개의 포트로 받습니다.
예를 들어 백 엔드 풀에 100개의 VM과 하나의 프런트 엔드 IP만 있는 각 VM은 512개의 포트를 받습니다. 두 번째 프런트 엔드 IP가 추가되면 각 VM은 추가 512개의 포트를 받습니다. 즉, 각 VM에 총 1,024개의 포트가 할당됩니다. 따라서 세 번째 프런트 엔드 IP를 추가해도 할당된 SNAT 포트 수가 1024개 포트를 초과하지 않습니다.
일반적으로 기본 포트 할당이 적용될 때 제공되는 SNAT 포트 수는 풀 크기에 따라 제공되는 기본 SNAT 포트의 MIN(# * 풀과 연결된 프런트 엔드 IP 수, 1024)로 계산할 수 있습니다.
다음 표에서는 백 엔드 풀 크기에 따라 단일 프런트 엔드 IP에 대한 SNAT 포트 사전 할당을 보여 줍니다.
풀 크기(VM 인스턴스) | 기본 SNAT 포트 |
---|---|
1-50 | 1,024 |
51-100 | 512 |
101-200 | 256 |
201-400 | 128 |
401-800 | 64 |
801-1,000 | 32 |
포트 소모
동일한 대상 IP 및 대상 포트에 대한 모든 연결에서 SNAT 포트를 사용합니다. 이 연결은 백 엔드 인스턴스 또는 클라이언트 에서 서버로의 고유한 트래픽 흐름을 유지합니다. 해당 프로세스는 트래픽을 처리할 고유 포트를 서버에 제공합니다. 해당 프로세스가 없으면 클라이언트 머신은 패킷이 어떤 흐름에 속해 있는지 인식하지 못합니다.
다수의 브라우저가 https://www.microsoft.com으로 이동한다고 가정해 보세요. 구성은 다음과 같습니다.
대상 IP = 23.53.254.142
대상 포트 = 443
프로토콜 = TCP
반환 트래픽을 위한 SNAT 포트가 없으면 클라이언트가 쿼리 결과를 구분할 수 없습니다.
아웃바운드 연결이 폭주할 수 있습니다. 백 엔드 인스턴스에 충분한 포트가 할당되지 못할 수 있습니다. 응용 프로그램 내에서 연결 재사용 기능을 사용 합니다. 연결 재사용 기능이 없으면 SNAT 포트 고갈이 발생할 위험이 증가합니다.
Azure App Service와의 연결 풀링에 대한 자세한 내용은 Azure App Service에서 일시적인 아웃바운드 연결 오류 문제 해결을 참조하세요.
포트 고갈이 발생하면 대상 IP에 대한 새 아웃바운드 연결에 실패합니다. 포트가 사용 가능하게 되면 연결에 성공합니다. 고갈은 IP 주소에 있는 64,000개의 포트가 다수의 백 엔드 인스턴스에 퍼져 있을 때 발생합니다. SNAT 포트 고갈을 완화하는 방법에 대한 지침은 문제 해결 가이드를 참조하세요.
포트 재사용
TCP 연결의 경우 부하 분산 장치는 모든 대상 IP 및 포트에 대해 단일 SNAT 포트를 사용합니다. 동일한 대상 IP에 대한 연결의 경우 대상 포트가 다른 경우 단일 SNAT 포트를 다시 사용할 수 있습니다. 동일한 대상 IP 및 포트에 대한 연결이 이미 있는 경우 재사용할 수 없습니다.
UDP 연결의 경우 부하 분산 장치는 대상 포트에 관계없이 대상 IP당 하나의 SNAT 포트를 사용하는 포트 제한 원뿔 NAT 알고리즘을 사용합니다.
대상 IP 또는 포트가 다른 경우 재사용이 허용되는 경우 개별 포트를 무제한으로 다시 사용할 수 있습니다.
다음 표의 예제에서 프라이빗 IP 10.0.0.1을 사용하는 백 엔드 인스턴스는 대상 IP 23.53.254.142 및 26.108.254.155에 대한 TCP 연결을 만드는 반면 부하 분산 장치는 프런트 엔드 IP 주소 192.0.2.0으로 구성됩니다. 대상 IP는 다르기 때문에 여러 연결에 동일한 SNAT 포트를 다시 사용할 수 있습니다.
Flow | 원본 튜플 | SNAT 이후의 원본 튜플 | 대상 튜플 |
---|---|---|---|
1 | 10.0.0.1:80 | 192.0.2.0:1 | 23.53.254.142:80 |
2 | 10.0.0.1:80 | 192.0.2.0:1 | 26.108.254.155:80 |
제약 조건
새 패킷의 전송 없이 연결이 유휴 상태인 경우 포트는 4~120분 후에 해제됩니다.
이 임계값은 아웃바운드 규칙을 통해 구성할 수 있습니다.
각 IP 주소는 SNAT에 사용할 수 있는 64,000개의 포트를 제공합니다.
각 포트는 대상 IP 주소에 대한 TCP 및 UDP 연결 모두에 사용할 수 있습니다.
UDP SNAT 포트는 대상 포트가 고유한지와 관계없이 필요합니다. 하나의 대상 IP에 대한 모든 UDP 연결의 경우 하나의 UDP SNAT 포트만이 사용됩니다.
대상 포트가 서로 다른 경우 동일한 대상 IP에 대한 다수의 연결에 TCP SNAT 포트를 사용할 수 있습니다.
지정된 SNAT 포트에 백 엔드 인스턴스가 부족하면 SNAT 고갈이 발생합니다. 부하 분산 장치는 사용되지 않는 SNAT 포트를 계속 사용할 수 있습니다. 백 엔드 인스턴스가 사용하는 SNAT 포트가 지정된 SNAT 포트 개수를 초과할 경우 새 아웃바운드 연결을 설정할 수 없습니다.
아웃바운드가 VM의 NIC에서 인스턴스 수준 공용 IP를 통하지 않는 한 조각화된 패킷이 삭제됩니다.
네트워크 인터페이스의 보조 IPv4 구성은 아웃바운드 규칙에서 지원되지 않습니다. 보조 IPv4 구성에서 아웃바운드 연결의 경우 인스턴스 수준 공용 IP를 연결하거나 NAT 게이트웨이를 대신 활용합니다.
다음 단계
- SNAT 고갈로 인한 아웃바운드 연결 실패 문제 해결
- SNAT 메트릭을 검토하고 해당 메트릭을 필터링, 분할, 확인하는 올바른 방법을 숙지하세요.
- 기존 아웃바운드 연결 방법을 NAT 게이트웨이로 마이그레이션하는 방법 알아보기