Encaminador OSPF

per Victor Carceler darrera modificació 2020-03-25T16:35:31+02:00

La XEiLL está formada por un conjunto de subredes interconectadas. Cada vez que se añade un nuevo centro educativo a la red, todos los centros que ya forman parte del proyecto deben aprender las rutas necesarias para alcanzar al nuevo nodo. Para solucionar este problema se utiliza el protocolo de encaminamiento dinámico OSPF implementado en el software Quagga.

Configuración de Quagga

En el directorio /etc/quagga se pueden encontrar los ficheros de configuración del servicio. Quagga es capaz de ejecutar diferentes protocolos de encaminamiento, para cada uno de ellos existe un fichero de configuración diferente.

En nuestro caso, los ficheros de configuración a modificar son:

zebra.conf
Fichero principal de configuración del servicio
ospfd.conf
Fichero de configuración del encaminamiento OSPF

Hay que notar que Quagga, desde el punto de vista del sistema, está formado por varios servicios. Uno para el propio encaminador y otro para cada protocolo de encamienamiento. Tras la instalación se activan todos, pero como sólo utilizamos OSPF, deberemos desactivar el arranque automático de: bgpd, ospf6d, ripd y ripngd.

Fichero de configuración zebra.conf

Si tomamos como ejemplo el CEIP Rafael Casanova, podemos ver que el fichero de configuración contiene:

hostname raca

! Contraseña de usuario y de administrador
!
password zebra
enable password XxXxXxXx

! Definicion de interfaces
!
interface lo
interface eth0
interface eth1
interface tap0
ip address 172.16.107.1/30

! Ruta por defecto
!
ip route 0.0.0.0/0 192.168.0.1

! Fichero de registro
!
log file /var/log/quagga/zebra.log

El fichero especifica:

  1. El nombre del encaminador (directiva hostname raca)
  2. La contraseña del usuario sin privilegios (zebra en todos los centros de la XEiLL) y la del usuario con privilegios (una cadena aleatoria)
  3. La declaración (directivas interface) de los diferentes adaptadores de red, incluidas las VPNs
  4. La ruta por defecto será el encaminador del centro educativo
  5. El fichero de registro

Fichero de configuración ospfd.conf

En el CEIP Rafael Casnova encontramos:

hostname raca

password zebra
enable password YyYyYyYy

log file /var/log/quagga/ospfd.log

interface lo
interface eth0
interface eth1
interface tap0

router ospf
ospf router-id 10.35.144.65
passive-interface eth0
passive-interface eth1
network 172.16.107.0/30 area 0
network 10.35.144.64/27 area 1

Donde se declara:

  1. Nombre del encaminador
  2. Contraseñas de usuario de monitorización (zebra en todos los nodos) y del usuario privilegidado (una cadena aleatoria)
  3. El fichero de registro a utilizar
  4. La declaración de las interfaces locales (incluidas las VPNs)
  5. La sección de parámetros para OSPF
    1. Cada router tiene como identificador la dirección IP (en la XEiLL) del servidor
    2. En las interfaces pasivas no se escuchan (ni se transmiten) notificaciones del protocolo OSPF
    3. Declaración de redes (y áreas) a las que está conectado el encaminador. Los nodos del CEIP Rafael Casanova y el IES Puig Castellar forman el área 0, todos los demás nodos forman parte del área 1 y deben estar conectados directamente con el área 0. En el fichero de ejemplo, la primera red declarada corresponde a la VPN que enlaza el CEIP Rafael Casanova con el IES Puig Castellar (área 0), la segunda red (área 1) corresponde al bloque de IPs asignado localmente al CEIP Rafael Casanova.

Fichero de configuración ospfd.conf en el IES Puig Castellar

De momento la XEiLL tiene una estructura radial en la que todos los centros educativos mantienen un enlace con el IES Puig Castellar. Aunque esta estructura es fácil de montar, no es sensato mantenerla en la medida en la que se conecten nuevos centros, pues se puede saturar la conexión de dicho centro y además se proporciona un punto de fallo que dejaría sin servicio a toda la red. Si el IES Puig Castellar queda desconectado, todos los nodos de la XEiLL quedan incomunicados entre sí. En el futuro habrá que realizar enlaces que aporten redundancia y tolerancia a fallos a la red.

