Uso de traducción de direcciones de red de origen (SNAT) con las conexiones salientes

Algunos escenarios requieren que las máquinas virtuales o las instancias de proceso tengan conectividad de salida a Internet. Las direcciones IP de front-end de un equilibrador de carga público se pueden usar para proporcionar conectividad saliente a Internet en las instancias de back-end. Esta configuración usa la traducción de direcciones de red de origen (SNAT) para traducir la dirección IP privada de la máquina virtual a la dirección IP pública del equilibrador de carga. SNAT asigna la dirección IP del back-end a la dirección IP pública del equilibrador de carga. SNAT impide que los orígenes externos tengan una dirección directa a las instancias de back-end.

Métodos de conectividad de salida de Azure

Los métodos siguientes son los que más utiliza Azure para habilitar la conectividad de salida:

# Método Tipo de asignación de puertos ¿De nivel de producción? Rating
1 Uso de las direcciones IP de front-end de un equilibrador de carga para la salida mediante reglas de salida Estática, explícita Sí, pero no a gran escala Aceptar
2 Asociación de una puerta de enlace NAT a la subred Dinámica, explícita Óptima
3 Asignación de una dirección IP pública a la máquina virtual Estática, explícita Aceptar
4 Acceso de salida predeterminado Implícita No El peor

Diagrama de las opciones de salida de Azure.

1. Uso de la dirección IP de front-end de un equilibrador de carga para la salida mediante reglas de salida

Diagrama del equilibrador de carga público con reglas de salida.

Las reglas de salida permiten definir de forma explícita SNAT (traducción de direcciones de red de origen) para un equilibrador de carga público de SKU estándar. Esta configuración permite usar las direcciones IP públicas del equilibrador de carga para la conectividad saliente de las instancias de back-end.

Esta configuración habilita:

  • El enmascaramiento de IP

  • La simplificación de las listas de permitidos

  • La reducción del número de recursos de IP pública para la implementación

Con las reglas de salida, tiene un control declarativo completo sobre la conectividad saliente de Internet. Las reglas de salida le permiten escalar y ajustar esta capacidad a sus necesidades específicas mediante la asignación manual de puertos. La asignación manual de puertos SNAT en función del tamaño del grupo de back-end y el número de frontendIPConfigurations puede ayudar a evitar el agotamiento de SNAT.

Puede asignar manualmente los puertos SNAT por "puertos por instancia" o por "número máximo de instancias de back-end". Si hay máquinas virtuales en el back-end, se recomienda asignar los puertos por "puertos por instancia" para obtener el uso máximo de puertos SNAT.

Calcula los puertos por instancia de la siguiente manera:

Número de direcciones IP de front-end * 64 000 / número de instancias de back-end

Si hay conjuntos de escalado de máquinas virtuales en el back-end, se recomienda asignar los puertos por "número máximo de instancias de back-end". Si se agregan más máquinas virtuales al back-end de los puertos SNAT restantes permitidos, es posible que se bloquee el escalado horizontal de Microsoft Azure Virtual Machine Scale Sets o que las nuevas máquinas virtuales no reciban suficientes puertos SNAT.

Para obtener más información sobre las reglas de salida, consulte Reglas de salida.

2. Asociación de una puerta de enlace NAT a la subred

Diagrama de una puerta de enlace NAT y un equilibrador de carga público.

Azure NAT Gateway simplifica la conectividad a Internet que sea solo de salida para redes virtuales. Cuando se configura en una subred, todas las conexiones salientes usan las direcciones IP públicas estáticas que se hayan especificado. La conectividad saliente es posible sin que el equilibrador de carga ni las direcciones IP públicas estén conectados directamente a máquinas virtuales. NAT Gateway está totalmente administrado y es muy resistente.

El uso de una puerta de enlace NAT es el mejor método para la conectividad saliente. Las puertas de enlace NAT tienen gran capacidad de ampliación, son muy confiable y no tienen los mismos problemas de agotamiento de puertos SNAT.

La puerta de enlace NAT tiene prioridad sobre otros métodos de conectividad salientes, como un equilibrador de carga, direcciones IP públicas de nivel de instancia y Azure Firewall.

Para obtener más información sobre Azure NAT Gateway, consulte Qué es Azure NAT Gateway.

3. Asignación de una dirección IP pública a la máquina virtual

Diagrama de máquinas virtuales con direcciones IP públicas a nivel de instancia.

