Imagine un navegador que carga una página HTTPS mientras un cliente SSH llega a otro servidor y un resolutor responde a una consulta, todo a través de una sola sesión OpenVPN. En la interfaz física ve una conversación; dentro del túnel ve tres. Ambas vistas son correctas, y saber por qué es la diferencia entre una captura útil y una confusa. Siga un flujo interior desde el socket hasta el cable y el entramado de capas deja de ser abstracto.

Una conversación exterior, muchos flujos interiores

Cada aplicación abre su propio socket, y el núcleo le asigna una tupla de cinco elementos: dirección de origen, puerto de origen, dirección de destino, puerto de destino y protocolo. Esas tuplas existen antes de que intervenga ningún túnel. Después el enrutamiento decide que todas salen por el dispositivo de túnel, así que el paquete entregado a OpenVPN aún lleva dentro las cabeceras originales. OpenVPN cifra ese paquete interior y envuelve el resultado en una única conversación exterior UDP o TCP con el par. La conversación exterior es, por tanto, una, mientras que los flujos que contiene son tantos como aplicaciones se abrieron.

Nada colapsa. Las tuplas interiores sobreviven de extremo a extremo, y por eso el lado remoto todavía distingue los tres flujos.

El puerto que permanece fijo

Lo que permanece constante es la tupla exterior: su dirección, el puerto local que vinculó el cliente, la dirección del par y el puerto de servicio configurado. Esa tupla es la que debe permitir un cortafuegos o un NAT en el camino, y es la que mostrará una captura en el enlace ascendente. También es la que cambia tras una reconexión o un cambio de red, porque el cliente puede vincular otro puerto local. Un túnel no implica un puerto de origen fijo para siempre.

Los puertos interiores son lo que importa a los extremos. Un flujo HTTPS conserva el puerto de destino 443 dentro del túnel aunque el transporte exterior se sitúe en el puerto que haya configurado el operador. Los extremos de la aplicación nunca saben nada del exterior.

Qué cambia la desencapsulación en el extremo remoto

En el par se retira la capa exterior y lo que queda es el paquete interior. A partir de ahí, el reenvío y la política de acceso se aplican al destino y el protocolo interiores. El servidor web sigue recibiendo una conexión HTTPS, el demonio SSH sigue recibiendo SSH y el resolutor sigue recibiendo una consulta.

Por eso una regla que permite el transporte exterior no es la misma regla que permitir un servicio interno. La primera describe un camino; la segunda describe una autorización.

Un TCP exterior significa un solo flujo, no una sola conexión

Cuando el transporte exterior es UDP, el destino de cada flujo interior es independiente: un datagrama perdido afecta a una transferencia hasta su propia retransmisión. Cuando el transporte exterior es TCP, todos los flujos interiores comparten un único flujo de bytes fiable.

Ese flujo compartido es la parte que la gente pasa por alto. La recuperación ocurre una vez, para todo, así que un solo segmento perdido retrasa el tráfico de cada aplicación multiplexada dentro. Siguen siendo muchas conexiones en los extremos y una conexión en el cable, y es en el cable donde vive el efecto de cabeza de línea. El número de puertos a la escucha no le dice nada sobre esto, y por eso contar puertos es una mala forma de razonar sobre el rendimiento del túnel.

Describa su propia configuración con precisión

Nombre el tráfico interior seleccionado y el transporte exterior concreto que lo transporta, en lugar de decir que la máquina lo envía todo por un solo puerto. Los servicios locales, un segundo túnel y la otra familia de direcciones crean flujos que nunca entran en esta conversación. Una captura en el enlace ascendente muestra la tupla exterior; una captura dentro del túnel muestra las interiores.

Tome ambas y ponga las marcas de tiempo una al lado de la otra. Si necesita demostrar qué aplicación generó qué flujo interior, la tabla de sockets del equipo es el mejor instrumento, porque relaciona los puertos con los procesos directamente. Después anote la tupla exterior que observó y el momento en que la observó, porque la siguiente captura tras una reconexión puede mostrar legítimamente otras cifras.

Artículos relacionados