Reglas de Cloud NAT

En esta página, se proporciona una descripción general de las reglas de Cloud NAT para la NAT pública. Estas reglas te permiten definir cómo se usa Cloud NAT para conectarse a Internet.

Las reglas de Cloud NAT para NAT pública admiten la traducción de direcciones de red de origen (SNAT) según la dirección de origen o de destino.

Reglas de NAT

De forma predeterminada, cuando configuras una puerta de enlace de Cloud NAT para NAT pública, los paquetes que traduce esa puerta de enlace NAT usan el mismo conjunto de direcciones IP de NAT para llegar a todas las direcciones de Internet. Si necesitas más control sobre los paquetes que traduce Cloud NAT, puedes agregar reglas de NAT.

Una regla de NAT define una condición de coincidencia y una acción correspondiente. Después de especificar las reglas de NAT, cada paquete coincide con cada regla de NAT. Si un paquete coincide con la condición establecida en una regla, se produce la acción correspondiente a esa coincidencia.

Las reglas de NAT para la NAT pública admiten la coincidencia de direcciones de origen y destino:

  • En las reglas basadas en la fuente, los paquetes se correlacionan por su dirección IP de origen. Solo se admiten direcciones IPv4 de origen.
  • En las reglas basadas en el destino, los paquetes se correlacionan según su dirección IP de destino. Solo se admiten direcciones de destino IPv4.

No se permite combinar condiciones basadas en la fuente y el destino en una sola regla de NAT. Para obtener más información, consulta Especificaciones de las reglas NAT.

Ejemplos de configuración de reglas de Cloud NAT

En esta sección, se proporcionan ejemplos de configuración para reglas NAT basadas en la fuente y el destino.

Reglas basadas en la fuente

Puedes usar reglas de NAT basadas en la fuente para cualquier tráfico admitido por la NAT pública. En esta sección, se muestra un ejemplo de configuración para instancias de VM con el reenvío de IP habilitado.

De forma predeterminada, cuando se configura una puerta de enlace de Cloud NAT para el tráfico IPv4 en una subred, la puerta de enlace proporciona NAT para la dirección IP interna principal y los rangos de alias de IP de cualquier instancia de VM en esa subred. Con las reglas de NAT basadas en la fuente, también puedes configurar la NAT para las instancias de VM que reenvían paquetes con otras direcciones de origen.

En este ejemplo, Cloud NAT está configurado en Subnet A. En la subred, una instancia de VM con la dirección IP interna principal 10.1.1.2 y un rango de IP de alias 10.2.1.0/24 envía tráfico a Internet. Considera los siguientes requisitos para la instancia de VM:

  • Si un paquete se origina en el rango de IP 192.168.1.0/24, la VM debe usar la dirección IP de NAT 203.0.113.10 para enviar tráfico a cualquier destino de Internet.
  • Si un paquete se origina en el rango de IP 192.168.2.0/24, la VM debe usar la dirección IP de NAT 203.0.113.20 para enviar tráfico a cualquier destino de Internet.
  • Si un paquete se origina en la dirección IP 10.1.1.2 (la dirección IP interna principal de la VM) o en el rango de IP 10.2.1.0/24 (el rango de IP de alias de la VM), la VM debe usar la dirección IP de NAT 203.0.113.30 para enviar tráfico a cualquier destino de Internet.
Configuración de Cloud NAT con reglas basadas en la fuente.
Configuración de Cloud NAT con dos reglas basadas en la fuente (haz clic para ampliar).

Para cumplir con estos requisitos, debes crear dos reglas de NAT basadas en la fuente para los paquetes reenviados y la regla predeterminada para los paquetes de la dirección IP interna principal y el rango de IP de alias de la instancia de VM:

  • Regla 1 basada en la fuente: Si la dirección de origen es 192.168.1.0/24, usa 203.0.113.10 para enviar tráfico a Internet.
  • Regla 2 basada en la fuente: Si la dirección de origen es 192.168.2.0/24, usa 203.0.113.20 para enviar tráfico a Internet.
  • La regla predeterminada: Para todos los demás paquetes, usa 203.0.113.30 para enviar tráfico a Internet.

Si la dirección de origen de un paquete reenviado por la instancia de VM no coincide con la regla 1 ni con la regla 2, el paquete se descarta. Para obtener información sobre cómo Cloud NAT asigna puertos para las VMs con el reenvío de IP habilitado, consulta Asignación de puertos para el reenvío de IP.

Para obtener más información sobre cómo puedes usar reglas de NAT basadas en la fuente, consulta Cloud WAN en detalle: Un análisis más profundo de sus capacidades de red diferenciadas.

Reglas basadas en el destino

