Cloud NAT 규칙

이 페이지에서는 Public NAT용 Cloud NAT 규칙을 간략하게 설명합니다. 이러한 규칙을 사용하면 Cloud NAT를 사용하여 인터넷에 연결하는 방법을 정의할 수 있습니다.

Public NAT용 Cloud NAT 규칙은 소스(프리뷰) 또는 대상 주소를 기반으로 소스 네트워크 주소 변환(SNAT)을 지원합니다.

NAT 규칙

기본적으로 Public NAT용 Cloud NAT 게이트웨이를 구성하면 해당 NAT 게이트웨이에서 변환된 패킷은 같은 NAT IP 주소 집합을 사용하여 모든 인터넷 주소에 연결합니다. Cloud NAT에서 변환하는 패킷을 더 세밀하게 제어하려면 NAT 규칙을 추가하면 됩니다.

NAT 규칙은 일치 조건 및 해당 작업을 정의합니다. NAT 규칙을 지정하면 각 패킷이 각 NAT 규칙과 일치합니다. 패킷이 규칙에 설정된 조건과 일치하는 경우 일치에 따른 작업이 수행됩니다.

Public NAT의 NAT 규칙은 소스 및 대상 주소 일치를 모두 지원합니다.

  • 소스 기반 규칙(프리뷰)에서 패킷은 소스 IP 주소로 일치됩니다. IPv4 소스 주소만 지원됩니다.
  • 대상 기반 규칙에서는 패킷이 대상 IP 주소로 일치됩니다. IPv4 대상 주소만 지원됩니다.

단일 NAT 규칙에서 소스 기반 조건과 대상 기반 조건을 결합할 수 없습니다. 자세한 내용은 NAT 규칙 사양을 참조하세요.

Cloud NAT 규칙 구성 예시

이 섹션에서는 소스 및 대상 기반 NAT 규칙의 구성 예시를 제공합니다.

소스 기반 규칙

다음 예시에서는 소스 기반 NAT 규칙을 사용하는 방법을 보여줍니다.

기본적으로 서브넷에서 IPv4 트래픽에 대한 Cloud NAT 게이트웨이가 구성되면 게이트웨이는 해당 서브넷에 있는 모든 VM 인스턴스의 기본 내부 IP 주소와 별칭 IP 범위에 대한 NAT를 제공합니다. 소스 기반 NAT 규칙을 사용하여 IP 전달이 사용 설정된 VM 인스턴스에 대한 NAT를 구성할 수도 있습니다.

이 예시에서는 Cloud NAT가 Subnet A에 구성됩니다. 서브넷에서 기본 내부 IP 주소가 10.1.1.2이고 별칭 IP 범위가 10.2.1.0/24인 VM 인스턴스가 트래픽을 인터넷으로 전송합니다. VM 인스턴스에 대한 다음 요구사항을 고려하세요.

  • 패킷이 IP 범위 192.168.1.0/24에서 시작되는 경우 VM은 NAT IP 주소 203.0.113.10을 사용하여 트래픽을 인터넷 대상으로 보내야 합니다.
  • 패킷이 IP 범위 192.168.2.0/24에서 시작되는 경우 VM은 NAT IP 주소 203.0.113.20을 사용하여 트래픽을 인터넷 대상으로 보내야 합니다.
  • 패킷이 IP 주소 10.1.1.2 또는 IP 범위 10.2.1.0/24에서 시작되는 경우 VM은 NAT IP 주소 203.0.113.30을 사용하여 트래픽을 인터넷 대상으로 보내야 합니다.
소스 기반 규칙이 있는 Cloud NAT 구성
소스 기반 규칙이 두 개 있는 Cloud NAT 구성(확대하려면 클릭)

이러한 요구사항을 충족하려면 전달된 패킷에 대한 소스 기반 NAT 규칙 2개와 VM 인스턴스의 기본 내부 IP 주소와 별칭 IP 범위에서 온 패킷에 대한 기본 규칙을 만듭니다.

  • 소스 기반 규칙 1: 소스 주소가 192.168.1.0/24이면 203.0.113.10을 사용하여 트래픽을 인터넷으로 보냅니다.
  • 소스 기반 규칙 2: 소스 주소가 192.168.2.0/24이면 203.0.113.20을 사용하여 트래픽을 인터넷으로 보냅니다.
  • 기본 규칙: 다른 모든 패킷의 경우 203.0.113.30을 사용하여 트래픽을 인터넷으로 보냅니다.

VM 인스턴스에서 전달한 패킷의 소스 주소가 규칙 1 또는 규칙 2와 일치하지 않으면 패킷이 삭제됩니다.

소스 기반 NAT 규칙을 사용하는 방법에 대한 또 다른 예시는 Cloud WAN 자세히 들여다보기: 차별화된 네트워킹 기능 자세히 살펴보기를 참조하세요.