El caso es que en el ejemplo se trata el enlace entre el CEIP Rafael Casanova y el IES Puig Castellar, se ha visto la configuración del primer centro, pero en el segundo también es necesario declarar la interfaz y la red que comunica ambos centros.

Así, en la sección router ospf del fichero ospfd.conf del IES Puig Castellar encontramos:

router ospf
ospf router-id 10.34.248.1
passive-interface eth0
network 172.16.107.0/30 area 0
network 10.34.248.0/27 area 1
network 10.35.144.0/27 area 1
network 10.35.144.32/27 area 1
! Conexiones con toba
network 172.16.107.4/30 area 1
network 172.16.107.16/30 area 1
! Conexion con Terra roja
network 172.16.107.8/30 area 1
! Conexion con La Bastida
network 172.16.107.20/30 area 1
! Conexion con CEIP Lluis Millet
network 172.16.107.24/30 area 1
! Conexión con IES Can Peixauet
network 172.16.107.32/30 area 1
! Conexión con CEIP El Serrai
network 172.16.107.40/30 area 1
! Conexión con el CRP-Santa Coloma
network 172.16.107.36/30 area 1

Donde vemos que por cada centro educativo existe una red (172.16.*.*) que está declarada como perteneciente al área 1, sólo la que corresponde al CEIP Rafael Casanova está declarada como del área 0.

Aprendiendo rutas

Cuando el protocolo OSPF está debidamente configurado y en funcionamiento, comienza a intercambiar información sobre las rutas con otros encaminadores a través de todas aquellas interfaces de red que no se han marcado como pasivas. De este modo, el router de un nuevo nodo pronto aprende cómo alcanzar a los otros nodos, a la vez que los centros que ya estaban en la red aprenden la ruta necesaria para alcanzar al nuevo. No es necesario realizar ningún tipo de actualización manual en las tablas de encaminamiento.

Por ejemplo, al comprobar con el comando route la tabla de rutas del CEIP Rafael Casanova encontramos:

[root@raca root]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.107.36 172.16.107.2 255.255.255.252 UG 20 0 0 tap0
172.16.107.32 172.16.107.2 255.255.255.252 UG 20 0 0 tap0
172.16.107.20 172.16.107.2 255.255.255.252 UG 20 0 0 tap0
172.16.107.16 172.16.107.2 255.255.255.252 UG 20 0 0 tap0
172.16.107.24 172.16.107.2 255.255.255.252 UG 20 0 0 tap0
172.16.107.4 172.16.107.2 255.255.255.252 UG 20 0 0 tap0
172.16.107.0 * 255.255.255.252 U 0 0 0 tap0
172.16.107.8 172.16.107.2 255.255.255.252 UG 20 0 0 tap0
10.35.144.128 172.16.107.2 255.255.255.224 UG 30 0 0 tap0
10.35.144.0 172.16.107.2 255.255.255.224 UG 20 0 0 tap0
10.35.144.64 * 255.255.255.224 U 0 0 0 eth0
10.34.248.0 172.16.107.2 255.255.255.224 UG 20 0 0 tap0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default moria.tierramed 0.0.0.0 UG 0 0 0 eth1
[root@raca root]#

Donde se observa:

  • Para alcanzar las redes que sirven de VPNs entre otros centros (por ejemplo 172.16.107.36/30) se debe utilizar como puerta de enlace a 172.16.107.2 (que es la IP del servidor del IES Puig Castellar en la VPN que conecta con el CEIP Rafael Casanova)
  • Para alcanzar las redes en las que están los clientes (por ejemplo 10.35.144.128/27) también se utiliza como puerta de enlace al IES Puig Castellar
  • Para alcanzar las IPs locales (de la red 10.35.144.64/27 o 172.16.107.0/30) no es necesaria ninguna puerta de enlace
  • La puerta de enlace por defecto, para lo que no esté destinado a ninguna de las subredes anteriores, se utilizará el router del centro educativo.

En el caso del IES Puig Castellar encontramos una tabla similar:

[root@hobbiton zebra]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.107.36 * 255.255.255.252 U 0 0 0 tap8
172.16.107.32 * 255.255.255.252 U 0 0 0 tap7
172.16.107.20 * 255.255.255.252 U 0 0 0 tap4
172.16.107.16 * 255.255.255.252 U 0 0 0 eth1
172.16.107.24 * 255.255.255.252 U 0 0 0 tap5
172.16.107.4 * 255.255.255.252 U 0 0 0 tap1
172.16.107.0 * 255.255.255.252 U 0 0 0 tap0
172.16.107.12 * 255.255.255.252 U 0 0 0 tun3
172.16.107.8 * 255.255.255.252 U 0 0 0 tap2
10.35.144.128 172.16.107.9 255.255.255.224 UG 20 0 0 tap2
10.35.144.0 * 255.255.255.224 U 0 0 0 eth1
10.35.144.64 172.16.107.1 255.255.255.224 UG 20 0 0 tap0
10.34.248.0 * 255.255.255.224 U 0 0 0 eth1
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default moria.tierramed 0.0.0.0 UG 0 0 0 eth0
[root@hobbiton zebra]#

 

Monitorizando el encaminador

Quagga proporciona una interfaz telnet que nos permite monitorizar (o administrar en el caso de que conozcamos la contraseña del usuario enable) el encaminador. Es posible establecer una conexión telnet con Quagga o bien con el demonio OSPF que ejecuta.

Al conectar es necesario identificarse con la contraseña del usuario sin privilegios (zebra en todos los routers de la XEiLL) para acceder a un cónsola que permite escribir comandos. al pulsar el carácter ? se mostrarán las opciones disponibles.

[root@raca root]# telnet localhost zebra
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.

Hello, this is zebra (version 0.93b).
Copyright 1996-2002 Kunihiro Ishiguro.


User Access Verification

Password:
raca> show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
B - BGP, > - selected route, * - FIB route

S 0.0.0.0/0 [1/0] via 192.168.0.1, eth1
K>* 0.0.0.0/0 via 192.168.0.1, eth1
O>* 10.34.248.0/27 [110/20] via 172.16.107.2, tap0, 19:50:38
O>* 10.35.144.0/27 [110/20] via 172.16.107.2, tap0, 19:50:38
O 10.35.144.64/27 [110/10] is directly connected, eth0, 04w4d09h
K * 10.35.144.64/27 is directly connected, eth0
C>* 10.35.144.64/27 is directly connected, eth0
O>* 10.35.144.128/27 [110/30] via 172.16.107.2, tap0, 19:50:38
K * 127.0.0.0/8 is directly connected, lo
C>* 127.0.0.0/8 is directly connected, lo
O 172.16.107.0/30 [110/10] is directly connected, tap0, 1d01h37m
C>* 172.16.107.0/30 is directly connected, tap0
O>* 172.16.107.4/30 [110/20] via 172.16.107.2, tap0, 19:50:38
O>* 172.16.107.8/30 [110/20] via 172.16.107.2, tap0, 19:50:38
O>* 172.16.107.16/30 [110/20] via 172.16.107.2, tap0, 19:50:38
O>* 172.16.107.20/30 [110/20] via 172.16.107.2, tap0, 19:50:38
O>* 172.16.107.24/30 [110/20] via 172.16.107.2, tap0, 19:50:38
O>* 172.16.107.32/30 [110/20] via 172.16.107.2, tap0, 19:50:38
O>* 172.16.107.36/30 [110/20] via 172.16.107.2, tap0, 19:50:38
K * 192.168.0.0/24 is directly connected, eth1
C>* 192.168.0.0/24 is directly connected, eth1
raca> exit
Connection closed by foreign host.
[root@raca root]# telnet localhost ospfd
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.

Hello, this is zebra (version 0.93b).
Copyright 1996-2002 Kunihiro Ishiguro.


User Access Verification

Password:
raca> show ip ospf route
============ OSPF network routing table ============
N IA 10.34.248.0/27 [20] area: 0.0.0.0
via 172.16.107.2, tap0
N IA 10.35.144.0/27 [20] area: 0.0.0.0
via 172.16.107.2, tap0
N 10.35.144.64/27 [10] area: 0.0.0.1
directly attached to eth0
N IA 10.35.144.128/27 [30] area: 0.0.0.0
via 172.16.107.2, tap0
N 172.16.107.0/30 [10] area: 0.0.0.0
directly attached to tap0
N IA 172.16.107.4/30 [20] area: 0.0.0.0
via 172.16.107.2, tap0
N IA 172.16.107.8/30 [20] area: 0.0.0.0
via 172.16.107.2, tap0
N IA 172.16.107.16/30 [20] area: 0.0.0.0
via 172.16.107.2, tap0
N IA 172.16.107.20/30 [20] area: 0.0.0.0
via 172.16.107.2, tap0
N IA 172.16.107.24/30 [20] area: 0.0.0.0
via 172.16.107.2, tap0
N IA 172.16.107.32/30 [20] area: 0.0.0.0
via 172.16.107.2, tap0
N IA 172.16.107.36/30 [20] area: 0.0.0.0
via 172.16.107.2, tap0

============ OSPF router routing table =============
R 10.34.248.1 [10] area: 0.0.0.0, ABR
via 172.16.107.2, tap0

============ OSPF external routing table ===========

raca>
raca> show ip ospf database

OSPF Router with ID (10.35.144.65)

Router Link States (Area 0.0.0.0)

Link ID ADV Router Age Seq# CkSum Link count
10.34.248.1 10.34.248.1 1502 0x80001551 0x4103 1
10.35.144.65 10.35.144.65 1486 0x800008af 0xdc65 1

Net Link States (Area 0.0.0.0)

Link ID ADV Router Age Seq# CkSum
172.16.107.1 10.35.144.65 1481 0x80000093 0xe993

Summary Link States (Area 0.0.0.0)

Link ID ADV Router Age Seq# CkSum Route
10.34.248.0 10.34.248.1 1792 0x80000957 0x3e89 10.34.248.0/27
10.35.144.0 10.34.248.1 369 0x80000959 0xaa82 10.35.144.0/27
10.35.144.64 10.35.144.65 844 0x8000060e 0x1949 10.35.144.64/27
10.35.144.128 10.34.248.1 1751 0x80000027 0x8954 10.35.144.128/27
172.16.107.4 10.34.248.1 409 0x80000de6 0x3fd1 172.16.107.4/30
172.16.107.8 10.34.248.1 1090 0x80000085 0x017a 172.16.107.8/30
172.16.107.16 10.34.248.1 1681 0x80000956 0xf3a5 172.16.107.16/30
172.16.107.20 10.34.248.1 1571 0x80000de6 0x9e62 172.16.107.20/30
172.16.107.24 10.34.248.1 1601 0x80000de5 0x7885 172.16.107.24/30
172.16.107.32 10.34.248.1 1321 0x80000de6 0x26ce 172.16.107.32/30
172.16.107.36 10.34.248.1 48 0x80000cc4 0x45ce 172.16.107.36/30

Router Link States (Area 0.0.0.1)

Link ID ADV Router Age Seq# CkSum Link count
10.35.144.65 10.35.144.65 1347 0x80000616 0xafa0 1

Summary Link States (Area 0.0.0.1)

Link ID ADV Router Age Seq# CkSum Route
10.34.248.0 10.35.144.65 184 0x80000029 0x6bb0 10.34.248.0/27
10.35.144.0 10.35.144.65 84 0x80000029 0xdba7 10.35.144.0/27
10.35.144.128 10.35.144.65 44 0x80000029 0x3bbd 10.35.144.128/27
172.16.107.0 10.35.144.65 1204 0x80000034 0x45b6 172.16.107.0/30
172.16.107.4 10.35.144.65 504 0x80000028 0x9960 172.16.107.4/30
172.16.107.8 10.35.144.65 1364 0x80000028 0x7184 172.16.107.8/30
172.16.107.16 10.35.144.65 1214 0x80000028 0x21cc 172.16.107.16/30
172.16.107.20 10.35.144.65 694 0x80000028 0xf8f0 172.16.107.20/30
172.16.107.24 10.35.144.65 784 0x80000028 0xd015 172.16.107.24/30
172.16.107.32 10.35.144.65 864 0x80000028 0x805d 172.16.107.32/30
172.16.107.36 10.35.144.65 94 0x80000029 0x5682 172.16.107.36/30


raca>