En el siguiente ejemplo, se muestra cómo usar las reglas de NAT cuando el destino permite el acceso desde solo unas pocas direcciones IP. Recomendamos que el tráfico a esos destinos desde tus VMs de Google Cloud en subredes privadas se traduzca con SNAT solo con las direcciones IP permitidas. Te recomendamos que no uses estas direcciones IP para otros destinos.

Considera los siguientes requisitos para las VM en Subnet-1 (10.10.10.0/24), que se encuentra en la región A de la red de VPC test:

  • Las VM deben usar la dirección IP NAT 203.0.113.20 para enviar tráfico al destino 198.51.100.20/30.
  • Las VM deben usar la dirección IP NAT 203.0.113.30 para enviar tráfico al destino 198.51.100.30 o 198.51.100.31.
  • Las VM deben usar la dirección IP de NAT 203.0.113.40 para enviar tráfico a cualquier otro destino de Internet.

Esta red de VPC también contiene dos subredes adicionales en la misma región. Estas VM deben usar la dirección IP NAT 203.0.113.10 para enviar tráfico a cualquier destino.

Configuración de Cloud NAT con dos puertas de enlace de Cloud NAT.
Configuración de Cloud NAT con dos puertas de enlace de Cloud NAT (haz clic para ampliar).

Puedes usar reglas NAT para este ejemplo, pero necesitas dos puertas de enlace NAT porque Subnet-1 (10.10.10.0/24) tiene reglas NAT que son diferentes de las otras subredes. Para crear esta configuración, sigue estos pasos:

  1. Crea una puerta de enlace llamada Cloud NAT Gateway 1 para Subnet-1 con la dirección IP de NAT 203.0.113.40 y agrega las siguientes reglas:
    1. Regla 1 de NAT en Cloud NAT Gateway 1: Cuando el destino sea 198.51.100.20/30, usa 203.0.113.20 para la NAT.
    2. Regla de NAT 2 en Cloud NAT Gateway 1: Cuando el destino sea 198.51.100.30 o 198.51.100.31, usa 203.0.113.30 para la NAT.
  2. Crea una puerta de enlace llamada Cloud NAT Gateway 2 para las otras subredes de la región y asigna la dirección IP de NAT como 203.0.113.10. No se necesitan reglas de NAT en este paso.

Especificaciones de las reglas de NAT

  • Cloud NAT admite reglas basadas en el origen y el destino. Cada regla define una condición que se basa en la dirección de origen o destino, pero no en ambas.
  • La prioridad de una regla identifica de forma única una regla NAT, desde 0 (prioridad más alta) hasta 65,000 (prioridad más baja). No puede haber dos reglas con la misma prioridad.
  • Cada configuración de NAT tiene una regla predeterminada (prioridad de regla 65,001):
    • La regla predeterminada se aplica si un paquete no coincide con ninguna regla de NAT basada en la fuente o el destino en la misma configuración de NAT. Excepción: La regla predeterminada no se aplica a los paquetes reenviados. Para usar NAT en estos paquetes, tu configuración de NAT debe incluir una regla basada en la fuente coincidente. Para obtener más información, consulta Reglas basadas en la fuente y Asignación de puertos para el reenvío de IP.
    • El rango de CIDR de IP de la regla predeterminada es 0.0.0.0/0. Si la configuración de NAT tiene reglas basadas en el origen y el destino, todo el tráfico apto para la regla predeterminada y que no coincida con ninguna de tus reglas personalizadas se procesará con esta regla predeterminada, utilizando las direcciones IP de NAT que se le asignen.
  • Las reglas de Cloud NAT solo son compatibles cuando el valor de la opción de asignación de IP de NAT es MANUAL_ONLY.
  • Todas las direcciones IP configuradas en una regla determinada deben ser del mismo nivel.

    No puedes usar una combinación de direcciones IP del nivel Premium y del nivel Estándar en la misma regla (incluida la regla predeterminada).

  • Los rangos de CIDR de IP en las condiciones de coincidencia no deben superponerse en las reglas NAT. Como máximo, se puede aplicar una regla a un paquete determinado. Si un paquete coincide con una regla basada en la fuente y en el destino, Cloud NAT aplica la regla que tiene mayor prioridad.

    No puedes crear una regla de NAT con 0.0.0.0/0 como rango de origen o destino porque la usa la regla predeterminada.

  • Las direcciones IP de NAT en las reglas NAT no se deben superponer.

  • Una regla debe tener una dirección IP Active o Drain no vacía. Si la regla tiene una dirección IP Active vacía, se descartan las conexiones nuevas que coinciden con la regla de NAT.

  • No se pueden agregar reglas NAT a una puerta de enlace NAT con el mapeo independiente de extremos (EIM) habilitado. No puedes habilitar el EIM en una puerta de enlace NAT que tenga reglas NAT.

