Enrutamiento dinámico Open-Source: FRR
- jogofus
- 9 sept 2024
- 4 Min. de lectura
Hoy voy a hacer una entrada de las que a mi me suelen gustar, y voy a tratar el tema de como el opensource nos puede solucionar muchísimas veces la papeleta.
En este caso vamos a hacer uso del software que antiguamente se llamaba Quagga (también se llamó zebra) y actualmente recibe el nombre de FRRouting.
¿Qué es FRRouting?
Como ya he dicho antes, FRRouting es un software opensource orientado a enrutamiento, sobretodo enrutamiento dinámico, y es en lo que me voy a enfocar hoy, concretamente en OSPF.
FRR es la base de muchos otros sistemas, como puede ser Pfsense y OpnSense.
¿Qué permite FRR? Pues una captura dice más que mil palabras:
Vaya, parece que tiene de todo, ¿verdad?
-Pero eso ya lo hacen todos los firewall y routers de hoy en día, ¿no?
Si, pero parémonos a pensar:
Este software se puede instalar en cualquier distribución Linux y *BSD, por lo que se puede instalar en cualquier hardware (a día de hoy no he conocido limitaciones sobre hardware que no acepte alguna de estas variantes). A pequeña escala quizá no tenga mucho sentido, a no ser que tengas un equipo al que querer darle una segunda vida.

Pero... ¿Y si te dijera que al poder instalarse en cualquier hardware puedes personalizarlo tanto como quieras?
Imaginate instalar esto en un DL380 G10, con varias tarjetas de 25G o incluso 100G y dos procesadores Xeon de los potentes (si, estoy exagerando y nadie necesita tanto para un router, lo sé). Una barbaridad, ¿verdad?
Ahora piensa en lo mismo pero en marcas como Fortinet, Palo Alto, Watchguard... De primeras que no tienen hardware con tanta capacidad. Y si lo tuvieran, ¿cuanto valdrían?
Seguramente x10 el valor de lo que podamos montar nosotros.
Ahora bien, vamos a suponer que queremos anunciar rutas por OSPF entre un fortigate y un router montado en Debian con FRR.
El escenario es el siguiente:
Fortigate propagará las redes 192.168.30.0/24 y 192.168.40.0/24, mientras que el debian propagará las 192.168.10.0/24 y 192.168.20.0/24.
Así que manos a la obra:
Configuración de Debian con FRR
Primero instalamos los paquetes necesarios para poder funcionar:
# add GPG key
curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null
# possible values for FRRVER: frr-6 frr-7 frr-8 frr-9.0 frr-9.1 frr-stable
# frr-stable will be the latest official stable release
FRRVER="frr-stable"
echo deb '[signed-by=/usr/share/keyrings/frrouting.gpg]' https://deb.frrouting.org/frr \
$(lsb_release -s -c) $FRRVER | sudo tee -a /etc/apt/sources.list.d/frr.list
# update and install FRR
sudo apt update && sudo apt install frr frr-pythontoolsInformación sacada de la web oficial
Una vez instalado, procedemos a habilitar el demonio/servicio que queremos correr, que en este caso es OSPF.
nano /etc/frr/daemonsY dejamos la linea ospfd=yes.
Reiniciamos frr:
systemctl restart frrY ahora procederemos a configurar desde el propio FRR.
Aquí tengo algo que añadir que me ha ocurrido a mí y no he visto que a nadie más le ocurriera:
Para que OSPF funcionara correctamente, las interfaces debían ser configuradas desde el propio FRR y no desde el SO. Cuando lo hacía de la segunda forma, las rutas no se propagaban porque indicaban que la interfaz estaba down.
Entramos en FRR:
vtyshVaya, ¿qué parecido a Cisco, no? Pues sí, su sintaxis está basada en el CLI de Cisco, así que nos facilitan mucho las cosas.
Configuramos las interfaces:
configure terminal
int ens3
ip address 10.10.10.1/30
no shutdown
!
int ens4
ip address 192.168.10.1/24
no shutdown
!
int ens5
ip address 192.168.20.1/24
no shutdown
!Toca configurar OSPF:
router ospf
ospf router-id 1.1.1.1
network 10.10.10.0/30 area 0.0.0.0
network 192.168.10.0/24 area 0.0.0.0
network 192.168.20.0/24 area 0.0.0.0
!Ahora, para finalizar, guardamos los cambios:
write memory
copy running-config startup-config
!Para terminar con debian, y sin entrar en iptables y demás, debemos configurar el forward de los paquetes:
echo "1" >> /proc/sys/net/ipv4/ip_forward
nano /etc/sysctl.conf
#Descomentamos la siguiente linea:
net.ipv4.ip_forward=1
#Guardamos
sysctl -pConfiguración de Fortigate
config router ospf
set router-id 2.2.2.2
config area
edit 0.0.0.0
next
!
config network
edit 1
set prefix 10.10.10.0/30
set area 0.0.0.0
next
!
edit 2
set prefix 192.168.30.0/24
set area 0.0.0.0
next
!
edit 3
set prefix 192.168.40.0/24
set area 0.0.0.0
next
end
!Aquí se ha obviado la configuración de interfaces y reglas de firewall. Puedes verlo en esta entrada, también dedicada a OSPF: Conexiones redundantes entre sedes: OSPF + IPsec
Desde Fortigate podemos comprobar si se ha establecido la conexión:
get router info ospf neighborget router info routing-table allComo podemos ver, nos indica que ha añadido en su tabla de rutas las redes 192.168.10.0/24 y 192.168.20.0/24 mediante OSPF, que es lo que le anuncia el router debian.
Pasemos a ver qué nos dice FRR.
De primeras, en el SO se nos han añadido 2 rutas mediante OSPF.
ip -c routeY desde el propio frr:
vtysh
show ip route table allEl momento de la verdad...
Vamos a comprobar si verdaderamente, desde los equipos cliente que no conocen las rutas, podemos llegar a los clientes del otro lado.
Como podemos comprobar, en el cliente no tenemos ninguna ruta hacia la red 30:
Y sin embargo:
Y hasta aquí la entrada de configuración de FRR para OSPF.
Ya sabéis, si queréis disponer de un router potente pero a menos coste, siempre podéis hacer uso de esta solución.
Como añadido, podéis usar este router como concentrador VPN IPsec, ya que la potencia que le podamos sacar a un servidor será mayor que la que le podamos sacar a un fortigate que nos cueste más o menos el mismo precio (solo por capacidades de hardware).















Comentarios