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.
Los puertos por instancia se deben calcular como se indica a continuación:
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 que puertos SNAT restantes permitidos, es posible que el escalado horizontal del conjunto de escalado de máquinas virtuales se bloquee o que las nuevas máquinas virtuales no obtengan 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
Virtual Network NAT simplifica la conectividad a Internet solo de salida en las 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. La NAT está totalmente administrada 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.
Para obtener más información sobre Azure Virtual Network NAT, consulte ¿Qué es Azure Virtual Network NAT?
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 volverá 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 las demás.
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
Nota:
Este método NO se recomienda para cargas de trabajo de producción, ya que aumenta el riesgo de que se agoten los puertos. No use este método para cargas de trabajo de producción para evitar posibles errores de conexión.
Los recursos de Azure que no tengan una dirección IP pública asociada, que no tengan un equilibrador de carga con reglas de salida delante, que no formen parte del modo de orquestación flexible de conjuntos de escalado de máquinas virtuales o que no tengan un recurso de puerta de enlace NAT asociado a su subred tienen asignado un número mínimo de puertos para la salida. Este acceso se conoce como acceso de salida predeterminado y es el peor método para proporcionar conectividad de salida a las aplicaciones.
Algunos otros ejemplos de acceso de salida predeterminado son:
- Uso de un equilibrador de carga de SKU básica
- Una máquina virtual de Azure (sin las asociaciones mencionadas anteriormente). En este caso, la IP de acceso de salida predeterminada proporciona la conectividad de salida. Esta IP es dinámica, la asigna Azure y no se puede controlar. No se recomienda la SNAT predeterminada para cargas de trabajo de producción, ya que puede provocar errores de conectividad.
- Una máquina virtual en el grupo de back-end de un equilibrador de carga sin reglas de salida. Como resultado, se usa la dirección IP de front-end de un equilibrador de carga para la salida y la entrada, y es más propenso a errores de conectividad debido al agotamiento del puerto SNAT.
¿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. Aunque se pueden asignar todas las IP públicas que se agregan como IP de front-end, las IP de front-end se consumen de una en una. Por ejemplo, si dos instancias de back-end tienen asignados 64 000 puertos cada una, con acceso a dos IP de front-end, ambas instancias de back-end consumirán puertos de la primera dirección IP de front-end hasta que se hayan agotado los 64 000 puertos.
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 usados en el equilibrio de carga o las reglas NAT de entrada se encuentran en el mismo bloque de ocho puertos consumidos por otra regla, no necesitará más puertos.
¿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 usa SNAT sin reglas de salida a través de un equilibrador de carga público, los puertos SNAT se asignan previamente como se describe en la siguiente tabla de asignación predeterminada de puertos SNAT.
Tabla de asignación de puertos predeterminados
En la tabla siguiente se muestran las asignaciones previas de puertos SNAT para los tamaños del grupo de back-end:
Tamaño del grupo (instancias de máquina virtual) | Puertos SNAT predeterminados por cada configuración IP |
---|---|
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 dirección IP de destino y puerto de destino usará 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 de destino diferentes para el tráfico de retorno (el puerto SNAT usado para establecer la conexión), el cliente no tendrá 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.
Se producirá un error en las nuevas conexiones salientes a una dirección IP de destino cuando se agoten los puertos. Las conexiones se realizarán correctamente cuando esté disponible un puerto. 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.
En el caso de las conexiones TCP, el equilibrador de carga usará 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 sus puertos SNAT, no podrá establecer nuevas conexiones salientes.
Los paquetes fragmentados se descartarán, salvo que la salida se realice a través de una IP pública de nivel de instancia en la NIC de la máquina virtual.
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
- 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.