대상 기반 규칙

다음 예시에서는 대상이 IP 주소 몇 개에서만 액세스를 허용하는 경우에 NAT 규칙을 사용하는 방법을 보여줍니다. 비공개 서브넷의 Google Cloud VM에서 이러한 대상으로 가는 트래픽에는 허용된 IP 주소만 사용하여 SNAT 변환을 적용하는 것이 좋습니다. 다른 대상에는 이러한 IP 주소를 사용하지 않는 것이 좋습니다.

VPC 네트워크 test의 리전 A에 있는 Subnet-1(10.10.10.0/24)의 VM에 대해 다음 요구사항을 고려하세요.

  • VM은 NAT IP 주소 203.0.113.20을 사용하여 트래픽을 198.51.100.20/30 대상으로 보내야 합니다.
  • VM은 NAT IP 주소 203.0.113.30을 사용하여 트래픽을 대상 198.51.100.30 또는 198.51.100.31으로 보내야 합니다.
  • VM에서 다른 인터넷 대상으로 트래픽을 전송하려면 NAT IP 주소 203.0.113.40을 사용해야 합니다.

또한 이 VPC 네트워크는 동일한 리전에 두 개의 추가 서브넷을 포함합니다. 이러한 VM은 NAT IP 주소 203.0.113.10을 사용하여 모든 대상으로 트래픽을 보내야 합니다.

Cloud NAT 게이트웨이가 2개 있는 Cloud NAT 구성
2개의 Cloud NAT 게이트웨이가 있는 Cloud NAT 구성(확대하려면 클릭)

이 예시에서는 NAT 규칙을 사용할 수 있지만 Subnet-1(10.10.10.0/24)에는 다른 서브넷과 다른 NAT 규칙이 있으므로 두 개의 NAT 게이트웨이가 필요합니다. 이 구성을 만들려면 다음 단계를 수행하세요.

  1. Subnet-1에 NAT IP 주소 203.0.113.40으로 Cloud NAT Gateway 1이라는 게이트웨이를 만들고 다음 규칙을 추가합니다.
    1. Cloud NAT Gateway 1의 NAT 규칙 1: 대상이 198.51.100.20/30이면 NAT에 203.0.113.20을 사용합니다.
    2. Cloud NAT Gateway 1의 NAT 규칙 2: 대상이 198.51.100.30 또는 198.51.100.31이면 NAT에 203.0.113.30을 사용합니다.
  2. 리전의 다른 서브넷에 Cloud NAT Gateway 2라는 게이트웨이를 만들고 NAT IP 주소를 203.0.113.10으로 할당합니다. 이 단계에서는 NAT 규칙이 필요하지 않습니다.

NAT 규칙 사양

  • Cloud NAT는 소스 및 대상 기반 규칙을 지원합니다. 각 규칙은 소스 또는 대상 주소를 기반으로 하는(둘 다는 아님) 조건을 정의합니다.
  • 규칙 우선순위는 0(가장 높은 우선순위)부터 65,000(가장 낮은 우선순위)까지 NAT 규칙을 고유하게 식별합니다. 두 규칙의 우선순위가 같을 수는 없습니다.
  • 각 NAT 구성에는 기본 규칙이 포함됩니다.
    • 동일한 NAT 구성에서 일치하는 다른 NAT 규칙이 없는 경우 기본 규칙이 적용됩니다.
    • 기본 규칙의 규칙 우선순위는 65001입니다.
    • 소스 기반 규칙과 대상 기반 규칙 모두에서 기본 규칙의 IP CIDR 범위는 0.0.0.0/0입니다.
    • 전달된 패킷에는 기본 규칙이 적용되지 않습니다. 이러한 패킷에 NAT를 사용하려면 NAT 구성에 일치하는 소스 기반 규칙이 포함되어야 합니다. 자세한 내용은 소스 기반 규칙을 참조하세요.
  • Cloud NAT 규칙은 NAT IP 할당 옵션 값이 MANUAL_ONLY인 경우에만 지원됩니다.
  • 특정 규칙에 구성된 모든 IP 주소는 같은 등급이어야 합니다.

    동일한 규칙 내에서 프리미엄 등급과 표준 등급 IP 주소를 혼합하여 사용할 수 없습니다(기본 규칙 포함).

  • 일치 조건의 IP CIDR 범위는 NAT 규칙 간에 겹치지 않아야 합니다. 특정 패킷에는 규칙이 최대 하나만 적용될 수 있습니다. 패킷이 소스 기반 규칙과 대상 기반 규칙 모두와 일치하면 Cloud NAT는 우선순위가 더 높은 규칙을 적용합니다.

    0.0.0.0/0는 기본 규칙에서 사용되므로 이 주소를 소스 또는 대상 범위로 사용하는 NAT 규칙을 만들 수 없습니다.

  • NAT 규칙에서 NAT IP 주소가 겹치지 않아야 합니다.

  • 규칙은 비어 있지 않은 Active 또는 비어 있지 않은 Drain IP 주소를 포함해야 합니다. 규칙에 비어 있는 Active IP 주소가 포함된 경우 NAT 규칙과 일치하는 새 연결이 삭제됩니다.

  • 엔드포인트 독립 매핑(EIM)이 사용 설정된 NAT 게이트웨이에는 NAT 규칙을 추가할 수 없습니다. NAT 규칙이 있는 NAT 게이트웨이에서 EIM을 사용 설정할 수 없습니다.

