¿Cómo se maneja el agotamiento del puerto NAT?

¿Cómo se maneja el agotamiento del puerto NAT?

"La traducción de dirección de puerto (PAT) resuelve los conflictos que surgen cuando varios hosts utilizan el mismo número de puerto de origen para establecer diferentes conexiones externas al mismo tiempo. PAT puede entonces asignar a la conexión un número de puerto de unconjunto de puertos disponibles, insertando este número de puerto en el campo del puerto de origen."

https://en.wikipedia.org/wiki/Network_address_translation

¿Qué pasa si tenemos decenas de servidores altamente escalables que aceptan miles de solicitudes? El agotamiento de puertos parece un límite muy básico (64k) que alcanzaremos fácilmente.

¿Cómo maneja la industria estos escenarios?

Respuesta1

Al final del día, NAT realmente se reduce a una tabla de búsqueda en el dispositivo NAT que contiene las asignaciones de qué conexiones van y dónde. Sin embargo, estas entradas de tabla se crean en unpor secciónbase.

Ex. Si tengo un anfitrión en10.10.10.10, deseando comunicarse con un servidor en Internet en8.8.8.8, a través de mi gateway de internet cuya IP pública es1.1.1.1, cuando ocurre esa comunicación, mi puerta de enlace de Internet puede crear un par de entradas con un aspecto similar a este:

Fuente Deporte Destino Puerto Comportamiento
10.10.10.10 20000 8.8.8.8 80 SNAT 10.10.10.10:20000 --> 1.1.1.1:40000
8.8.8.8 80 1.1.1.1 40000 ADNT 1.1.1.1:40000 --> 10.10.10.10:20000

Si bien puede parecer que1.1.1.1:40000ahora está ocupado para esta sesión, dejando ahora ~63999 puertos, esto no es exactamente cierto. Dado que estas entradas se realizan por sesión, sería perfectamente razonable que se produjeran comunicaciones posteriores y se construyera la tabla de esta manera:

Fuente Deporte Destino Puerto Comportamiento
10.10.10.10 20000 8.8.8.8 80 SNAT 10.10.10.10:20000 --> 1.1.1.1:40000
8.8.8.8 80 1.1.1.1 40000 ADNT 1.1.1.1:40000 --> 10.10.10.10:20000
10.10.10.10 20001 8.8.8.8 81 SNAT 10.10.10.10:20001 --> 1.1.1.1:40000
8.8.8.8 81 1.1.1.1 40000 ADNT 1.1.1.1:40000 --> 10.10.10.10:20001
10.10.10.10 20002 8.8.4.4 80 SNAT 10.10.10.10:20002 --> 1.1.1.1:40000
8.8.4.4 80 1.1.1.1 40000 ADNT 1.1.1.1:40000 --> 10.10.10.10:20002
10.10.10.10 20003 8.8.4.4 81 SNAT 10.10.10.10:20003 --> 1.1.1.1:40000
8.8.4.4 81 1.1.1.1 40000 ADNT 1.1.1.1:40000 --> 10.10.10.10:20003

Entonces, en la interfaz pública (que normalmente es donde le preocuparía el agotamiento de NAT), podemos ver que efectivamente hay 4 sesiones:

1.1.1.1:40000 --> 8.8.8.8:80
1.1.1.1:40000 --> 8.8.8.8:81
1.1.1.1:40000 --> 8.8.4.4:80
1.1.1.1:40000 --> 8.8.4.4:81

pero estas 4 sesiones no consumen totalmente 4 puertos y el dispositivo NAT sabe exactamente dónde se debe enrutar el tráfico perteneciente a cualquiera de estas 4 sesiones.

Entonces, si bien puede parecer que hay un límite de puerto de 64k, en realidad es más bien 64k por socket de destino (con algunas advertencias). No es inagotable, pero ciertamente es más escalable que un 64k plano.

información relacionada