Conceptos de puertos y direcciones de Cloud NAT

En esta página, se describe cómo las puertas de enlace de Cloud NAT usan direcciones IP externas y cómo asignan puertos de origen a instancias de VM de Compute Engine y nodos de GKE que usan las puertas de enlace. Antes de revisar esta información, familiarízate con la descripción general de Cloud NAT.

Direcciones IP NAT

Una dirección IP NAT es una dirección IP externa regional, enrutable en Internet. Una VM sin una dirección IP externa, en una subred entregada por una puerta de enlace de Cloud NAT, usa una dirección IP NAT cuando envía paquetes a un destino en Internet.

Puedes asignar direcciones IP NAT a una puerta de enlace de Cloud NAT mediante uno de estos métodos:

  • Asignación automática de direcciones IP NAT: Cuando seleccionas esta opción o eliges los valores predeterminados de Google Cloud, Cloud NAT agrega automáticamente direcciones IP externas regionales según la cantidad de VM que usan la puerta de enlace y la cantidad de puertos reservados para cada VM. También quita automáticamente una dirección IP NAT cuando ya no necesita puertos de origen en esa dirección IP NAT.

    • Cuando una puerta de enlace de Cloud NAT agrega una dirección IP NAT, crea una dirección IP regional externa estática (reservada). Estas direcciones se consideran en las cuotas por proyecto.
    • Con la asignación automática, no puedes predecir la siguiente dirección IP que se asignará. Si dependes de conocer el conjunto de direcciones IP de NAT posibles por adelantado (por ejemplo, para crear una lista de permisos), debes usar la asignación de dirección IP NAT manual en su lugar.
    • Si cambias a la asignación de direcciones IP NAT manual más adelante, se borrarán las direcciones IP externas regionales reservadas automáticamente. Consulta cómo cambiar el método de asignación para obtener más información.
  • Asignación manual de direcciones IP NAT: Cuando seleccionas esta opción, creas y asignas manualmente direcciones IP externas regionales estáticas (reservadas) a tu puerta de enlace de Cloud NAT. Puedes aumentar o disminuir la cantidad de direcciones IP NAT asignadas manualmente si editas la puerta de enlace de Cloud NAT.

    • Cuando se usa la asignación de direcciones IP NAT manual, debes calcular el número de direcciones IP externas regionales que necesitas para la puerta de enlace de Cloud NAT. Si tu puerta de enlace se queda sin direcciones IP de NAT, Cloud NAT descarta los paquetes. Los paquetes descartados se registran cuando activas el registro de errores con el registro de Cloud NAT.
    • Consulta el ejemplo de reserva de puerto para ver ejemplos de cálculos.

Consulta los límites de Cloud NAT para conocer la cantidad máxima de direcciones IP NAT asignadas de forma automática o manual.

Cambia el método de asignación

Puedes cambiar una puerta de enlace de Cloud NAT de la asignación automática de direcciones IP NAT a la asignación manual de direcciones IP de NAT. Sin embargo, no se pueden conservar las direcciones IP de NAT. Aunque las direcciones IP de NAT asignadas de forma automática son estáticas, no se pueden mover a una asignación de dirección IP de NAT manual. Por ejemplo, no puedes comenzar a usar una puerta de enlace de Cloud NAT con direcciones IP de NAT asignadas automáticamente y, luego, usar esas mismas direcciones cuando cambias la puerta de enlace NAT a direcciones IP de NAT asignadas manualmente.

El conjunto de direcciones IP externas regionales que Cloud NAT usa para la asignación automática de direcciones IP NAT es diferente del conjunto de direcciones IP externas regionales que puedes elegir de forma manual.

Desvío de direcciones IP NAT

Cuando configuras una puerta de enlace Cloud NAT con asignación de dirección IP NAT manual, puedes elegir qué sucede cuando necesitas reducir la cantidad de direcciones IP NAT que usa la puerta de enlace:

  • Si quitas una dirección IP NAT asignada de forma manual, las conexiones NAT establecidas se cortan de inmediato.

  • En su lugar, puedes optar por desviar una dirección IP de NAT asignada de forma manual. El desvío le indica a la puerta de enlace de Cloud NAT que deje de usar la dirección IP de NAT para las conexiones nuevas, pero continúa usándola para conexiones establecidas. Las conexiones establecidas pueden cerrarse normalmente en lugar de cerrarse abruptamente. Para obtener instrucciones, consulta Desvía direcciones IP externas asociadas a NAT.

Puertos