또한 각 Cloud NAT 규칙에 대해 VM당 최소 포트 값으로부터 모든 VM에 포트가 할당됩니다. NAT 규칙으로부터 VM에 할당된 포트가 소진되면 NAT 규칙과 일치하는 새 연결이 삭제됩니다.

예를 들어 VM당 4,096개의 포트를 구성하고 16개의 VM과 2개의 NAT 규칙(1개의 IP 주소가 있는 rule1 및 2개의 IP 주소가 있는 rule2)이 있는 경우 2개의 IP 주소가 있는 기본 규칙(default)과 함께 16개의 VM 모두에 NAT 규칙의 각 번들에 있는 4,096개의 포트가 할당됩니다. 이 예시에서 모든 VM에 대해 default 또는 rule2에는 문제가 없지만 rule1은 일부 VM에 포트를 할당할 수 없습니다. 따라서 rule1을 통과해야 하는 VM에서 나가는 트래픽은 삭제되고 이 트래픽은 기본 규칙을 사용하지 않으므로 리소스 부족 징후가 표시될 수 있습니다.

규칙 표현식 언어

NAT 규칙은 Common Expression Language 문법을 사용하여 기록됩니다.

표현식에는 두 가지 구성요소가 필요합니다.

  • 규칙 표현식에서 검사할 수 있는 속성
  • 표현식의 일부로 속성에 수행할 수 있는 작업

예를 들어 다음 표현식은 inIpRange() 작업의 destination.ip 속성과 198.51.100.0/24 속성을 사용합니다. 이 경우 destination.ip198.51.100.0/24 IP 주소 범위 내에 있으면 표현식은 true를 반환합니다.

inIpRange(destination.ip, '198.51.100.0/24')

NAT 규칙은 다음 속성 및 작업만 지원합니다.

속성

속성은 소스 및 대상 IP 주소와 같이 발신 패킷의 정보를 나타냅니다.

속성 이름 설명
source.ip 패킷의 소스 IP 주소
destination.ip 패킷의 대상 IP 주소

운영

다음 참조는 규칙 표현식을 정의하기 위해 속성에 사용할 수 있는 연산자를 설명합니다.

작업 설명
inIpRange(string, string) -> bool inIpRange(x, y)는 IP CIDR 범위 y에 IP 주소 x가 포함되면 true을 반환합니다.
|| 논리 연산자. x || yx 또는 ytrue이면 true를 반환합니다.
== 같음 연산자. x == yxy와 같으면 true를 반환합니다.

표현식 예시

소스 또는 대상 주소(둘 다는 아님)를 기반으로 패킷을 일치시킬 수 있습니다.

소스 기반 일치 예시

소스 IP 주소가 10.0.0.25인 패킷을 일치시킵니다.

"source.ip == '10.0.0.25'"

소스 IP 주소가 10.0.0.25 또는 10.0.0.26인 패킷을 일치시킵니다.

"source.ip == '10.0.0.25' || source.ip == '10.0.0.26'"

소스 IP 주소 범위가 10.0.2.0/24인 패킷을 일치시킵니다.

"inIpRange(source.ip, '10.0.2.0/24')"

소스 IP 주소가 10.0.0.25이거나 소스 IP 주소 범위가 10.0.2.0/24인 패킷을 일치시킵니다.

"source.ip == '10.0.0.25' || inIpRange(source.ip, '10.0.2.0/24')"

대상 기반 일치 예시

대상 IP 주소가 198.51.100.20인 패킷을 일치시킵니다.

"destination.ip == '198.51.100.20'"

대상 IP 주소가 198.51.100.20 또는 198.51.100.21인 패킷을 일치시킵니다.

"destination.ip == '198.51.100.20' || destination.ip == '198.51.100.21'"

대상 IP 주소 범위가 198.51.100.10/30인 패킷을 일치시킵니다.

"inIpRange(destination.ip, '198.51.100.10/30')"

대상 IP 주소가 198.51.100.20이거나 대상 IP 주소 범위가 198.51.100.10/30인 패킷을 일치시킵니다.

"destination.ip == '198.51.100.20' || inIpRange(destination.ip, '198.51.100.10/30')"

다음 단계