아웃바운드 연결에 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 기본 아웃바운드 액세스 사용 암시적 아니요 최하위

Azure 아웃바운드 옵션의 다이어그램

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이 백 엔드에 추가되는 경우 가상 머신 확장 집합 크기 조정이 차단되거나 새 VM이 충분한 SNAT 포트를 수신하지 못할 수 있습니다.

아웃바운드 규칙에 대한 자세한 내용은 아웃바운드 규칙을 참조하세요.

2. NAT 게이트웨이를 서브넷에 연결

NAT 게이트웨이 및 공용 부하 분산 장치의 다이어그램

Virtual Network NAT는 가상 네트워크에 대한 아웃바운드 전용 인터넷 연결을 간소화합니다. 서브넷에 구성되는 경우 모든 아웃바운드 연결에서 지정된 고정 공용 IP 주소를 사용합니다. 가상 머신에 직접 연결되는 부하 분산 장치 또는 공용 IP 주소가 없으면 아웃바운드 연결이 가능합니다. NAT는 완전 관리형이며 복원력이 높습니다.

아웃바운드 연결을 위한 가장 좋은 방법은 NAT 게이트웨이를 사용하는 것입니다. NAT 게이트웨이는 확장성이 뛰어나고 안정적이며 SNAT 포트 고갈과 동일한 문제를 해결하지는 않습니다.

Azure Virtual Network NAT에 대한 자세한 내용은 Azure Virtual Network NAT란?을 참조하세요.

3. 가상 머신에 공용 IP 할당

인스턴스 수준 공용 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이 부하 분산되었는지는 중요하지 않습니다. 이 시나리오는 다른 시나리오에 우선합니다.

VM에 할당된 공용 IP는 1 대 다 가 아닌 1:1 관계이며 상태 비저장 1:1 NAT로 구현됩니다.

4. 기본 아웃바운드 액세스

기본 아웃바운드 액세스의 다이어그램

참고

이 방법은 포트 소모 위험을 추가하기 때문에 프로덕션 워크로드에는 권장되지 않습니다. 잠재적인 연결 오류를 방지하려면 프로덕션 워크로드에 이 방법을 사용하지 마십시오.

연결된 공용 IP가 없거나, 앞에 아웃바운드 규칙이 있는 부하 분산 장치가 없거나, 가상 머신 확장 집합의 유연한 오케스트레이션 모드의 일부가 아니거나, 해당 서브넷에 연결된 NAT 게이트웨이 리소스가 없는 모든 Azure 리소스에는 아웃바운드에 대해 최소한의 포트가 할당됩니다. 이 액세스는 기본 아웃바운드 액세스라고 하며 애플리케이션에 대한 아웃바운드 연결을 제공하는 최악의 방법입니다.

기본 아웃바운드 액세스의 다른 예는 다음과 같습니다.

  • 기본 SKU 부하 분산 장치 사용
  • Azure의 가상 머신(위에서 언급한 연결 없이). 이 경우 아웃바운드 연결은 기본 아웃바운드 액세스 IP에서 제공됩니다. 이 IP는 제어할 수 없는 Azure에 의해 할당된 동적 IP입니다. 기본 SNAT는 프로덕션 워크로드에 권장되지 않으며 연결 오류가 발생할 수 있습니다.
  • 아웃바운드 규칙이 없는 부하 분산 장치의 백 엔드 풀에 있는 가상 머신. 결과적으로 아웃바운드 및 인바운드에 대해 부하 분산 장치의 프런트 엔드 IP 주소를 사용하며 SNAT 포트 소모로 인해 연결 오류가 발생하기가 더 쉽습니다.

SNAT 포트란?

포트는 고유한 흐름을 유지하는 데 사용되는 고유 식별자 생성에 사용됩니다. 인터넷은 5개의 튜플을 사용하여 해당 고유성을 제공합니다.

인바운드 연결에 포트를 사용하는 경우 해당 포트의 인바운드 연결 요청에 대한 수신기가 존재합니다. 아웃바운드 연결에는 해당 포트를 사용할 수 없습니다. 아웃바운드 연결을 설정하려면 고유한 트래픽 흐름을 전달하고 유지할 수 있는 포트를 대상에 제공하는 임시 포트가 사용됩니다. 임시 포트가 SNAT에 사용되는 경우 이를 SNAT 포트라고 합니다.

정의에 따르면 모든 IP 주소에는 65,535개의 포트가 있습니다. 각 포트는 TCP(Transmission Control Protocol) 및 UDP(User Datagram Protocol)의 인바운드 또는 아웃바운드 연결에 사용할 수 있습니다. 공용 IP 주소를 부하 분산 장치에 프런트 엔드 IP로 추가하면 64,000개의 포트가 SNAT에 적합합니다. 프런트 엔드 IP로 추가되는 모든 공용 IP를 할당할 수 있지만 프런트 엔드 IP는 한 번에 하나 씩 사용됩니다. 예를 들어 두 백 엔드 인스턴스가 각각 64,000개의 포트를 할당하고 프런트 엔드 IP 두 개에 대한 액세스 권한이 있는 경우, 두 백 엔드 인스턴스는 64,000개 포트가 모두 소진될 때까지 첫 번째 프런트 엔드 IP의 포트를 소비합니다.

부하 분산 또는 인바운드 NAT 규칙에 사용되는 각 포트는 사용 가능한 64,000개의 SNAT 포트에서 8개의 포트 범위를 사용합니다. 이렇게 하면 아웃바운드 연결에 동일한 프런트 엔드 IP가 사용되는 경우 SNAT에 적합한 포트 수가 줄어듭니다. 부하 분산 또는 인바운드 NAT 규칙에 사용되는 포트가 다른 규칙에서 사용하는 것과 동일한 8개 포트 블록에 있는 경우 추가 포트가 필요하지 않습니다.

기본 SNAT는 어떻게 작동하나요?

VM이 아웃바운드 흐름을 만든 경우 Azure에서는 원본 IP 주소를 임시 IP 주소로 변환합니다. 이 변환은 SNAT를 통해 수행됩니다.

공용 부하 분산 장치를 통해 아웃바운드 규칙 없이 SNAT를 사용하는 경우 아래 기본 SNAT 포트 할당 테이블에 설명된 바와 같이 SNAT 포트가 미리 할당됩니다.

기본 포트 할당 테이블

다음 다음 표는 백엔드 풀 크기에 대한 SNAT 포트 사전 할당을 보여줍니다.

풀 크기(VM 인스턴스) IP 구성 별 기본 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 포트를 사용합니다. 이렇게 다용도로 사용하면 동일한 SNAT 포트를 사용하여 동일한 대상 IP에 다수의 연결이 사용 설정됩니다. 연결이 서로 다른 대상 포트에 연결되지 않은 경우 다용도 사용이 제한됩니다.

UDP 연결의 경우 부하 분산 장치는 대상 포트에 관계 없이 대상 IP당 하나의 SNAT 포트를 사용하는 포트 제한 원뿔형 NAT 알고리즘을 사용합니다.

포트는 연결에 무제한으로 재사용되지만 대상 IP 또는 포트가 서로 다른 경우에만 재사용됩니다.

제약 조건

  • 새 패킷의 전송 없이 연결이 유휴 상태인 경우 포트는 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를 통하지 않는 한 조각화된 패킷이 삭제됩니다.

  • 네트워크 인터페이스의 보조 IP 구성은 부하 분산 장치를 통해 아웃바운드 통신(공용 IP가 연결되지 않는 한)을 제공하지 않습니다.

다음 단계