Descripción general del puerto y la dirección 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 los puertos de origen a las instancias de máquina virtual (VM) de Compute Engine y a los nodos de Google Kubernetes Engine (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 de NAT

Una dirección IP de NAT es una dirección IP externa regional que se puede enrutar 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 de NAT cuando envía paquetes a un destino en Internet.

Para asignar direcciones IP de NAT a una puerta de enlace de Cloud NAT, usa uno de los siguientes métodos:

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

    • Cuando una puerta de enlace de Cloud NAT agrega una dirección IP de NAT, crea una dirección IP externa regional (reservada) estática. Estas direcciones se tienen en cuenta para las cuotas por proyecto.
    • Con la asignación automática, no puedes predecir la siguiente dirección IP asignada. Si dependes de conocer el conjunto de direcciones IP de NAT posibles con anticipación (por ejemplo, para crear una lista de anunciantes permitidos), debes usar la asignación manual de direcciones IP de NAT.
    • Si cambias a la asignación manual de direcciones IP de NAT más adelante, se borran las direcciones IP externas regionales reservadas automáticamente. Para obtener más información, consulta Cambia el método de asignación.
  • Asignación manual de direcciones IP de NAT. Cuando seleccionas esta opción, creas y asignas direcciones IP externas regionales estáticas (reservadas) a tu puerta de enlace de Cloud NAT de forma manual. Para aumentar o disminuir la cantidad de direcciones IP de NAT asignadas manualmente, edita la puerta de enlace de Cloud NAT.

    • Cuando uses la asignación manual de dirección IP de NAT, debes calcular la cantidad 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 usas el registro de Cloud NAT para activar el registro de errores.
    • Para ver ejemplos de cálculos, consulta el ejemplo de reserva de puerto.

Para ver la cantidad máxima de direcciones IP de NAT asignadas de forma manual o automática, consulta Límites de Cloud NAT.

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 de NAT a la asignación manual de direcciones IP de NAT. Sin embargo, las direcciones IP de NAT no se pueden conservar. Aunque las direcciones IP de NAT asignadas automáticamente son estáticas, no se pueden mover a una asignación manual de dirección IP de NAT. 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 las direcciones IP de NAT asignadas manualmente.

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

Desvío de direcciones IP de NAT

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

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

  • Puedes elegir desviar de forma manual una dirección IP de NAT asignada. 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 que continúe usándolas para las conexiones establecidas. Estas últimas pueden cerrarse normalmente, en vez de hacerlo de forma repentina. Para obtener instrucciones, consulta Desvía las direcciones IP externas asociadas con NAT.

Puertos

Cada dirección IP de NAT en una puerta de enlace de Cloud NAT ofrece 64,512 puertos TCP de origen y 64,512 puertos 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, especificas una cantidad mínima de puertos por instancia de VM. Cuando una puerta de enlace de Cloud NAT realiza la traducción de direcciones de red de origen (SNAT) en un paquete enviado por una VM, cambia el puerto de origen y la dirección IP de origen NAT del paquete.

Procedimiento de reserva de puertos

Cloud NAT usa este procedimiento a fin de aprovisionar la dirección IP de origen NAT y las tuplas del puerto 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 direcciones IP de origen de NAT y de tuplas de puerto de origen se asigna a toda la VM del nodo, compartida por todos los Pods del nodo.

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

    • Si la puerta de enlace de Cloud NAT está configurada a fin de 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 de Cloud NAT está configurada a fin de 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 IP de la subred.

  2. Calcula la cantidad de puertos de origen que se asignarán a la VM.

    1. Si la puerta de enlace de Cloud NAT debe realizar NAT para uno o más rangos de IP de alias de la VM cuyas máscaras de redireccionamiento son más cortas que /32, es decir, si la puerta de enlace debe realizar NAT para al menos uno de los rangos de IP de alias de la VM que constan de más de una dirección IP única: Cloud NAT toma la cantidad máxima de los dos números siguientes y procede a la acción siguiente con ese 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 continúa con el paso siguiente mediante 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 IP de origen de NAT y las tuplas de puerto de origen para la VM. La cantidad de direcciones IP de origen y de puerto de origen de NAT coincide con la cantidad de puertos de origen que la puerta de enlace de Cloud NAT determinada debería asignar a la VM.

    Es posible que la dirección IP de origen de NAT y las tuplas de puerto de origen abarquen más de una dirección IP de NAT si la puerta de enlace de Cloud NAT usa dos o más direcciones IP de NAT. Es posible que una sola dirección IP de NAT no tenga suficientes puertos de origen sin reservar para ajustar la cantidad de direcciones IP de NAT de origen y de tuplas de puerto 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 reduces la cantidad de puertos por VM, las conexiones NAT establecidas se interrumpen de inmediato.

Puertos y conexiones

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

  • Un destino único se refiere 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 IP de origen de NAT y la tupla de puerto de origen combinada con una tupla triple de destino único. 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 como la cantidad fija de puertos para una VM mediante el procedimiento de reserva de puertos. La puerta de enlace de Cloud NAT reserva 1,024 combinaciones únicas de direcciones IP de origen y tuplas de puerto de origen para la VM. La puerta de enlace de Cloud NAT puede procesar 1,024 conexiones simultáneas hacia cada tupla triple de destino único. Sin embargo, Cloud NAT considera las conexiones cerradas como inutilizables durante los 120 segundos posteriores al cierre de la conexión, lo que puede afectar la cantidad de conexiones simultáneas en uso.

Ejemplos:

  • 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 a esa misma dirección IP de destino en el puerto 443, también mediante 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, también mediante el protocolo TCP.

Mapeo independiente de extremos y reutilización de puertos simultáneos

Siempre que al menos un dato en la tupla triple de destino cambie (la dirección IP de destino, el puerto de destino o el protocolo) la misma dirección IP de origen de NAT y la tupla del puerto de origen se pueden usar simultáneamente para diferentes conexiones.

Debido a que Cloud NAT usa el mapeo independiente de extremos, como se define en la sección 2.3 de RFC 5128, la cantidad de conexiones simultáneas que una VM cliente puede establecer hacia una tupla triple única de destino puede reducirse si Cloud NAT asigna la misma dirección IP de NAT de origen y tupla de puerto de origen a más de una dirección IP interna y puerto de origen efímero de una VM cliente. Las posibilidades de que esto suceda aumentan si la VM cliente tiene una gran cantidad de direcciones IP internas de origen y realiza una gran cantidad de conexiones a la misma tupla triple de destino. La primera vez que una VM cliente envía un paquete desde una dirección IP interna y un puerto de origen efímero, Cloud NAT crea un mapeo independiente de extremo de varios a uno entre lo siguiente:

  • La dirección IP interna y la tupla de puerto de origen efímera
  • Una dirección IP de origen de NAT única y la tupla de puerto de origen

Por ejemplo, cuando una VM cliente envía un paquete desde su dirección IP interna 10.0.0.2 a través del puerto de origen efímero 10001, Cloud NAT asigna 10.0.0.2:10001 a una dirección IP de origen de NAT y una tupla de puerto de origen que se usará para todas las conexiones posteriores de 10.0.0.2:10001 a cualquier tupla triple de destino.

Si la misma VM utiliza un puerto de origen efímero diferente para enviar un paquete, por ejemplo, 10.0.0.2:20002, Cloud NAT también asigna una dirección IP de origen de NAT y una tupla de puerto de origen para todas las conexiones posteriores de 10.0.0.2:20002 a cualquier tupla triple de destino. Es posible que Cloud NAT pueda asignar la misma dirección IP de origen de NAT y la tupla de puerto de origen a ambas de estas direcciones IP internas y tuplas de puerto de origen efímeras. En algunas situaciones, esto produce un conflicto independiente de extremos.

Para obtener un ejemplo más detallado, consulta el ejemplo de un conflicto de mapeo independiente de extremos.

Reduce los conflictos independientes de extremos

Puedes reducir las posibilidades de conflictos independientes de extremos si usas las siguientes técnicas:

  • Desactiva el mapeo independiente de extremos.

  • Aumenta la cantidad mínima de puertos por instancia de VM para que el procedimiento de reserva de puertos pueda asignar más direcciones IP de origen de NAT y tuplas de puerto de origen a cada VM cliente. Esto disminuye la probabilidad de que dos o más direcciones IP de cliente y tuplas de puerto de origen efímeras tengan la misma dirección IP de origen y tupla de puerto de origen de NAT.

  • Configura tus instancias de VM para usar un conjunto más grande de puertos de origen efímeros:

    • En las VM de Linux, puedes configurar ip_local_port_range como la cantidad máxima de puertos de origen efímeros (64,512) con este comando:

      echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
      
    • En las VM de Windows, puedes establecer la cantidad máxima de puertos TCP y UDP de origen efímeros en el máximo posible (64,512) con estos comandos:

      netsh int ipv4 set dynamicport tcp start=1024 num=64512
      netsh int ipv4 set dynamicport udp start=1024 num=64512
    • En los nodos de GKE, puedes automatizar esta configuración mediante un DaemonSet con privilegios.

  • En el caso de los clústeres de GKE, inhabilita la NAT de origen que se realiza en cada nodo para los paquetes que se envían a los destinos de interés. Puedes usar uno de estos métodos:

Demora para la reutilización de puertos de origen TCP

Después de que una puerta de enlace de 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 IP de origen de NAT y la tupla de puerto de origen con el mismo destino (dirección IP de destino, puerto de destino y protocolo).

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

  • Aumenta la cantidad mínima de puertos por instancia de VM para que el procedimiento de reserva de puertos asigne a la VM más direcciones IP de origen de NAT y tuplas de puertos de origen.

  • Si una VM necesita abrir y cerrar rápidamente conexiones TCP a la misma dirección IP de destino y puerto de destino mediante el mismo protocolo, debes asignar una dirección IP externa a la VM y usar reglas de firewall para limitar las conexiones de entrada no solicitadas, en lugar de usar Cloud NAT.

Puertos de origen y seguridad

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

Ejemplos

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

Reserva de puertos

En los siguientes ejemplos, se muestran los usos 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 las VM que usan esa subred no tienen los rangos de alias de IP que corresponden al rango principal de direcciones IP de esa subred. Redondea el resultado de cualquier operación de división al número entero más cercano. ⌊⌋ corresponde a la función floor (número entero más grande); es decir, descarta cualquier resultado fraccionario de división.

  • Si configuras la puerta de enlace de Cloud NAT con una sola dirección IP de NAT mediante la 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 de 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 de NAT a la puerta de enlace de Cloud NAT. Con dos direcciones IP de NAT, que mantienen la cantidad mínima de puertos por VM en 64, puedes admitir 2,016 VM:

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

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

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

Conflicto de mapeo independiente de extremos

En el siguiente ejemplo, se ilustra cómo el mapeo independiente de extremos puede reducir la cantidad de conexiones simultáneas de una VM cliente a la misma tupla triple de destino, incluso cuando existe una cantidad suficiente de direcciones IP de origen de NAT y tuplas de puerto de origen libres para la VM cliente.

Supongamos que configuraste una puerta de enlace de Cloud NAT a fin de proporcionar NAT al rango de direcciones IP principal de una subred. Creaste una VM cliente con una interfaz de red cuya dirección IP interna principal es 10.0.0.2 en esa subred. La VM de ejemplo no tiene una dirección IP externa asignada a su interfaz de red.

  1. La VM abre una conexión con las siguientes características:

    • Puerto y dirección IP internas de origen: 10.0.0.2:10001
    • Tupla triple de destino: 203.0.113.1:80 mediante TCP
    • Cloud NAT usa la siguiente dirección IP de origen de NAT y la tupla de puerto de origen: 192.0.2.10:30009
  2. La VM abre una segunda conexión con las siguientes características:

    • Puerto y dirección IP internas de origen: 10.0.0.2:10002
    • Tupla triple de destino: 203.0.113.2:80 mediante TCP
    • Cloud NAT también podría usar la misma dirección IP de origen de NAT y tupla de puerto de origen, 192.0.2.10:30009, para esta conexión. Se puede usar la misma dirección IP de origen de NAT y la tupla de puerto de origen para una dirección IP de cliente diferente y un puerto de origen efímero.
  3. Mientras que la primera y la segunda conexión están activas, Cloud NAT no puede abrir una tercera conexión TCP con estas características:

    • La misma dirección IP interna de origen y puerto que la primera conexión: 10.0.0.2:10001
    • La misma tupla triple de destino que la segunda conexión: 203.0.113.2:80 mediante TCP

    Este tercer intento de conexión se descarta con un error de conflicto independiente del extremo, ya que el mapeo independiente de los extremos establecido por la primera conexión exige que todas las conexiones de 10.0.0.2:10001 deben usar la misma dirección IP de origen de NAT y la tupla de puerto de origen, 192.0.2.10:30009, pero 192.0.2.10:30009 ya está siendo utilizada por la segunda conexión TCP a 203.0.113.2:80.

  4. Para evitar la ambigüedad, un intento de conexión posterior en este ejemplo es correcto siempre que uno de los siguientes casos sea verdadero:

    • Se cerró la primera conexión TCP. Esto quita el mapeo independiente del extremo entre 10.0.0.2:10001 y 192.0.2.10:30009, por lo que la tercera conexión se puede mapear a una dirección IP de origen de NAT y a una tupla del puerto de origen diferentes para comunicarse con 203.0.113.2:80 mediante TCP.
    • Se cerró la segunda conexión TCP. Esto libera 10.0.0.2:10001 para usar la dirección IP de origen y el puerto de origen 192.0.2.10:30009 a fin de comunicarse con 203.0.113.2:80 mediante TCP.
    • El tercer intento de conexión selecciona un puerto de origen efímero (interno) diferente. En este ejemplo, un mapeo independiente de extremos estableció un mapeo de varios a uno para direcciones IP de origen de NAT internas y los puertos de origen 10.0.0.2:10001 y 10.0.0.2:10002 a fin de usar 192.0.2.10:30009 cuando se realiza la comunicación con 203.0.113.2:80 mediante TCP. Si el tercer intento de conexión usa un puerto de origen efímero distinto de 10001 y 10002, existe la posibilidad de que se use una dirección IP de origen de NAT y un puerto de origen diferentes para comunicarse con 203.0.113.2:80 mediante TCP.

Para ver técnicas que puedas usar a fin de evitar conflictos, consulta Reduce los conflictos independientes de extremos.

Flujo de NAT

En este ejemplo, una VM con la dirección IP interna principal 10.240.0.4, sin dirección IP externa, debe descargar una actualización desde 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 de forma manual dos direcciones IP de NAT: 192.0.2.50 y 192.0.2.60
  • Se proporcionó 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 a fin de reservar la siguiente dirección IP de origen de NAT y las tuplas de puerto de origen para cada una de las VM en 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 de NAT 192.0.2.50 tiene 64 puertos sin reservar, por lo que la puerta de enlace reserva el siguiente conjunto de 64 direcciones IP de origen de NAT y de tuplas de puerto de origen para esa VM:

  • Desde 192.0.2.50:34000 hasta 192.0.2.50:34063

Sucede lo siguiente 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 IP de origen de NAT: 10.240.0.4, la dirección IP interna principal de la VM
    • Puerto de origen: 24000, el puerto de origen efímero que elige 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 IP de origen de NAT y el puerto de origen del paquete de solicitud. 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 IP de origen de NAT: 192.0.2.50, de una de las direcciones IP de origen de NAT y las tuplas de puerto 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 actualización envía un paquete de respuesta, ese paquete llega a la puerta de enlace nat-gw-us-east con estos atributos:

    • Dirección IP de origen de NAT: 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 IP de origen de NAT original del paquete de la 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 la traducción de direcciones de red de destino (DNAT) en el paquete de respuesta y reescribe 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 IP de origen de NAT: 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

Próximos pasos