Cada dirección IP de NAT en una puerta de enlace de Cloud NAT ofrece 64,512 puertos de TCP de origen y 64,512 puertos de UDP. de origen. TCP y UDP admiten 65,536 puertos por dirección IP, y Cloud NAT no usa los primeros 1,024 puertos conocidos (privilegiados).

Cuando creas una puerta de enlace de Cloud NAT, debes especificar una cantidad mínima de puertos por instancia de VM. Cuando una puerta de enlace de Cloud NAT realiza una dirección de red de origen (SNAT) en un paquete que envía una VM, cambia la dirección IP de origen y el puerto de origen del paquete.

Procedimiento de reserva de puertos

Cloud NAT usa este procedimiento para aprovisionar direcciones de origen y tuplas de puertos de origen para cada VM que entrega la puerta de enlace de Cloud NAT. Cuando usas una puerta de enlace de Cloud NAT para proporcionar servicios NAT a un clúster privado de Google Kubernetes Engine, la cantidad de tuplas de puerto y dirección de origen se asigna a toda la VM del nodo, compartida por todos los Pods del nodo.

  1. Determina las direcciones IP internas de VM para las que se debe realizar NAT. Las direcciones IP internas de VM para las que una puerta de enlace Cloud NAT debe realizar NAT está determinada por los rangos de direcciones IP de subred que la puerta de enlace está configurada para entregar.

    • Si la puerta de enlace Cloud NAT está configurada para realizar NAT para el rango de direcciones IP principal de la subred utilizada por la interfaz de red de la VM, la puerta de enlace realiza una NAT para ambas, la dirección IP interna principal de la VM y cualquiera de los rangos de alias de IP del rango de direcciones IP principal de la subred.

    • Si la puerta de enlace Cloud NAT está configurada para realizar NAT para un rango de direcciones IP secundario de la subred utilizada por la interfaz de red de la VM, la puerta de enlace realizará una NAT para cualquier rango de IP de alias de ese rango de direcciones de IP de la subred.

  2. Calcula la cantidad de puertos de origen que se asignan a la VM.

    1. Si la puerta de enlace Cloud NAT debe realizar NAT para uno o más rangos de alias de IP de VM cuyas máscaras de red sean más cortas que /32, es decir, si la puerta de enlace debe realizar NAT para al menos uno de los rangos de alias de IP de VM que constan de más que una sola dirección IP, Cloud NAT toma el máximo de los siguientes dos números y continúa con el siguiente paso y usa el máximo como entrada:

      • los puertos mínimos por instancia de VM que especificaste
      • el número 1,024

      De lo contrario, la puerta de enlace de Cloud NAT avanza al siguiente paso con solo los puertos mínimos por instancia de VM como entrada.

    2. La puerta de enlace de Cloud NAT usa esta entrada para determinar cuántos puertos de origen debe asignar a la VM.

  3. Reserva la dirección de origen y las tuplas de puertos de origen para la VM. La cantidad de direcciones de origen y tuplas de puertos de origen coincide con la cantidad de puertos de origen que la puerta de enlace de Cloud NAT debe asignar a la VM.

    Es posible que la dirección de origen y las tuplas de puertos de origen abarquen más de una dirección IP NAT si la puerta de enlace de Cloud NAT usa dos o más direcciones IP NAT. Es posible que una sola dirección IP NAT no tenga suficientes puertos de origen sin reservar para admitir la cantidad de direcciones de origen y tuplas de puertos de origen que necesita la VM.

Reduce los puertos

Puedes reducir la cantidad de puertos mínimos por VM en los recursos de Cloud NAT ya configurados. Sin embargo, no hay vaciado de conexiones. Cuando se reduce la cantidad de puertos por VM, las conexiones NAT establecidas se interrumpen de inmediato.

Puertos y conexiones

La cantidad de tuplas de puerto de origen y dirección de origen que una puerta de enlace de Cloud NAT reserva para una VM limita la cantidad de conexiones que puede realizar una VM a un destino único:

  • Un destino único hace referencia a una tupla triple única compuesta por una dirección IP de destino, un puerto de destino y un protocolo IP (como TCP o UDP).

  • Una conexión se refiere a una tupla quíntuple única compuesta por la dirección de origen y la tupla del puerto de origen combinadas con una tupla de destino única triple. Debido a que el protocolo UDP no tiene conexión, el concepto de conexión se reduce a una tupla quíntuple asociada con un datagrama UDP único.