Asignación de puertos

La puerta de enlace de Cloud NAT usa el parámetro de configuración de puertos mínimos por VM (minPortsPerVm) para determinar cuántos puertos de origen se deben asignar a cada VM.

Dado que una sola dirección IP de NAT proporciona 64,512 puertos utilizables, el valor de minPortsPerVm determina la cantidad máxima de VMs que puede admitir una dirección IP de NAT. Por ejemplo, si minPortsPerVm es 1,024 puertos, una sola dirección IP puede admitir hasta 63 VMs (64,512 ÷ 1,024).

El valor de minPortsPerVm se usa para calcular de forma independiente la asignación de puertos para cada regla de NAT configurada, incluida la regla predeterminada. Si una VM agota los puertos asignados desde una regla específica, se descartan las conexiones nuevas que coinciden con esa regla.

Tipos de reglas y asignación de puertos

Cloud NAT asigna puertos para las reglas de NAT según su tipo:

  • Regla predeterminada. Los puertos se asignan a cada VM cuya dirección IP interna principal o rangos de alias de IP son atendidos por la puerta de enlace de Cloud NAT, incluso si la VM tiene habilitado el reenvío de IP. La regla predeterminada solo procesa el tráfico que se origina en direcciones IP internas principales o rangos de IP de alias, y no procesa el tráfico reenviado.
  • Reglas basadas en la fuente: Los puertos se asignan a una VM solo si su dirección IP interna principal o un rango de IP de alias coinciden con la dirección de origen especificada en la regla de NAT. Por ejemplo, supongamos que una puerta de enlace de Cloud NAT está configurada para entregar un rango de direcciones IP principal que contiene tanto 10.1.1.1 como 10.1.1.2. Si una regla basada en la fuente especifica 10.1.1.1 para la condición de coincidencia, pero una VM envía paquetes con su dirección IP interna principal 10.1.1.2, Cloud NAT no asigna puertos a la VM desde esa regla específica.

    Limitación: Si una VM tiene habilitado el reenvío de IP, la asignación de puertos funciona de manera diferente. En este caso, Cloud NAT asigna puertos a la VM desde la regla predeterminada y todas las reglas basadas en la fuente en la configuración de NAT de forma simultánea. Para obtener más información, consulta Asignación de puertos para el reenvío de IP.

  • Reglas basadas en el destino: Para cada regla, se asignan puertos a cada VM cuya dirección IP interna principal o rangos de alias de IP son atendidos por la puerta de enlace de Cloud NAT. Cada VM recibe puertos de la regla predeterminada y de cada regla basada en el destino.

    Por ejemplo, si la puerta de enlace está configurada con 1,024 puertos por VM y tiene dos reglas de NAT basadas en el destino, además de la regla de NAT predeterminada, a cada VM se le asignan 1,024 puertos de cada regla.

Asignación de puertos para el reenvío de IP

Para admitir VMs con la opción reenvío de IP habilitada, la coincidencia de reglas para estas VMs funciona de manera diferente durante la asignación de puertos y el procesamiento de paquetes:

  • Asignación de puertos. Dado que las VMs de reenvío pueden emitir paquetes con direcciones IP de origen arbitrarias, Cloud NAT las trata como una coincidencia para la regla predeterminada y todas las reglas NAT basadas en el origen en la configuración de NAT. Por lo tanto, para cada VM de reenvío, la puerta de enlace de Cloud NAT asigna el valor de minPortsPerVm de la regla predeterminada y de cada regla basada en la fuente de forma simultánea.

    Por ejemplo, considera una puerta de enlace de Cloud NAT configurada con un minPortsPerVm de 1,024, una regla NAT basada en la fuente con una dirección IP de NAT y la regla NAT predeterminada con 10 direcciones IP de NAT. A cada VM de reenvío se le asignan 1,024 puertos de ambas reglas. Dado que la regla basada en la fuente solo tiene una dirección IP de NAT, puede admitir hasta 63 VMs de reenvío. La puerta de enlace de Cloud NAT también reserva 64,512 puertos (63 VMs × 1,024 puertos) para ellas desde la regla predeterminada.

  • Procesamiento de paquetes Para la traducción de direcciones real, una regla basada en la fuente procesa un paquete solo si la dirección IP de origen del paquete coincide con la dirección de origen que se define en la condición de la regla. La regla predeterminada no procesa el tráfico reenviado desde VMs con el reenvío de IP habilitado. Los paquetes con direcciones IP de origen arbitrarias se descartan si no coinciden con una regla basada en el origen.

