Spiga

RIP v2 en Linux con Quagga

¡Hola!

Hoy vamos a ver cómo se configura el encaminamiento dinámico en routers Linux, ya que no lo soportan de forma nativa. Para ello vamos a utilizar la suite Quagga, que incorpora implementaciones de OSPFv2, OSPFv3, RIP v1 y v2, RIPng y BGP-4 para plataformas Unix (FreeBSD, Linux, Solaris y NetBSD) y permite modificar la configuración de los equipos a través de las órdenes típicas del Cisco IOS.

Arquitectura de Quagga

Quagga está compuesto por varios daemons que trabajan de forma colaborativa para construir la tabla de encaminamiento. Por ejemplo, el daemon ripd maneja el protocolo RIP, mientras el daemon ospfd es el que soporta el protocolo OSPF. Para realizar los cambios en la tabla de encaminamiento del kernel y para la redistribución de las rutas entre diferentes protocolos, se utiliza el daemon zebra.



Instalación

Si quisiéramos realizar una instalación en producción con una configuración compleja, sería preferible descargar el código para configurarlo y compilarlo con las opciones deseadas. Para este ejemplo, sin embargo, instalaremos el paquete disponible en el repositorio de Debian.

#aptitude install quagga

Los daemons de quagga tienen su propio terminal o VTY (un CLI) al que nos conectaremos por telnet para su configuración. Tras la instalación, podemos comprobar cómo se han añadido al fichero /etc/services las siguientes entradas:


Configuración de RIPv2

La primera tarea consiste en editar el fichero /etc/quagga/daemons para activar los protocolos que queremos configurar en nuestra máquina y reiniciar el servicio:

#nano /etc/quagga/daemons

zebra=yes
bgpd=no
ospfd=no
ospf6d=no
ripd=yes
ripngd=no


#/etc/init.d/quagga restart

A continuación tenemos que crear un fichero de configuración para cada daemon activado. Cada daemon tiene asociado un fichero con un nombre específico:

zebra:
bgpd:
ospfd:
ospf6d:
ripd:
ripngd:
zebra.conf
bgpd.conf
ospfd.conf
ospf6d.conf
ripd.conf
ripngd.conf

Para crear los ficheros de configuración, podemos copiar los archivos de ejemplo que incorpora la documentación:

#cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf
#cp /usr/share/doc/quagga/examples/ripd.conf.sample /etc/quagga/ripd.conf

Para terminar, tenemos que cambiar los permisos, el propietario y el grupo de estos ficheros:

#chown quagga:quaggavty /etc/quagga/*.conf
#chmod 640 /etc/quagga/*.conf

Y reiniciamos el servicio:

#/etc/init.d/quagga restart

Ya podemos comenzar a configurar el encaminamiento dinámico, para lo que nos conectaremos por telnet al VTY del daemon ripd. Nos pedirá una contraseña: por defecto es zebra, pero puedes cambiarla en el fichero /etc/quagga/ripd.conf:

#telnet localhost ripd

Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

User Access Verification

Password:
ripd>

Y ya podríamos configurar nuestra máquina Linux para trabajar con RIP usando los comandos típicos del Cisco IOS:

ripd> enable
ripd# configure terminal
ripd(config)# router rip
ripd(config-router)# network 10.0.0.0/8
ripd(config-router)# network 20.0.0.0/8
ripd(config-router)# exit
ripd(config)# exit
ripd# write
Configuration saved to /etc/quagga/ripd.conf


Aquí puedes encontrar todas las opciones de configuración de RIP con Quagga, pero si lo has hecho alguna vez con un router Cisco verás que las órdenes son prácticamente iguales. Aquí tienes la guía de configuración de RIP en dispositivos Cisco.

NOTA: ¡no olvides activar el bit de forwarding para que tu máquina enrute!

#echo "1" > /proc/sys/net/ipv4/ip_forward

Y si quieres que perdure tras un reinicio:

#echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

6 comentarios:

  tukuyrikuy

15 de mayo de 2011, 6:41

saludos,
Hice todos los pasos y vaya que si enruta, pero tengo un caso curioso, hice esto en lenny y cuando pongo ip_fordward en 1 enruta y cuando le digo "/etc/init.d/quagga stop" pues sigue enrutando como si nada pasara.
Hice otra instalacion en squeeze ip_forwad en 0 activo quagga y si enruta..... me podrian explicar que paso??

  Chen

15 de mayo de 2011, 9:42

Hola, tukuyrikuy!

Respecto al primer caso que comentas, considero que es normal. Si la máquina tiene el bit de forward activo, siempre que reciba un datagrama que no vaya dirigido a ella va a tratar de enrutarlo consultando su tabla de encaminamiento. Si detienes quagga, la máquina no seguirá actualizando las rutas de forma dinámica, pero sí seguirá enrutando.

El segundo caso sí me resulta curioso. ¿La máquina enruta teniendo el bit de forward a 0?

Un saludo!

  Rikardo Sánchez

15 de mayo de 2012, 17:30

Buenas, he realizado todos los pasos indicado y todo correcto excepto cuando hago ping con los clientes, en maquinas windows hace ping a la otra red, pero con cliente linux, no me deja hacer ping a las maquinas windows, te ha ocurrido a ti algo parecido??

gracias de antemano

  Jesús M.

15 de mayo de 2012, 19:28

@Rikardo Sánchez

Hola, Rikardo. Si las máquinas Windows hacen ping a las Linux, pero no al contrario, tiene toda la pinta de que el cortafuegos de la máquina Windows está bloqueando los pings.

¡Un saludo!

  Anónimo

13 de junio de 2014, 19:50

ola me podrian ayudar con una duda

  Jesús M.

14 de junio de 2014, 13:10

@anónimo

Lo intentaremos :-) ¿Cuál es tu duda?