Supongamos que una puerta de enlace de Cloud NAT calcula 1,024 para la cantidad fija de puertos de una VM mediante el procedimiento de reserva de puertos. La puerta de enlace de Cloud NAT reserva 1,024 combinaciones únicas de tuplas de puerto y dirección de origen para la VM. La puerta de enlace de Cloud NAT puede procesar 1,024 conexiones simultáneas a cada destino único de 3 tuplas. A modo de ejemplo:

  • La puerta de enlace admite 1,024 conexiones simultáneas a la dirección IP de destino 203.0.113.99 en el puerto 80 mediante el protocolo TCP.

  • La puerta de enlace admite otras 1,024 conexiones simultáneas con la misma dirección IP de destino en el puerto 443, también con el protocolo TCP.

  • La puerta de enlace admite otras 1,024 conexiones simultáneas a una dirección IP de destino diferente en el puerto 80, mediante el protocolo TCP.

Reutilización de puertos en simultáneo para extremos diferentes

Siempre que al menos un dato en la triple tupla de destino cambie (la dirección IP de destino, el puerto de destino, el protocolo) la misma dirección de origen y la tupla de puerto de origen pueden volver a usarse en simultáneo para otras conexiones.

Sin embargo, dado que Cloud NAT se puede clasificar como una NAT de asignación independiente de extremos de acuerdo con RFC 5128, esta reutilización puede causar conflictos ocasionales que pueden evitar que Cloud NAT asigne puertos a conexiones nuevas. A continuación, se muestra un ejemplo:

  • Imagina una primera conexión desde el extremo de VM local 10.0.0.1:10000 al extremo remoto 203.0.113.1:80 a través de TCP, al que Cloud NAT asigna una IP y un puerto 192.0.2.10:30000.

  • Se intenta establecer una segunda conexión desde otro extremo de VM local 10.0.0.1:20000 a un extremo remoto diferente 203.0.113.2:443 a través de TCP. Debido a que el extremo de destino es diferente del que está en la primera conexión, Cloud NAT puede reasignar la misma IP de NAT y puerto 192.0.2.10:30000 a esta conexión.

  • Por último, se intenta una tercera conexión TCP desde el extremo de VM local de la primera conexión (10.0.0.1:10000) al extremo remoto de la segunda (203.0.113.2:443). Debido a la cláusula Asignación independiente de extremos, que indica "NAT reutiliza la asignación de puertos para los paquetes posteriores enviados desde la misma dirección IP interna y puerto a cualquier dirección IP externa y puerto"., Cloud NAT debe reutilizar la misma IP y puerto de NAT que se asignaron a la primera conexión, es decir, 192.0.2.10:30000. Sin embargo, esa asignación entraría en conflicto con la segunda conexión, ya que la IP y el puerto NAT, la IP y el puerto del extremo remoto, y el identificador de protocolo, coinciden. En consecuencia, surge un “conflicto de independencia de extremo” y Cloud NAT descarta el nuevo intento de conexión.

El conflicto descrito aquí es de naturaleza probabilística y no se puede evitar por completo. Sin embargo, su aparición se puede mitigar mediante el aumento de la cantidad mínima de puertos por instancia de VM, de modo que el procedimiento de reserva de puertos pueda asignar a la VM más direcciones IP de NAT y tuplas de puertos.

Reutilización del puerto de origen para conexiones TCP

Después de que una puerta de enlace Cloud NAT cierra una conexión TCP, Google Cloud aplica una demora de dos minutos antes de que la puerta de enlace pueda volver a usar la misma dirección de origen y tupla de puerto de origen con el mismo destino (dirección IP de destino, puerto de destino y protocolo).

No puede reducir este retraso. Sin embargo, puedes realizar una de las siguientes acciones:

Puertos de origen y seguridad

Si dependes de la aleatorización del puerto de origen como medida de seguridad, debes tener en cuenta lo siguiente:

Ejemplos

En los siguientes ejemplos, se demuestra cómo Cloud NAT reserva direcciones de origen y puertos de origen para una VM y cómo realiza una NAT para los paquetes enviados a Internet.

Reserva de puertos

Los siguientes ejemplos demuestran las aplicaciones del procedimiento de reserva de puertos:

