Redes y Sistemas

Enrutamiento selectivo en Linux

Aprende qué es el enrutamiento o ruteo, que tiene como misión encontrar la mejor ruta de una red, para ello te lo explicamos paso a paso en este artículo.

Publicado el 28 de Noviembre de 2018
Compartir

Aprende qué es el enrutamiento o ruteo, que tiene como misión encontrar la mejor ruta posible de una red, para ello te lo explicamos paso a paso en este artículo como encontrar y optimizar la mejor ruta..

¿Qué es el enrutamiento selectivo en Linux?

El enrutamiento selectivo es una de las posibles soluciones que existen a un problema, que en algunas ocasiones nos podemos encontrar, cuando modificamos la situación habitual en la que tenemos un escenario como el que vemos en esta imagen.

Esquema de un escenario de red habitual

La situación normal que podríamos tener en redes domésticas y también en muchas redes corporativa simples sería la que tenemos en la imagen.

Nuestro acceso internet los obtenemos a través de un router1, que es el router o dispositivo de nuestro proveedor de internet que nos permite el acceso a internet.

Detrás de ese router del proveedor, que simplemente lo que hace cambiar el tráfico que utiliza la tecnología del proveedor, por ejemplo tráfico de fibra, a una conexión Ethernet, lo normal cuando las redes tienen ciertas características, es que tuviésemos un dispositivo que actuase como cortafuegos, o bien un dispositivo que actuase como control de acceso a la red interna.

En un escenario normal, en el que tendríamos el router y además un dispositivo que controlase el tráfico correctamente, ya que las prestaciones que suelen tener estos dispositivos como el router son muy limitadas, complementamos el mismo conectando un segundo router de otro proveedor, es decir, lo que tendríamos serían dos accesos a internet conectado al mismo dispositivo, que podría distribuir ese acceso a internet de forma transparente a los equipos de la red local.

Lo que denominamos como enrutamiento selectivo, consiste en que, mediante el uso de la serie de herramientas en Linux, particularmente el uso de iptables y la herramienta iproute2, nos va a permitir seleccionar qué tipo de tráfico queremos enviar por una vía y qué tipo de tráfico queremos enviar por otra.

Esto podría hacerse en muchas situaciones diferentes, por ejemplo:

  • Podríamos optar por utilizar el router1 como acceso principal y el router2 tenerlo como respaldo, así en el caso de que el acceso principal caiga, lo que hacemos es desviar todo el tráfico al segundo router.
  • Podemos tener un balanceo en el que hacemos que el tráfico pase indistintamente por el router1 o el router2, con idea de aumentar el rendimiento o el ancho de banda del uso de los clientes.
  • O bien podemos hacer el uso que vemos en el gráfico anterior, que es un encaminamiento selectivo. En este caso lo que hacemos es analizar el tráfico que entra y en función de las características de ese tráfico, lo enviamos por un lado o lo enviamos por el otro.

De esta forma lo que hacemos es comprobar el tráfico que entra en el equipo, que normalmente es el tráfico de los clientes a internet, aunque también puede hacerse a la inversa.

Después seleccionamos el tráfico web, que normalmente es un tráfico pesado y que hace que caiga el rendimiento de otro tipo de tráfico, y lo enviamos a través del router2. Es decir, seleccionamos el tráfico que va con destino a los puertos 80 y 443, que es el tráfico web, y lo desviamos al router2, mientras que por el router1 dejamos pasar el resto del tráfico.

¿Cómo se hace el enrutamiento selectivo?

Esto se hace gracias a una funcionalidad que incorporan los sistemas Linux, que aunque estemos acostumbrados a utilizar una tabla encaminamiento, realmente los sistemas Linux pueden utilizar múltiples tabla de enrutamiento.

Podemos listar las diferentes tablas de enrutamiento que existen con el comando ip rule list, aunque realmente la tabla main es la que se utiliza por defecto.

¿Cuál es la solución?

La solución que se plantea a este problema consta de varios pasos:

  • Crear una nueva tabla de encaminamiento para el router2.
  • Marcar con ayuda de iptables los paquetes que cumplan un determinado criterio, en este caso el criterio sería los paquetes que vayan a los puertos 80 y 443.
  • Enviar a la nueva tabla los paquetes marcados.
  • Definimos la regla de enrutamiento de esta tabla.

Estos pasos los ejecutaríamos de la siguiente forma:

De esta forma el tráfico se analizará y cuando llegue una solicitud de un cliente que sea otro puerto diferente al 80 o al 443 saldrá por el router1, y cuando iptables detecte que es alguno de esos puertos lo marcará y después, a través de esta regla, se envía a la segunda tabla de encaminamiento con esa regla de enrutamiento por defecto, y saldrá por el router2.

Os dejamos un enlace a un artículo del blog, dónde está hecho todo este proceso con detalle por si queréis verlo más a fondo o probarlo, ya sea en esta configuración o en cualquier otra que se os ocurra.

Poder usar iptables e iproute para marcar y el modificar los paquetes es muy interesante, porque aunque es algo relativamente sencillo de hacer, realmente se está haciendo algo complejo y de mucha utilidad.

  1. Para crear una nueva tabla de encaminamiento llamada router2, ubicarla en /etc/iproute2/rt_tables y añadirla:
     
    echo 201 router2 >> /etc/iproute2/rt_tables
  2. Este es el paso más complejo y se hace utilizando la tabla de iptables llamada mangle, que permite marcar y modificar paquetes. Lo que hacemos es añadir una regla de prerouting, antes de que se tome la decisión de enrutamiento , para que los paquetes que entren por eth2 y que tienen origen en el direccionamiento que tenemos en la red local, y como destino algo diferente a la propia máquina que actúa como router, en este caso los puertos 80 y 443 de tcp, es decir, el tráfico web, los marcamos con la marca número 1:
     
    iptables -t mangle -A PREROUTING -i eth2 -s 172.16.0.0/16 \! -d 172.16.0.1 -p tcp -m multiport --dports 80, 443 -j MARK \ --set-mark 1
  3. Una vez tenemos marcados esos paquetes, gracias a ip rule lo que hacemos que los que tengan la marca 1 le correspondan la tabla de encaminamiento del router2:
     
    ip rule add fwmark 1 table router2
  4. Finalmente definimos un regla de enrutamiento, es decir, indicamos que la regla de encaminamiento por defecto, la 192.168 2.1, que es la dirección del router1, la añadimos a la tabla del router2:
     
    ip route add default via 192.168.2.1 dev eth1 table router2

Si quieres aprender en profundidad sobre Iptables, puedes hacer el curso de nuestro profesor experto Alberto Molina de esta herramienta, en el que te enseña paso a paso cómo crear un cortafuegos con Iptables.

curso-iptables

Recuerda que puedes comenzar este curso con tu suscripción en OpenWebinars. Si todavía no estás suscrito, aprovecha para hacerlo ahora.


Compartir este post

También te puede interesar...

Curso de IPv6

Curso de IPv6

2 horas y 39 minutos · Curso

Con el curso de IPv6 conoce las principales características del protocolo IPv6 y aprender a configurar los equipos con direcciones IPv6 de forma manual o …

  • Redes
Redes TCP/IP

Curso de fundamentos de Redes: TCP/IP

4 horas y 48 minutos · Curso

Consigue comprender las características principales de la pila de protocolos de Internet TCP/IP para ser capaz de configurar y utilizar configuraciones de red básicas.

  • Redes
Curso de iptables

Curso de Iptables

4 horas y 50 minutos · Curso

Conoce qué es un cortafuegos y cómo se implementa de forma práctica con iptables

  • Redes
Artículos
Ver todos