How to: Convertir nuestro Linux en un router

En esta pequeña guía vamos a ver cómo podemos hacer que nuestra máquina Linux se comporte como un router, pudiendo usar para gestionar nuestras redes protocolos de enrutamiento como RIPv2, OSPF, BGP y IS-IS.

Para lograr esto vamos a instalar en nuestra máquina Linux -en nuestro caso un Mint- un paquete llamado quagga (zebra), el cual nos va a permitir por medio de distintos demonios configurar uno o varios protocolos de enrutamiento, en este caso RIPv2. Para ello desde nuestra terminal ejecutaremos el siguiente comando (yo los ejecuto como root, pero se puede usar sudo):

apt-get install quagga


Una vez instalado lo primero que hay que hacer es mirar en el directorio /etc/quagga si existen los ficheros de configuración, en caso de que no estén se pueden copiar desde /usr/share/docs/quagga/examples. En mi caso tengo que copiarlos, por tanto ejecuto el siguiente comando en el terminal:

cp /usr/share/docs/quagga/examples/*.conf.* /etc/quagga

Ahora creo los archivos de configuración a partir de estos ejemplos, para ello ejecuto los siguientes comandos desde el directorio /etc/quagga:

cp zebra.conf.sample zebra.conf
cp ripd.conf.sample ripd.conf

De esta manera obtengo los archivos de configuración y dejo los ejemplos como backups. Una vez creados los archivos de configuración no hace falta editarlos ahora ya que lo haremos mediante sus respectivos ejecutables, para ello ejecutamos zebra y en este caso ripd mediante los siguientes comandos:

/usr/lib64/quagga/zebra -d
/usr/lib64/quagga/ripd -d

En el caso de no disponer de una máquina de 64 bits, los ejecutables estarán en la ruta /usr/lib64/quagga/. La opción -d es para que se ejecuten como demonios. Para aclarar un poco la situación el demonio zebra define el dispositivo en si, es decir, vendría a representar un 'router virtual'. En este demonio configuraremos las tarjetas de red del router virtual, contraseñas de acceso, veremos información acerca de las rutas conocidas, etc... El demonio ripd únicamente se encarga de gestionar el protocolo rip, es decir, se encargara de publicar las redes que tiene directamente conectadas y de aprender las que le llegan de otros dispositivos.

Lo que viene a partir de aquí ya no entraría dentro del apartado de sistemas sino más bien en el de redes, por tanto no entraré en excesivo detalle para no hacerlo demasiado pesado. Para no hacerlo muy largo y complejo lo que se va a configurar va a ser lo siguiente (con máquinas virtuales), y solo configuraremos la máquina de la izquierda, ya que la derecha será igual pero cambiando los valores.

diagrama


Para acceder a la configuración del 'router virtual' haremos un telnet a nuestra máquina al puerto 2601. Importante lo del puerto ya que para cada demonio de quagga se accede por un puerto distinto, se pueden ver en el siguiente listado:

zebra: 2601
ripd: 2602
ripng: 2603
ospfd: 2604
bgpd: 2605
ospf6d: 2606

Por tanto para configurar zebra o el 'router virtual' ejecutamos lo siguiente:

telnet localhost 2601

Nos pedirá una contraseña que por defecto es zebra, la introducimos y nos aparecerá el prompt del 'router virtual'. A continuación configuraremos las tarjetas de la siguiente manera:

1. Router> ena
2. Password:zebra
3. Router# conf t
4. Router(config)# inter eth1
5. Router(config-if)# ip addr 192.168.1.220/24
6. Router(config-if)# inter eth2
7. Router(config-if)# ip addr 172.16.0.20/16
8. Router(config-if)# exit
9. Router(config)# exit
10. Router# wr
11. Configuration saved to /etc/quagga/zebra.conf
12. Router#exit

1. Entramos en el modo de ejecución privilegiada.
2. Nos pide el password, por defecto al igual que antes es zebra.
3. Entramos en el modo de configuración del dispositivo.
4. Entramos en la configuración para la interfaz eth1.
5. Le asignamos a eth1 la dirección ip 192.168.1.220 con mascara 255.255.255.0.
6. Entramos en la configuración para la interfaz eth2.
7. Le asignamos a eth2 la dirección ip 172.16.0.20 con mascara 255.255.0.0.
8. Salimos al modo de configuración del dispositivo.
9. Salimos al modo de ejecución privilegiada.
10. Guardamos la configuración
11. Nos informa que la configuración se ha guardado en /etc/quagga/zebra.conf.
12. Salimos de la configuración de zebra.

Ahora el 'router virtual' ya sabe lo que tiene conectado y como está configurado. El siguiente paso es configurar el protocolo RIPv2 para que empiece a compartir información sobre las redes que tiene conectadas, y pueda recibir información de cómo acceder a otras redes. Para ello nos conectaremos mediante telnet al equipo local, pero esta vez a través del puerto 2602, ejecutamos:

telnet localhost 2602

Nos vuelve a pedir un password, y si, sigue siendo zebra. Una vez dentro ejecutaremos los siguientes comandos para habilitar rip

1. ripd> ena
2. ripd# conf t
3. ripd(config)# router rip
4. ripd(config-router)# version 2
5. ripd(config-router)# net 192.168.1.0/24
6. ripd(config-router)# net 172.16.0.0/16
7. ripd(config-router)# exit
8. ripd(config)# exit
9. ripd# wr
10. Configuration saved to /etc/quagga/ripd.conf
11. ripd# exit

1. Entramos en el modo de ejecución privilegiada.
2. Entramos en el modo de configuración del dispositivo. En este caso solo configuraremos lo concerniente al protocolo RIPv2.
3. Entramos en el modo de configuración de RIP.
4. Establecemos v2 como la versión de ejecución del protocolo.
5. 'Publicamos' la red 192.168.1.0 con máscara 255.255.255.0.
6. 'Publicamos' la red 172.16.0.0 con máscara 255.255.0.0.
7. Salimos al modo de configuración del dispositivo.
8. Salimos al modo de ejecución privilegiada.
9. Guardamos la configuración.
10. Nos confirma que la configuración se ha guardado en /etc/quagga/ripd.conf.
11. Salimos de la configuración de ripd.

Para finalizar comprobamos si todo funciona correctamente, para eso nos conectamos a nuestro 'router virtual' mediante telnet y al puerto 2601. Una vez dentro ejecutamos el siguiente comando para ver el estado de RIP.

Router# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

K>* 0.0.0.0/0 via 192.168.1.1, eth1
R>* 10.0.2.0/24 [120/2] via 172.16.0.10, eth2, 00:39:29
C>* 127.0.0.0/8 is directly connected, lo
C>* 172.16.0.0/16 is directly connected, eth2
C>* 192.168.1.0/24 is directly connected, eth1
Router# exit

Por no complicarlo mucho lo que nos dice la línea remarcada, a grandes rasgos, es que para llegar a la red 10.0.2.0/24 tiene que hacerlo a través de la interfaz local eth2, y que tiene que enviar los paquetes hacia 172.16.0.10, que es la dirección del siguiente salto.

Para finalizar solo nos queda configurar quagga para que arranque zebra y ripd cuando se inicie nuestra máquina Linux. Esto se consigue editando el archivo de configuración /etc/quagga/daemons dejandolo de la siguiente manera:

# Comentarios
zebra=yes
bgpd=no
ospfd=no
ospf6d=no
ripd=yes
ripngd=no
isisd=no

Y con esto finalizamos todas las configuraciones necesarias. Si queréis probar con otros protocolos de enrutamiento o hacer algo más complejo, os dejo unos enlaces a la documentación de la página oficial de quagga.


Lo has visto primero en CeroWarnings. Recuerda que puedes dejarnos tus peticiones en nuestro Buzón de Sugerencias.