Asociaciones Método Protocolos IP
IP pública en la NIC de la VM No se usa SNAT (traducción
de direcciones de red de origen).
Protocolo de control de transmisión (TCP)
Protocolo de datagramas de usuario (UDP)
Protocolo de mensajes de control de Internet (ICMP)
Carga de seguridad encapsuladora (ESP)

El tráfico regresa al cliente solicitante desde la dirección IP pública de la máquina virtual (IP de nivel de instancia).

Azure usa la dirección IP pública asignada a la configuración IP de la NIC de la instancia para todos los flujos de salida. La instancia tiene disponibles todos los puertos efímeros. Es irrelevante si la máquina virtual es de carga equilibrada o no. Este escenario tiene prioridad sobre los demás, excepto para NAT Gateway.

Una dirección IP pública asignada a una máquina virtual es una relación 1:1 (en lugar de 1:muchos) y se implementa como NAT de 1:1 sin estado.

4. Acceso de salida predeterminado

Diagrama del acceso de salida predeterminado.

En Azure, a las máquinas virtuales creadas en una red virtual sin conectividad de salida explícita definida se les asigna una dirección IP pública de salida predeterminada. Esta dirección IP permite la conectividad de salida desde los recursos a Internet. Este acceso se conoce como acceso de salida predeterminado. Este método de acceso no se recomienda, ya que no es seguro y las direcciones IP están sujetas a cambios.

Importante

El 30 de septiembre de 2025, se retirará el acceso de salida predeterminado para las nuevas implementaciones. Para obtener más información, consulte el anuncio oficial. Se recomienda usar una de las formas explícitas de conectividad que se muestran en las opciones 1-3 anteriores.

¿Qué son los puertos SNAT?

Se usan puertos para generar identificadores únicos que se emplean para mantener flujos distintos. Internet usa una tupla de cinco elementos para proporcionar esta distinción.

Si se usa un puerto para las conexiones entrantes, tendrá un agente de escucha para las solicitudes de conexión entrantes en ese puerto. Recuerde que ese puerto no se puede usar para las conexiones salientes. Para establecer una conexión saliente, se usa un puerto efímero para proporcionar al destino un puerto con el que comunicarse y mantener un flujo de tráfico distinto. Cuando estos puertos efímeros se usan para la SNAT, se denominan puertos SNAT.

Por definición, todas las direcciones IP tienen 65 535 puertos. Cada puerto se puede usar para las conexiones de entrada o salida para TCP (Protocolo de control de transmisión) y UDP (Protocolo de datagramas de usuario). Cuando se agrega una dirección IP pública como una IP de front-end a un equilibrador de carga, hay 64 000 puertos aptos para SNAT.

Los puertos que se usan en una regla NAT de entrada o en el equilibrio de carga consumen cada uno un intervalo de ocho puertos de los 64 000 SNAT disponibles. Este uso reduce el número de puertos aptos para SNAT si se usa la misma dirección IP de front-end para la conectividad saliente. Si los puertos consumidos por reglas NAT de entrada o de equilibrio de carga están en el mismo bloque de ocho puertos consumidos por otra regla, las reglas no requieren puertos adicionales.

Nota

Si necesita conectarse a cualquier servicio de PaaS de Azure compatible, como Azure Storage, Azure SQL o Azure Cosmos DB, puede usar Azure Private Link para evitar SNAT por completo. Azure Private Link envía el tráfico de la red virtual a los servicios de Azure mediante la red troncal de Azure en lugar de mediante Internet.

Private Link es la opción recomendada sobre puntos de conexión de servicio para el acceso privado a los servicios hospedados de Azure. Para más información sobre la diferencia entre Private Link y los puntos de conexión de servicio, consulte Comparación de puntos de conexión privados y puntos de conexión de servicio.

¿Cómo funciona SNAT predeterminado?

Cuando la máquina virtual crea un flujo de salida, Azure traduce la dirección IP de origen a una dirección IP efímera. Esta traducción se realiza a través de SNAT.

Si se SNAT sin reglas de salida a través de un balanceador de carga público, los puertos SNAT se asignan previamente como se describe en la siguiente tabla de asignación de puertos SNAT predeterminados:

Tabla de asignación de puertos predeterminados

Cuando se seleccionan reglas de equilibrio de carga para usar la asignación de puertos predeterminada, o las reglas de salida se configuran con "Usar el número predeterminado de puertos de salida", los puertos SNAT se asignan de forma predeterminada en función del tamaño del grupo de back-end. Los back-end recibirán el número de puertos definidos por la tabla, por IP de front-end, hasta un máximo de 1024 puertos.