Para evitar el agotamiento de puertos que genera un error en las configuraciones de NAT que incluyen VMs con el reenvío de IP habilitado, asegúrate de que tus reglas de NAT estén configuradas con capacidad de puertos suficiente:

  • La regla predeterminada debe tener una cantidad suficiente de direcciones IP de NAT para admitir todas las VMs de reenvío que entrega la puerta de enlace de Cloud NAT, además de cada VM que usa la regla predeterminada para el tráfico desde su dirección IP interna principal o rangos de alias de IP.
  • Cada regla basada en la fuente debe tener una cantidad suficiente de direcciones IP de NAT para admitir todas las VMs de reenvío que atiende la puerta de enlace. La regla también debe tener una cantidad suficiente de direcciones IP de NAT para admitir cada VM que use esa regla específica basada en la fuente para el tráfico desde su dirección IP interna principal o rangos de IP de alias.

Capacidad del puerto

Una regla de NAT puede agotar sus puertos disponibles si las direcciones IP de la regla no admiten las asignaciones de puertos requeridas.

Considera una subred con 16 VMs y una puerta de enlace de Cloud NAT configurada con 4,096 puertos por VM. La puerta de enlace tiene tres reglas:

  • Regla de NAT predeterminada con dos direcciones IP de NAT
  • rule-1 basada en el destino con una dirección IP de NAT
  • rule-2 basado en el destino con dos direcciones IP de NAT

Dado que la asignación de puertos se calcula de forma independiente para cada regla, cada regla debe proporcionar 65,536 puertos (16 VMs × 4,096 puertos).

La regla predeterminada y rule-2 tienen capacidad suficiente. Sin embargo, rule-1 solo tiene una dirección IP (64,512 puertos utilizables), lo que no es suficiente para proporcionar la asignación completa para las 16 VMs. Por lo tanto, es posible que se descarte el tráfico que coincida con rule-1 para cualquier VM que no reciba la asignación de puertos completa.

Para verificar si una regla de NAT necesita más direcciones IP, puedes usar el campo minExtraIpsNeeded. En este campo, se muestra la cantidad de direcciones IP que debes asignar si las direcciones IP existentes en la regla de NAT no pueden satisfacer los requisitos de puertos para todas las VMs configuradas.

Planificación de la capacidad del puerto

Cuando planifiques la capacidad de puertos de tus reglas de NAT, ten en cuenta cómo Cloud NAT asigna puertos para las reglas de NAT:

Lenguaje de expresión de reglas

Las reglas de NAT se escriben con la sintaxis de Common Expression Language.

Una expresión requiere los siguientes dos componentes:

  • Atributos que se pueden inspeccionar en expresiones de reglas
  • Operaciones que se pueden realizar en los atributos como parte de una expresión

Por ejemplo, en la siguiente expresión, se usan los atributos destination.ip198.51.100.0/24 en la operación inIpRange(). En este caso, la expresión muestra un valor verdadero si destination.ip está dentro del rango de direcciones IP 198.51.100.0/24.

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

Las reglas de NAT solo admiten los siguientes atributos y operaciones:

Atributos

Los atributos representan información de un paquete saliente, como la dirección IP de origen y destino.

Nombre del atributo Descripción
source.ip Dirección IP de origen del paquete
destination.ip Dirección IP de destino del paquete

Operations

En la siguiente referencia, se describen los operadores que puedes usar con atributos para definir expresiones de reglas.

Operación Descripción
inIpRange(string, string) -> bool inIpRange(x, y) devuelve true si el rango de IP de CIDR y contiene la dirección IP x.
|| Operador lógico. x || y devuelve true si x o y es true.
== Operador de igualdad. x == y devuelve true si x es igual a y.

Expresiones de ejemplo

Puedes hacer coincidir paquetes según la dirección de origen o de destino, pero no ambas.

Ejemplos de coincidencias basadas en la fuente

Haz coincidir los paquetes con la dirección IP de origen 10.0.0.25:

"source.ip == '10.0.0.25'"

Haz coincidir los paquetes con la dirección IP de origen 10.0.0.25 o 10.0.0.26:

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

Haz coincidir los paquetes con el rango de direcciones IP de origen 10.0.2.0/24:

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

Haz coincidir los paquetes con la dirección IP de origen 10.0.0.25 o el rango de direcciones IP de origen 10.0.2.0/24:

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

Ejemplos de coincidencias basadas en el destino

Haz coincidir los paquetes con la dirección IP de destino 198.51.100.20:

"destination.ip == '198.51.100.20'"

Haz coincidir los paquetes con la dirección IP de destino 198.51.100.20 o 198.51.100.21:

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

Haz coincidir los paquetes con el rango de direcciones IP de destino 198.51.100.10/30:

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

Haz coincidir los paquetes con la dirección IP de destino 198.51.100.20 o el rango de direcciones IP de destino 198.51.100.10/30:

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

¿Qué sigue?