OSPF (Open Shortest Path First) es un protocolo de enrutamiento dinámico de estado de enlace: cada router conoce la topología completa de su área y calcula el camino más corto hacia cada red. FRRouting (FRR) lo implementa en Linux con el daemon ospfd. En este tutorial conectarás dos servidores Ubuntu 24.04 con OSPF, harás que aprendan automáticamente las redes del otro y después ajustarás costes, autenticación, redistribución y áreas stub.
Requisitos previos
Para seguir esta guía necesitas:
- Dos servidores con Ubuntu 24.04 LTS (en la guía,
r1yr2) y un usuario no root con privilegiossudoen cada uno. - Una red privada entre ambos, por ejemplo una red privada de CubePath o una VLAN, con una interfaz dedicada en cada servidor. En los ejemplos es
10.10.0.0/24, con10.10.0.1enr1y10.10.0.2enr2. - Acceso de consola o una interfaz de gestión distinta de la del enlace OSPF, por si un error de configuración corta la conectividad.
Identifica el nombre de la interfaz de la red privada en cada servidor:
ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP your_server_ip/24
eth1 UP 10.10.0.1/24
En esta guía la interfaz del enlace OSPF es eth1. Si en tu sistema se llama distinto (por ejemplo ens19), sustitúyela en todos los comandos y archivos.
Cada router tendrá además una dirección de loopback que actuará como identificador estable y como red de prueba:
| Router | Enlace (eth1) | Loopback |
|---|---|---|
| r1 | 10.10.0.1/24 | 10.255.0.1/32 |
| r2 | 10.10.0.2/24 | 10.255.0.2/32 |
Paso 1: Instalar FRRouting
Ejecuta este paso en los dos servidores. Añade la clave y el repositorio oficial de FRR:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://deb.frrouting.org/frr/keys.gpg | sudo tee /etc/apt/keyrings/frrouting.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/frrouting.gpg] https://deb.frrouting.org/frr $(lsb_release -sc) frr-stable" | sudo tee /etc/apt/sources.list.d/frr.list
Instala FRR y las herramientas de recarga:
sudo apt update
sudo apt install frr frr-pythontools
Comprueba que está instalado:
sudo vtysh -c "show version"
FRRouting 10.x.y (r1) on Linux(6.8.0-xx-generic).
Paso 2: Activar ospfd y el reenvío IP
En los dos servidores, activa el daemon de OSPF en /etc/frr/daemons:
sudo sed -i 's/^ospfd=no/ospfd=yes/' /etc/frr/daemons
grep ^ospfd= /etc/frr/daemons
ospfd=yes
Para que el servidor encamine tráfico entre interfaces, y no solo aprenda rutas, activa el reenvío IP de forma persistente:
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-routing.conf
sudo sysctl --system
Reinicia FRR y comprueba que ospfd está en marcha:
sudo systemctl restart frr
systemctl status frr --no-pager
En la salida deben aparecer los procesos zebra, staticd y ospfd.
OSPF no usa TCP ni UDP, sino el protocolo IP 89 con destino a las direcciones multicast 224.0.0.5 y 224.0.0.6. Si tienes UFW activo, permite el tráfico entrante por la interfaz del enlace desde la red privada:
sudo ufw allow in on eth1 from 10.10.0.0/24
Paso 3: Configurar OSPF en ambos routers
Abre el archivo de configuración de FRR en r1:
sudo nano /etc/frr/frr.conf
Sustituye su contenido por lo siguiente:
frr defaults traditional
hostname r1
log syslog informational
service integrated-vtysh-config
!
interface lo
ip address 10.255.0.1/32
exit
!
interface eth1
ip ospf network point-to-point
no ip ospf passive
exit
!
router ospf
ospf router-id 10.255.0.1
passive-interface default
network 10.10.0.0/24 area 0
network 10.255.0.1/32 area 0
exit
!
Qué hace cada parte:
interface lo/ip addressañade la IP de loopback desde el propio FRR, así que persiste tras reiniciar sin tocar Netplan.ospf router-idfija el identificador del router. Debe ser único en todo el dominio OSPF.network ... area 0indica qué interfaces participan en OSPF: las que tienen una IP dentro de esas redes. El área 0 es el backbone, obligatorio en cualquier diseño OSPF.passive-interface defaulthace que OSPF anuncie las redes de todas las interfaces, pero no busque vecinos en ellas.no ip ospf passiveeneth1lo desactiva solo en el enlace entre routers, lo que evita enviar paquetes OSPF hacia redes donde no hay routers.ip ospf network point-to-pointevita la elección de DR/BDR en un enlace con solo dos routers y acelera la formación de la adyacencia.
En r2, crea el mismo archivo cambiando el hostname, la loopback y el router-id:
frr defaults traditional
hostname r2
log syslog informational
service integrated-vtysh-config
!
interface lo
ip address 10.255.0.2/32
exit
!
interface eth1
ip ospf network point-to-point
no ip ospf passive
exit
!
router ospf
ospf router-id 10.255.0.2
passive-interface default
network 10.10.0.0/24 area 0
network 10.255.0.2/32 area 0
exit
!
En cada servidor, valida el archivo y aplica la configuración:
sudo /usr/lib/frr/frr-reload.py --test /etc/frr/frr.conf
sudo systemctl reload frr
Paso 4: Verificar la adyacencia y las rutas
Tras unos segundos, los routers se descubren mutuamente. En r1, consulta los vecinos:
sudo vtysh -c "show ip ospf neighbor"
Neighbor ID Pri State Up Time Dead Time Address Interface RXmtL RqstL DBsmL
10.255.0.2 1 Full/- 42.310s 37.690s 10.10.0.2 eth1:10.10.0.1 0 0 0
El estado debe ser Full. El guion tras la barra indica que no hay DR/BDR, lo esperado en un enlace punto a punto.
Comprueba que r1 ha aprendido la loopback de r2 y la ha instalado en la tabla del kernel:
ip route show proto ospf
10.255.0.2 nhid 32 via 10.10.0.2 dev eth1 metric 20
Y prueba la conectividad usando la loopback de r1 como origen:
ping -c 3 -I 10.255.0.1 10.255.0.2
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
Otras órdenes útiles para ver el estado de OSPF:
sudo vtysh -c "show ip ospf interface eth1"
sudo vtysh -c "show ip ospf route"
sudo vtysh -c "show ip ospf database"
Paso 5: Ajustar los costes
OSPF elige el camino con menor coste acumulado. Por defecto, el coste de una interfaz es ancho de banda de referencia / ancho de banda de la interfaz, con una referencia de 100 Mbit/s. Eso da coste 1 a cualquier enlace de 100 Mbit/s o más, así que OSPF no distingue entre 1 Gbit/s y 10 Gbit/s.
Sube la referencia a 100 Gbit/s (el valor se expresa en Mbit/s) en todos los routers del dominio, dentro del bloque router ospf de /etc/frr/frr.conf:
router ospf
ospf router-id 10.255.0.1
auto-cost reference-bandwidth 100000
passive-interface default
network 10.10.0.0/24 area 0
network 10.255.0.1/32 area 0
exit
En interfaces virtuales el kernel no siempre informa de una velocidad real, así que es habitual fijar el coste a mano en cada enlace. Por ejemplo, para marcar un enlace como ruta de respaldo con coste alto:
interface eth1
ip ospf network point-to-point
no ip ospf passive
ip ospf cost 100
exit
Aplica los cambios y comprueba el coste de la interfaz:
sudo systemctl reload frr
sudo vtysh -c "show ip ospf interface eth1" | grep -i cost
Router ID 10.255.0.1, Network Type POINTOPOINT, Cost: 100
Si hay dos caminos hacia la misma red, el de menor coste total es el que acaba en la tabla de rutas. Con costes iguales, FRR instala ambos y reparte el tráfico (ECMP).
Paso 6: Autenticar las adyacencias
Sin autenticación, cualquier equipo conectado a la red del enlace podría inyectar rutas. Activa la autenticación MD5 en la interfaz del enlace de ambos routers, con la misma clave y el mismo identificador de clave:
interface eth1
ip ospf network point-to-point
no ip ospf passive
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 your_ospf_key
exit
Sustituye your_ospf_key por una clave de hasta 16 caracteres. Aplica el cambio en los dos servidores:
sudo systemctl reload frr
Mientras solo un lado tenga la clave, la adyacencia caerá. Cuando ambos coincidan, vuelve a Full. Compruébalo:
sudo vtysh -c "show ip ospf neighbor"
sudo vtysh -c "show ip ospf interface eth1" | grep -i auth
Cryptographic authentication enabled
Paso 7: Redistribuir rutas en OSPF
Las redes que no están en una interfaz con OSPF, como rutas estáticas hacia otra red, no se anuncian por sí solas. redistribute las inyecta en OSPF como rutas externas. Filtra siempre lo que redistribuyes con un route-map para no anunciar rutas por accidente.
Como ejemplo, en r2 añade una ruta estática hacia una red que está detrás de otro equipo de su LAN y redistribúyela. Añade estas líneas a /etc/frr/frr.conf de r2:
ip route 172.20.0.0/24 blackhole
!
ip prefix-list ESTATICAS-OSPF seq 10 permit 172.20.0.0/16 le 24
!
route-map ESTATICAS-A-OSPF permit 10
match ip address prefix-list ESTATICAS-OSPF
exit
!
router ospf
ospf router-id 10.255.0.2
passive-interface default
network 10.10.0.0/24 area 0
network 10.255.0.2/32 area 0
redistribute static metric-type 2 route-map ESTATICAS-A-OSPF
exit
!
En un entorno real, sustituye blackhole por el siguiente salto real (por ejemplo ip route 172.20.0.0/24 10.20.0.5). Con metric-type 2 (el valor por defecto) la métrica externa no suma el coste interno; con metric-type 1 sí lo suma, lo que es útil si varios routers redistribuyen la misma red.
Aplica el cambio en r2 y comprueba en r1 que la ruta llega como externa:
sudo vtysh -c "show ip ospf route"
============ OSPF external routing table ===========
N E2 172.20.0.0/24 [20/20] tag: 0
via 10.10.0.2, eth1
Paso 8: Añadir un área stub
En redes grandes, OSPF se divide en áreas para limitar el tamaño de la base de datos de cada router. Todas las áreas se conectan al área 0 a través de un ABR (Area Border Router). Un área stub no recibe rutas externas: los ABR le inyectan una ruta por defecto en su lugar, lo que reduce la tabla de los routers periféricos.
Supón que r2 conecta una tercera red, 10.30.0.0/24 en la interfaz eth2, donde hay otros routers en el área 1. r2 pasa a ser ABR. En su /etc/frr/frr.conf:
interface eth2
ip ospf network point-to-point
no ip ospf passive
exit
!
router ospf
ospf router-id 10.255.0.2
passive-interface default
network 10.10.0.0/24 area 0
network 10.255.0.2/32 area 0
network 10.30.0.0/24 area 1
area 1 stub
area 1 range 10.30.0.0/16
redistribute static metric-type 2 route-map ESTATICAS-A-OSPF
exit
area 1 stubdebe configurarse en todos los routers del área 1; si no coincide, no se forman las adyacencias.area 1 stub no-summaryconvertiría el área en totalmente stub: ni rutas externas ni entre áreas, solo la ruta por defecto.area 1 range 10.30.0.0/16resume en el ABR las redes del área 1 en un solo prefijo hacia el backbone.
Aplica el cambio y comprueba las áreas del router:
sudo systemctl reload frr
sudo vtysh -c "show ip ospf" | grep -A3 "Area ID"
La salida lista el área 0.0.0.0 (Backbone) y el área 0.0.0.1 (Stub) con sus interfaces.
Solución de problemas
El vecino no aparece o se queda en Init o ExStart. Los dos lados deben coincidir en área, tipo de red, temporizadores hello/dead, MTU y autenticación. Compara la salida de show ip ospf interface eth1 en ambos routers. Si el problema es la MTU (el vecino se queda en ExStart), iguala la MTU de las interfaces.
No llegan paquetes OSPF. Captura el tráfico en la interfaz del enlace:
sudo tcpdump -ni eth1 proto ospf
Si solo ves paquetes salientes, revisa el firewall del otro servidor y que la red privada permita multicast.
La interfaz no participa en OSPF. Comprueba que su IP está dentro de una sentencia network y que no es pasiva:
sudo vtysh -c "show ip ospf interface"
Revisar los logs. Los mensajes de ospfd se registran en el journal de FRR:
sudo journalctl -u frr --since "10 min ago"
Conclusión
Has configurado OSPF con FRRouting entre dos servidores Ubuntu 24.04, verificado la adyacencia y las rutas aprendidas, y añadido costes, autenticación MD5, redistribución filtrada y un área stub. Como siguientes pasos, puedes activar OSPFv3 (ospf6d) para IPv6, habilitar BFD (bfdd) para detectar caídas de enlace en menos de un segundo y guardar /etc/frr/frr.conf de cada router en control de versiones.