Por ejemplo, con 100 máquinas virtuales en un grupo de back-end y solo una dirección IP de front-end, cada máquina virtual recibirá 512 puertos. Si se agrega una segunda dirección IP de front-end, cada máquina virtual recibirá 512 puertos adicionales. Esto significa que a cada máquina virtual se le asigna un total de 1024 puertos. Como resultado, agregar una tercera dirección IP de front-end NO aumentará el número de puertos SNAT asignados más allá de 1024 puertos.

Como regla general, el número de puertos SNAT proporcionados cuando se aprovecha la asignación de puertos predeterminada se puede calcular como: MIN(nro. de puertos SNAT predeterminados proporcionados en función del tamaño del grupo * número de direcciones IP de front-end asociadas al grupo, 1024)

En la tabla siguiente se muestran las asignaciones previas del puerto SNAT para una única dirección IP de front-end, en función del tamaño del grupo de back-end:

Tamaño del grupo (instancias de máquina virtual) Puertos SNAT predeterminados
1-50 1024
51-100 512
101-200 256
201-400 128
401-800 64
801-1000 32

Agotamiento de puertos

Cada conexión a la misma IP de destino y puerto de destino utiliza un puerto SNAT. Esta conexión mantiene un flujo de tráfico distinto desde la instancia de back-end o cliente a un servidor. Este proceso proporciona al servidor un puerto distinto en el que dirigir el tráfico. Sin este proceso, el equipo cliente no sabe a qué flujo pertenece un paquete.

Imagine que varios exploradores van a https://www.microsoft.com, que tiene los valores siguientes:

  • Dirección IP de destino = 23.53.254.142

  • Puerto de destino = 443

  • Protocolo = TCP

Sin puertos SNAT para el tráfico de retorno, el cliente no tiene forma de separar el resultado de una consulta de otro.

Las conexiones salientes pueden aumentar. Una instancia de back-end podría tener asignados puertos insuficientes. Use la funcionalidad de reutilización de conexiones en la aplicación. Si la reutilización de conexiones no está habilitada, aumenta el riesgo de agotamiento de puertos de SNAT.

Para obtener más información sobre la agrupación de conexiones con Azure App Service, consulte Solución de problemas de errores intermitentes de conexión saliente en Azure App Service.

Las nuevas conexiones salientes a una IP de destino fallan cuando se agota el puerto. Las conexiones se realizan correctamente cuando un puerto está disponible. Este agotamiento se produce cuando los 64 000 puertos de una dirección IP se distribuyen entre muchas instancias de back-end. Para obtener instrucciones sobre la mitigación del agotamiento de puertos SNAT, consulte la guía de solución de problemas.

Para las conexiones TCP, el balanceador de carga usa un solo puerto SNAT para cada IP y puerto de destino. Este uso múltiple permite varias conexiones a la misma dirección IP de destino con el mismo puerto SNAT, pero se limita si la conexión no es a puertos de destino diferentes.

En el caso de las conexiones UDP, el equilibrador de carga usa un algoritmo de NAT de cono con restricción de puerto, que consume un puerto SNAT por cada IP de destino, sea cual sea el puerto de destino.

Un puerto se reutiliza para un número ilimitado de conexiones. El puerto solo se reutiliza si la dirección IP o puerto de destino son diferentes.

Restricciones

  • Cuando una conexión está inactiva y no se envían paquetes nuevos, los puertos se liberarán después de un intervalo entre 4 y 120 minutos.

  • Este umbral se puede configurar a través de reglas de salida.

  • Cada dirección IP proporciona 64 000 puertos que se pueden usar para SNAT.

  • Cada puerto se puede usar para conexiones TCP y UDP con una dirección IP de destino.

  • Se necesita un puerto SNAT UDP tanto si el puerto de destino es único como si no. Para cada conexión UDP con una dirección IP de destino, se usa un puerto SNAT UDP.

  • Se puede usar un puerto SNAT TCP para varias conexiones con la misma dirección IP de destino, siempre que los puertos de destino sean diferentes.

  • El agotamiento de SNAT se produce cuando una instancia de back-end se ejecuta fuera de los puertos SNAT establecidos. Un equilibrador de carga puede tener puertos SNAT sin usar. Si los puertos SNAT usados de una instancia de back-end superan los puertos SNAT proporcionados, no se podrá establecer nuevas conexiones salientes.

  • Los paquetes fragmentados se descartan a menos que la salida sea a través de una IP pública de nivel de instancia en la NIC de la VM.

  • Las configuraciones IP secundarias de una interfaz de red no proporcionan comunicación de salida (a menos que una dirección IP pública esté asociada a ella) a través de un equilibrador de carga.

Pasos siguientes