Rutas asimétricas, luego entonces te tratan como un idiota.

Hace unos días recibí la encomienda de montar unos firewalls para dos de nuestras oficinas. Esto en lo que llegan los equipos que se compraron.

Primeramente pensé en un Linux como router, y hacer las rutas y reglas a mano. Como no es mi fuerte y no tenía mucho tiempo. Hice una investigación de mercado y 10 minutos después decidí usar Pfsense. Una distribución  de BSD especializada en firewall. Todo bien hasta ahí.

Lo bajé, lo instalé en un equipo que ya nadie quería y lo puse en lugar del firewall antiguo.

Quiero aclarar que no es mi trabajo administrar esta red, simplemente me dieron esta tarea. Así que para configurar el firewall, requerí preguntar a quien administra la red, datos como rangos de IP, rutas necesarias, routers, direcciones de dispositivos, etc.

En cuanto tuve un panorama de la topología de la red, supe que había algo extraño, muy posiblemente incorrecto. Cosa que comprobé después. Múltiples routers en la misma subred.

 

Si bien esto no era obvio a primera vista, descubrí que el switch que une todas las computadoras, puede y estaba haciendo ruteo en capa tres. Esto por si mismo no es problema, pero el hecho de que conviva con el firewall en la misma subred lo es, ya que el firewall se puede ver como un router básico con un filtro.

 

Rutas simétricas.

Idealmente los paquetes TCP/IP, deberían seguir rutas simétricas entre dos equipos. Una ruta simétrica implica que un paquete del equipo A al equipo D, sigue un camino como:

A->B->C->D

Cuando el equipo D contesta el mensaje, el paquete de respuesta sigue una ruta inversa.

D->C->B->A

 

Cuando los caminos son diferentes se trata de una ruta asimétrica.

Si bien este fenómeno no es muy importante para los routers, si es importante para los firewall. En especial es importante cuando la ruta de regreso, se salta el firewall.En la práctica es normal que los caminos se ajusten y se observen rutas asimétricas en algún momento.

 

Existen dos tipos básicos de paquete IP. UDP y TCP. Hay otros pero los que se usan generalmente para comunicar cosas en internet y en las redes, son UDP o TCP.

La diferencia fundamental es que en UDP, cada paquete es independiente del anterior y del siguiente. A este tipo de paquetes no les importa las rutas asimétricas. Con que lleguen a su destino en un tiempo razonable es suficiente. No importa el camino.

Los paquetes TCP establecen una “sesión” y cada paquete está etiquetado y tienen un orden. Si un paquete por alguna causa llega antes que otro que salió antes, el equipo que lo recibe, lo hará esperar hasta que llegue el que va antes.

Si un paquete UDP se pierde, es responsabilidad de la aplicación que controla la comunicación, hacer algo para remediar la situación.

Si un paquete TCP se pierde, es responsabilidad del protocolo (TCP/IP) manejar la retransmisión del paquete faltante.

 

Los firewall modernos, además de filtrar los paquetes por origen, destino, tipo y puerto, están al pendiente de la sesión a la que pertenece el paquete (stateful). Y es esto lo que hace que el problema, sea un problema.

 

Una ruta asimétrica que evita el firewall de regreso, deja al firewall en espera de un paquete que nunca llegará. Sin embargo, el paquete si llega a su destino, y la maquina que lo recibe lo procesará felizmente y seguirá enviando más paquetes, por ejemplo solicitando otra parte una página web.

Cuando el nuevo paquete llega al firewall, este se encuentra aun en espera del paquete de respuesta. Muy posiblemente el firewall deje pasar el nuevo paquete en lo que espera la respuesta, o lo haga esperar con la esperanza de enviarlos en orden (no estoy seguro de cual es el comportamiento correcto o si puede variar según la marca o la situación). Sin embargo, con el paso del tiempo, el firewall se da por vencido y piensa que el paquete se ha perdido para siempre y que ninguna retransmisión ha llegado tampoco. Piensa que la sesión ha fracasado y la borra de su memoria.

 

Cuando llega un nuevo paquete marcado como parte de esa sesión, el firewall no lo reconoce como parte de una sesión válida, y piensa que es un paquete falso o incorrecto. Por lo que lo descarta e interrumpe la comunicación.

 

Cuando explique esto a mis compañeros de trabajo, me oyeron “atentamente” y siguieron trabajando. Me sentí ignorado. Pensé que no había sido claro y volví a insistir un poco más. Igual resultado.

 

Al final llegué a la conclusión que ni siquiera consideraron mi argumento, pues me ven como un idiota que piensa que sabe de redes.

Una simple búsqueda en google por rutas asimétricas listará una serie de artículos que hablan de este fenómeno. El simple hecho de que se mencione en internet no lo hace verdadero, pero si demuestra que al menos más de una persona considera que esto es importante como para mencionarse. Esto por si solo debería generar una señal de alerta, al menos para investigar y documentarse, si la explicación que di no es convincente o completamente correcta.

 

Desde hace cuatro días han  estado experimentado problemas que yo atribuyo a esta situación. Y han estado corrigiendo los problemas con casos especiales en las reglas de ruteo.

 

Los síntomas incluyen desconexiones aleatorias, inestabilidad en la red, pruebas de ping que funcionan entre dos equipos, con tiempos variables entre una prueba y otra, pero no una conexión Telnet. Trazas internas que varían cuando se ejecutan varias veces, que siendo un ambiente controlado con rutas estáticas no debería.

Me cuesta mucho trabajo mantenerme al margen, ni siquiera me siento contento de tener razón y que ellos estén sufriendo por una situación que pudieron haber prevenido haciéndome caso. Me frustra que estén tan ciegos, que estoy seguro nunca sabrán que el loquito este, tenía razón.

 

 

Good riddance!

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *