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 | Sí | Óptima |
3 | Asignación de una dirección IP pública a la máquina virtual | Estática, explícita | Sí | Aceptar |
4 | Acceso de salida predeterminado | Implícita | No | El peor |
1. Uso de la dirección IP de front-end de un equilibrador de carga para la salida mediante 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.
Cuando se configuran varias direcciones IP de front-end mediante reglas de salida, las conexiones salientes pueden provenir de cualquiera de las direcciones IP de front-end configuradas en la instancia de back-end. No se recomienda crear dependencias en las que se pueda seleccionar la dirección IP de front-end para las conexiones.
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
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
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
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 reciben el número de puertos definidos por la tabla, por cada 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 recibe 512 puertos. Si se agrega una segunda dirección IP de front-end, cada máquina virtual recibe 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 aplica la asignación de puertos predeterminada se puede calcular como: MIN(número 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.
Reutilización de puertos
Para las conexiones TCP, el balanceador de carga usa un solo puerto SNAT para cada IP y puerto de destino. En el caso de las conexiones a la misma dirección IP de destino, se puede reutilizar un único puerto SNAT siempre que el puerto de destino sea diferente. La reutilización no es posible cuando ya existe una conexión a la misma dirección IP y puerto de destino.
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.
Se pueden reutilizar puertos individuales para un número ilimitado de conexiones en las que se permite la reutilización (cuando la dirección IP o el puerto de destino son diferentes).
En el ejemplo de la tabla siguiente, una instancia de back-end con la IP privada 10.0.0.1 realiza conexiones TCP a las direcciones IP de destino 23.53.254.142 y 26.108.254.155, mientras que el equilibrador de carga está configurado con la dirección IP de front-end 192.0.2.0. Como las direcciones IP de destino son diferentes, se puede reutilizar el mismo puerto SNAT para varias conexiones.
Flujo | Tupla de origen | Tupla de origen después de SNAT | Tupla de destino |
---|---|---|---|
1 | 10.0.0.1:80 | 192.0.2.0:1 | 23.53.254.142:80 |
2 | 10.0.0.1:80 | 192.0.2.0:1 | 26.108.254.155:80 |
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 IPv4 secundarias de una interfaz de red no se admiten con reglas de salida. Para la conectividad saliente en configuraciones IPv4 secundarias, adjunte direcciones IP públicas de nivel de instancia o aproveche NAT Gateway en su lugar.
Pasos siguientes
- Solución de errores de conexiones salientes debidos a un agotamiento de SNAT
- Revise las métricas de SNAT y familiarícese con la manera correcta de filtrarlas, dividirlas y visualizarlas.
- Obtenga información sobre cómo migrar el método de conectividad de salida existente a una puerta de enlace NAT.