Supongamos que estás configurando una puerta de enlace de Cloud NAT a fin de proporcionar NAT para el rango de direcciones IP principal de una subred y que las VM que usan esa subred no tienen ningún rango de IP de alias desde el rango de direcciones IP principal de la subred. Redondea el resultado de cualquier operación de división al número entero más cercano. ⌊⌋ es la función de suelo (mayor número entero), lo que significa que se descarta cualquier resultado fraccionario de la división.

  • Si configuras la puerta de enlace Cloud NAT con una sola dirección IP NAT mediante asignación manual y estableces la cantidad mínima de puertos por instancia de VM en 64, la puerta de enlace puede proporcionar servicios NAT para hasta 1,008 VM:

    ⌊(1 dirección IP NAT) × (64,512 puertos por dirección) / (64 puertos por VM)⌋ = 1,008 VM

  • Si necesitas admitir más de 1,008 VM, puedes asignar una segunda dirección IP NAT a la puerta de enlace de Cloud NAT. Con dos direcciones IP NAT, que mantienen la cantidad mínima de puertos por VM en 64, puedes admitir 2,016 VM:

    ⌊(2 direcciones IP NAT) × (64,512 puertos por dirección) / (64 puertos por VM)⌋ = 2,016 VM

  • Si se establece la cantidad mínima de puertos por VM en 4,096, cada dirección IP NAT puede admitir 15 VM. Este cálculo se redondea al número entero más cercano:

    ⌊(1 dirección IP NAT) × (64,512 puertos por dirección) / (4,096 puertos por VM)⌋ = 15 VM

Flujo de NAT

En este ejemplo, una VM con una dirección IP interna principal 10.240.0.4, sin una dirección IP externa, debe descargar una actualización de la dirección IP externa 203.0.113.1. Configuraste la puerta de enlace nat-gw-us-east de la siguiente manera:

  • cantidad mínima de puertos por instancia: 64
  • se asignaron manualmente dos direcciones IP NAT: 192.0.2.50 y 192.0.2.60
  • proporciona NAT para el rango de direcciones IP principal de subnet-1.
Ejemplo de traducción de Cloud NAT (haz clic para ampliar)
Ejemplo de traducción de Cloud NAT (haz clic para ampliar)

Cloud NAT sigue el procedimiento de reserva de puertos para reservar las siguientes tuplas de puerto y dirección de origen para cada una de las VM de la red. Por ejemplo, la puerta de enlace de Cloud NAT reserva 64 puertos de origen para la VM con la dirección IP interna 10.240.0.4. La dirección IP NAT 192.0.2.50 tiene 64 puertos sin reserva, por lo que la puerta de enlace reserva el siguiente conjunto de 64 tuplas de puerto y dirección de origen para esa VM:

  • 192.0.2.50:34000 hasta 192.0.2.50:34063

Cuando la VM envía un paquete al servidor de actualización, 203.0.113.1, en el puerto de destino 80, con el protocolo TCP…

  • La VM envía un paquete de solicitud con estos atributos:

    • Dirección de origen: 10.240.0.4, la dirección IP interna principal de la VM
    • Puerto de origen: 24000, el puerto de origen efímero que eligió el sistema operativo de la VM
    • Dirección de destino: 203.0.113.1, la dirección IP externa del servidor de actualizaciones
    • Puerto de destino: 80, el puerto de destino para el tráfico HTTP al servidor de actualización
    • Protocolo: TCP
  • La puerta de enlace nat-gw-us-east realiza SNAT en la salida y vuelve a escribir la dirección de origen y el puerto de origen del paquete de solicitudes. El paquete modificado se envía a Internet si la red de VPC tiene una ruta para el destino 203.0.113.1 cuyo siguiente salto es la puerta de enlace de Internet predeterminada. Por lo general, una ruta predeterminada cumple con este requisito.

    • Dirección de origen: 192.0.2.50, de una de las tuplas de puertos de origen y direcciones de origen reservadas de la VM
    • Puerto de origen: 34022, un puerto de origen no utilizado de una de las tuplas de puertos de origen reservadas de la VM
    • Dirección de destino: 203.0.113.1, sin cambios
    • Puerto de destino: 80, sin cambios
    • Protocolo: TCP, sin cambios
  • Cuando el servidor de actualizaciones envía un paquete de respuesta, ese paquete llega a la puerta de enlace nat-gw-us-east con estos atributos:

    • Dirección de origen: 203.0.113.1, la dirección IP externa del servidor de actualización
    • Puerto de origen: 80, la respuesta HTTP del servidor de actualización
    • Dirección de destino: 192.0.2.50, que coincide con la dirección de origen original del paquete de solicitud
    • Puerto de destino: 34022, que coincide con el puerto de origen del paquete de solicitud
    • Protocolo: TCP, sin cambios
  • La puerta de enlace nat-gw-us-east realiza DNAT en el paquete de respuesta y vuelve a escribir la dirección de destino y el puerto de destino del paquete de respuesta para que el paquete se entregue a la VM:

    • Dirección de origen: 203.0.113.1, sin cambios
    • Puerto de origen: 80, sin cambios
    • Dirección de destino: 10.240.0.4, la dirección IP interna principal de la VM
    • Puerto de destino: 24000, que coincide con el puerto de origen efímero original del paquete de solicitud
    • Protocolo: TCP, sin cambios

Qué sigue