Reglas de Cloud NAT

En esta página se ofrece una descripción general de las reglas de Cloud NAT para 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) basada en la dirección de origen (vista previa) o de destino.

Reglas de NAT

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

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

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

  • En las reglas basadas en la fuente (Vista previa), los paquetes se emparejan por su dirección IP de origen. Solo se admiten direcciones de origen IPv4.
  • En las reglas basadas en el destino, los paquetes se emparejan por su dirección IP de destino. Solo se admiten direcciones de destino IPv4.

No se pueden combinar condiciones basadas en el origen y el destino en una misma regla NAT. Para obtener más información, consulta las especificaciones de las reglas de NAT.

Ejemplo de configuración de reglas de Cloud NAT

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

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

  • Las VMs deben usar la dirección IP de NAT 203.0.113.20 para enviar tráfico al destino 198.51.100.20/30.
  • Las máquinas virtuales deben usar la dirección IP de NAT 203.0.113.30 para enviar tráfico a los destinos 198.51.100.30 o 198.51.100.31.
  • Las VMs 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 VMs deben usar la dirección IP de NAT 203.0.113.10 para enviar tráfico a cualquier destino.

Configuración de Cloud NAT con dos pasarelas de Cloud NAT.
Configuración de Cloud NAT con dos pasarelas de Cloud NAT (haz clic en la imagen para ampliarla).

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

  1. Crea una pasarela llamada Cloud NAT Gateway 1 para Subnet-1 con la dirección IP de NAT 203.0.113.40 y añade las siguientes reglas:
    1. Regla de NAT 1 en Cloud NAT Gateway 1: cuando el destino sea 198.51.100.20/30, usa 203.0.113.20 para NAT.
    2. Regla de NAT 2 en Cloud NAT Gateway 1: cuando el destino es 198.51.100.30 o 198.51.100.31, usa 203.0.113.30 para NAT.
  2. Crea una pasarela 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 NAT en este paso.

Especificaciones de las reglas de NAT

  • Cloud NAT admite reglas basadas en el origen y en el destino. Cada regla define una condición basada en la dirección de origen o de destino, pero no en ambas.
  • La prioridad de una regla identifica de forma exclusiva 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:
    • La regla predeterminada se aplica si no coincide ninguna otra regla de NAT en la misma configuración de NAT.
    • La prioridad de la regla predeterminada es 65001.
    • En el caso de las reglas basadas en el origen y en el destino, el intervalo CIDR de IP de la regla predeterminada es 0.0.0.0/0.
  • Las reglas de Cloud NAT solo se admiten 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 de nivel Premium y de nivel Estándar en la misma regla (incluida la regla predeterminada).

  • Los intervalos de notación CIDR de IP de las condiciones de coincidencia no deben solaparse entre las reglas de NAT. Como máximo, se puede aplicar una regla a cada paquete. Si un paquete coincide con una regla basada en el origen y en el destino, Cloud NAT aplica la regla que tenga mayor prioridad.

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

  • Las direcciones IP de NAT de las reglas de NAT no deben solaparse.

  • Una regla debe tener un elemento Active que no esté vacío o una dirección IP Drain que no esté vacía. Si la regla tiene una dirección IP Active vacía, se rechazarán las conexiones nuevas que coincidan con la regla NAT.

  • No se pueden añadir reglas de NAT a una pasarela de NAT que tenga habilitada la opción Asignación independiente de puntos finales. No puedes habilitar la asignación independiente de puntos finales en una pasarela NAT que tenga reglas NAT.

Además, a todas las VMs se les asignan puertos a partir del valor de puertos mínimos por VM de cada regla de Cloud NAT. Si se agotan los puertos asignados a una VM desde una regla NAT, se descartarán las nuevas conexiones que coincidan con la regla NAT.

Por ejemplo, si configuras 4096 puertos por VM y tienes 16 VMs y 2 reglas NAT (rule1 con 1 dirección IP y rule2 con 2 direcciones IP), junto con la regla predeterminada (default) con 2 direcciones IP, las 16 VMs obtendrían 4096 puertos en cada paquete de reglas NAT. En este ejemplo, no hay problemas en default ni en rule2 para todas sus VMs, pero rule1 no puede asignar puertos a todas sus VMs. Por lo tanto, es posible que se elimine el tráfico de las máquinas virtuales que tenga que pasar por rule1 y que muestre signos de falta de recursos, ya que el tráfico no usa la regla predeterminada.

Lenguaje de expresiones de reglas

Las reglas de NAT se escriben con la sintaxis del lenguaje de expresión común.

Una expresión requiere 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, la siguiente expresión usa los atributos destination.ip y 198.51.100.0/24 en la operación inIpRange(). En este caso, la expresión devuelve "verdadero" si destination.ip está dentro del intervalo de direcciones IP 198.51.100.0/24.

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

Las reglas 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 de destino.

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

Operaciones

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

Operación Descripción
inIpRange(string, string) -> bool inIpRange(x, y) devuelve true si el intervalo CIDR de IP 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.

Ejemplos de expresiones

Puede hacer coincidir paquetes en función de la dirección de origen o de destino, pero no de ambas.

Ejemplos de coincidencia basada en la fuente

Coincide con los paquetes cuya dirección IP de origen sea 10.0.0.25:

"source.ip == '10.0.0.25'"

Coincide con los paquetes que tengan 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'"

Coincide con los paquetes que tengan el intervalo de direcciones IP de origen 10.0.2.0/24:

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

Coincide con los paquetes que tengan la dirección IP de origen 10.0.0.25 o el intervalo 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 la coincidencia basada en el destino

Coincide con los paquetes cuya dirección IP de destino es 198.51.100.20:

"destination.ip == '198.51.100.20'"

Coincide con los paquetes cuya dirección IP de destino sea 198.51.100.20 o 198.51.100.21:

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

Coincide con los paquetes cuyo intervalo de direcciones IP de destino es 198.51.100.10/30:

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

Coincide con los paquetes cuya dirección IP de destino sea 198.51.100.20 o cuyo intervalo de direcciones IP de destino sea 198.51.100.10/30:

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

Siguientes pasos