Instalación de Quagga en Debian

QuaggaLa instalación de quagga en Debian es bastante sencilla, pero tiene alguna cosilla que hay que tener en cuenta para finalizar con éxito este paso.

Lo primero es saber qué es quagga, además de una especie de cebra extinta. Quagga se creó como fork de Zebra hace ya algunos años, si no recuerdo mal en el 2001 ó 2002, quizás algún año después, tras una discusión en la lista bastante agria sobre el uso que estaba haciendo el creador de Zebra con el software y las pocas actualizaciones que sufría el mismo, tampoco voy a meterme en esos charcos ya que esto lo comento de memoria y hace algunos años de aquello y tampoco voy a dedicar tiempo en buscar esos correos.

Quagga es un software formado por un conjunto de demonios que ejecutan distintos protocolos de routing y que convierten cualquier caja con GNU/Linux en un router totalmente funcional. Esto cuando salió el software era un poco extraño usarlo, pero el precio de los routers de la época lo justificaba, hoy en día el uso de routers en máquinas virtuales le dan una nueva vida al software y abren un buen abanico de posibilidades que ya iremos comentando.

Pues vamos a ver el proceso de instalación paso a paso.

Lo primero sería tener una distribución de Linux instalada, en mi caso voy a utilizar una Debian 8, obivamente si por alguna razón queréis instalar este software en distribuciones basadas en RedHat, Arch u otras tendréis que tener en cuenta que habrá diferencias.

Pero antes de instalar el software tenemos que tener una cosa clara, estamos instalando un router, es decir, el tráfico va a entrar por un interfaz y va a salir por otro, es decir, hay que habilitar el ip forwarding, que no se nos olvide:

# echo «1» > /proc/sys/net/ipv4/ip_forward

Y para que arraqneu siempre por defecto sin que tengamos que volver a configurar nada:

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

Si no tenemos el ip forwarding habilitado en nuestra caja linux Quagga no funcionará bien, a ver, funcionará pero no enviará tráfico, será como un pisapapeles software, podremos comprobarlo con show ip forwarding en zebra o con vtysh, que ya lo veremos otro día, esto es malo:

root@debian:/etc/quagga# vtysh -c «show ip forwarding»
IP forwarding is off

Esto es bueno:

root@debian:/etc/quagga# vtysh -c «show ip forwarding»
IP forwarding is on

Bien, ya podemos dejarnos de cosas raras y proceder a instalar el software y los ficheros de ejemplo:

apt-get install quagga quagga-doc

Ahora prepararemos los ficheros de configuración que vamos a necesitar, para este ejemplo vamos a utilizar zebra.conf y ospfd.conf. Los ficheros estarán en el directorio /usr/share/doc/quagga/examples/

root@debian:/usr/share/doc/quagga/examples# ls
babeld.conf.sample isisd.conf.sample ripd.conf.sample zebra.conf.sample
bgpd.conf.sample ospf6d.conf.sample ripngd.conf.sample
bgpd.conf.sample2 ospfd.conf.sample vtysh.conf.sample

De todos estos ficheros copiaremos zebra.conf.sample y ospfd.conf.sample y los llevaremos a /etc/quagga, obviamente los renombraremos quitando el .sample

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

Texto obsoleto y eliminado el 10/05/2018

Ahora ya podemos habilitar los demonios que vamos a utilizar, para ello editaremos el fichero /etc/quagga/daemons

vim /etc/quagga/daemons

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

Actualización texto añadido el 10/05/2018

Ahora ya podemos habilitar los demonios que vamos a utilizar, para ello ejecutaremos los siguientes comandos:

/usr/sbin/zebra –dk
/usr/sbin/ospfd –d
/usr/sbin/bgpd –d
/usr/sbin/isisd -d
/usr/sbin/ripd -d
/usr/sbin/…

donde -d significa arrancar en modo demonio y -k significa que no puedan ser eliminadas las rutas del kernel

Y reiniciamos quagga

# /etc/init.d/quagga restart

Y ya podemos entrar por telnet a la configuración de zebra y de ospf. Hay que tener en cuenta que a cada demonio se entra por un puerto diferente, aunque también podemos utilizar el nombre del puerto.

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

Ahora sí, vamos a por esa configuración.

root@debian:/etc/quagga# telnet localhost zebra
Trying ::1…
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.

Hello, this is Quagga (version 0.99.23.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification

Password:

La contraseña por defecto es zebra (se puede ver en el fichero zebra.conf) y como podéis ver la configuración es muy similar a la configuración de IOS de Cisco, con lo cual si estáis mínimamente acostumbrados a tratar con routers Cisco la parte de configuración resulta trivial

Router> en
Password:
Router# sh run
Router# sh running-config

Current configuration:
!
hostname Router
password zebra
enable password zebra
!
interface eth0
ipv6 nd suppress-ra
!
interface eth1
ipv6 nd suppress-ra
!
interface lo
!
!
!
line vty
!
end

Y a partir de aquí podemos trabajar, en mi caso en la misma red que el interfaz eth1 tengo otros dos routers corriendo OSPF para poder ver algo con este router, así que configuraremos en el eth1 la IP 1.1.1.3/24 y luego una configuración estándar de OSPF.

Sin embargo hay que tener en cuenta una cosa y es que Quagga tiene un pequeño problema en la instalación, al menos en Debian y es que Quagga no tiene permisos para escribir sus propios ficheros de configuración, así que para solucionar eso tenéis que cambiar el propietario de los ficheros en el directorio /etc/quagga y ajustar los permisos:

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

Por favor, no hagáis eso tan horrible de chmod 777, es bastante desagradable ;-).

Una vez hecho esto ya podemos guardar configuraciones

root@debian:/etc/quagga# telnet localhost 2601
Trying ::1…
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.

Hello, this is Quagga (version 0.99.23.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification

Password:
Router> en
Password:
Router# conf t
Router(config)# int eth1
Router(config-if)# ip ad 1.1.1.3/24
Router(config-if)# exit
Router(config)# exit
Router# wr
Configuration saved to /etc/quagga/zebra.conf
Router#

Y una vez hecho esto a la configuración del OSPF, para el ejemplo pongo la más sencilla posible.

root@debian:/etc/quagga# telnet localhost 2604
Trying ::1…
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.

Hello, this is Quagga (version 0.99.23.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification

Password:
ospfd> en
ospfd# conf t
ospfd(config)# router ospf
ospfd(config-router)# network 0.0.0.0/0 area 0
ospfd(config-router)# exit
ospfd(config)# exit
ospfd# wr

Y ahora si vamos a zebra y hacemos un show ip route veremos lo siguiente:

Router# sh ip rou
Codes: K – kernel route, C – connected, S – static, R – RIP,
O – OSPF, I – IS-IS, B – BGP, A – Babel,
> – selected route, * – FIB route

O 0.0.0.0/0 [110/11] via 1.1.1.1, eth1, 00:00:14
K>* 0.0.0.0/0 via 192.168.1.1, eth0
O 1.1.1.0/24 [110/10] is directly connected, eth1, 00:00:15
C>* 1.1.1.0/24 is directly connected, eth1
O>* 31.47.76.123/32 [110/30] via 1.1.1.2, eth1, 00:00:14
C>* 127.0.0.0/8 is directly connected, lo
O>* 127.0.0.1/32 [110/10] is directly connected, lo, 00:00:20
K>* 169.254.0.0/16 is directly connected, eth0
O 192.168.1.0/24 [110/10] is directly connected, eth0, 00:00:20
C>* 192.168.1.0/24 is directly connected, eth0
Router#

Como podéis ver tenemos rutas con la O de OSPF aprendidas por este router. Por supuesto podemos ver los vecinos de OSPF de la misma manera que los veríamos en un router Cisco: