MANUAL: Mikrotik, OSPF sobre túneles WireGuard site to site

Hola Pokoyo

Estoy dándole vueltas a montar una OSPF con 4 nodos. Serían 3 casas conectadas (A, B, C) más un map lite en modo switch en otra casa D (conectado por EoIP para M+). Mi intención es que A y B puedan acceder a D, pero no tengo intención de poner ningún desco en C. ¿Podría usar el OSPF en este caso? En caso positivo, había pensado algo así.


Saludos!

1654636863237.png

EDIT: releyendo el hilo, no me queda claro si no sería mejor montar el OSPF entre A-B-C y dejar luego dos túneles EoIP entre A-D y B-D.
 
Última edición:
Hola Pokoyo

Estoy dándole vueltas a montar una OSPF con 4 nodos. Serían 3 casas conectadas (A, B, C) más un map lite en modo switch en otra casa D (conectado por EoIP para M+). Mi intención es que A y B puedan acceder a D, pero no tengo intención de poner ningún desco en C. ¿Podría usar el OSPF en este caso? En caso positivo, había pensado algo así.


Saludos!

Ver el adjunto 95865
EDIT: releyendo el hilo, no me queda claro si no sería mejor montar el OSPF entre A-B-C y dejar luego dos túneles EoIP entre A-D y B-D.

Yo montaría mejor la segunda opción que has dicho, ya que D no participa del intercambio de rutas. Uniría A-B-C con túneles sts + ospf, y luefo daría de alta dos túneles más entre A-D y B-D, ya eliges tú si wireguard+eoip o directamente EoIP sobre IPSec.

Saludos!
 
Buenas Pokoyo,

Así lo he intentado hacer. No obstante, creo que he liado algo con alguna IP.

Me he llevado el Router al site B y lo he conectado. El router coge internet, y puede hacer ping perfectamente a una IP (he probado con 1.1.1.1). Sin embargo, desde los dispositivos conectados no tengo internet.

No sé si viene de la parte del DHCP, la VLAN o el OSPF. Antes de meter el OSPF lo probé en mi casa y sí que funcionaba todo correctamente...

Saludos!

Código:
/routing ospf instance
add disabled=no name=v2 router-id=0.0.0.2
/routing ospf area
add disabled=no instance=v2 name=backbone
/routing rip instance
add afi=ipv4 disabled=no name=rip

/routing ospf interface-template
add area=backbone disabled=no networks=172.16.0.0/24 type=ptp
add area=backbone disabled=no networks=192.168.77.0/24
/routing rip interface-template
add instance=rip interfaces=vlan3-telefono mode=passive
 
Última edición:
Estás propagando OSPF dentro de tu red local, cosa que no debes hacer, a menos que sepas lo que estás haciendo. Tienes el error más común, no marcar tu LAN como pasiva, para que simplemente se anuncie. Cuando haces:
Código:
/routing ospf interface-template
add area=backbone disabled=no networks=192.168.77.0/24
Te falta marcar el "tick" "passive" para todas las subredes que no formen parte de OSPF, pero que se quieran anunciar en OSPF (en la template del ptp iría sin marcar, y en esta marcado). También podrías añadir aquí la subred 192.168.50.0/24, tal que cuando tú te conectes al wireguard de este router en modo roadwarrior, llegues a todos los demás, porque tengan esa ruta instalada.
1654845232561.png



Por otro lado, estás sumarizando una subred 172.16.0.2/30 -> 172.16.0.0/24. Lo cual está bien, pero ojo que el siguiente enlace que montes ha de estar también en la 172.16.0.x para que lo coja como parte de esa sumarización. Entiendo que el 172.17.0.1/30 es el del IPTV que comentamos que iba a ir aparte de OSPF, verdad?

Saludos!
 
Sí, 172.17.0.1/30 es el del IPTV que va sin OSPF. El resto de las redes van en la 172.16.0.0/24 si no la he liado.

Luego repasaré el resto de routers y aplicaré lo del passive. Gracias!
 
Pues hoy he estado haciendo pruebas. En B (con la configuración que puse arriba) puedo acceder a A sin problemas. Sin embargo, hoy he metido el router que tocaba en C y no tengo acceso ni a A ni a B.
 
Última edición:
@Emulero, ¿porqué no plantas todo en un dibujo con los nodos interconectados entre sí y las IPs y subredes que tiene cada uno? Es mucho más sencillo detectar errores así. La red primero planifícala en papel y, cuando lo tengas todo claro como el agua, lánzate a implementarlo.

Saludos!
 
Aquí tengo todo.

Capture.PNG

Site A:

Código:
/interface wireguard
add listen-port=49854 mtu=1420 name=wg-sts-a
add listen-port=54322 mtu=1420 name=wg-sts-iptv
add listen-port=49852 mtu=1420 name=wg-sts-o
add listen-port=49851 mtu=1420 name=wireguard-rw

/routing ospf instance
add disabled=no name=v2 router-id=0.0.0.1
/routing ospf area
add disabled=no instance=v2 name=backbone

/interface list member
add comment=defconf interface=bridge list=LAN
add comment=defconf interface=internet list=WAN
add interface=ether1 list=WAN
add interface=wg-sts-o list=LAN
/interface wireguard peers
add allowed-address=172.16.0.2/32,192.168.77.0/24 endpoint-address=\
    MyDDNS endpoint-port=49852 interface=wg-sts-o \
    public-key="KEY"
add allowed-address=172.17.10.2/32 comment=bailen20-iptv interface=\
    wg-sts-iptv public-key="KEY"
add allowed-address=172.16.0.10/32,192.168.1.0/24 endpoint-address=\
    MyDDNS endpoint-port=49854 interface=wg-sts-a \
    public-key="KEY"
/ip address
add address=192.168.88.1/24 comment=defconf interface=bridge network=\
    192.168.88.0
add address=172.16.0.1/30 interface=wg-sts-o network=172.16.0.0
add address=172.16.0.10/30 interface=wg-sts-a network=172.16.0.8

/ip route
add disabled=no dst-address=192.168.77.0/24 gateway=172.16.0.2 routing-table=\
    main suppress-hw-offload=no


Site B:

Código:
/interface wireguard
add listen-port=49853 mtu=1420 name=wg-sts-a
add listen-port=49852 mtu=1420 name=wg-sts-f

/interface list
add comment=defconf name=WAN
add comment=defconf name=LAN
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik

/routing ospf instance
add disabled=no name=v2 router-id=0.0.0.2
/routing ospf area
add disabled=no instance=v2 name=backbone

/interface list member
add comment=defconf interface=bridge list=LAN
add comment=defconf interface=internet list=WAN
add interface=wg-sts-f list=LAN
add interface=wg-sts-a list=LAN
/interface wireguard peers
    f.MyDDNS endpoint-port=49852 interface=wg-sts-f \
    public-key="KEY"
add allowed-address=172.16.0.6/32,192.168.1.0/24 endpoint-address=\
    a.MyDDNS endpoint-port=49853 interface=wg-sts-a \
    public-key="KEY"
/ip address
add address=192.168.77.1/24 comment=defconf interface=bridge network=\
    192.168.77.0
add address=192.168.50.1/24 interface=wireguard-rw network=192.168.50.0
add address=172.17.0.1/30 interface=wg-sts-iptv network=172.17.0.0
add address=172.16.0.2/30 interface=wg-sts-f network=172.16.0.0
add address=192.168.10.1/24 interface=vlan10-IoT network=192.168.10.0
/
/ip route
add disabled=no dst-address=192.168.88.0/24 gateway=172.16.0.1 routing-table=\
    main suppress-hw-offload=no

Site C:

Código:
/interface wireguard
add listen-port=49859 mtu=1420 name=wg-rw
add listen-port=49854 mtu=1420 name=wg-sts-f
add listen-port=49853 mtu=1420 name=wg-sts-o

/routing ospf instance
add disabled=no name=v2 router-id=0.0.0.3
/routing ospf area
add disabled=no instance=v2 name=backbone

/interface list member
add comment=defconf interface=bridge list=LAN
add comment=defconf interface=internet list=WAN
add interface=wg-rw list=LAN
/interface wireguard peers
add allowed-address=172.16.0.6/32,192.168.77.0/24 endpoint-address=\
o.MyDDNS.com endpoint-port=49853 interface=wg-sts-o \
public-key="KEY"
add allowed-address=172.16.0.9/32,192.168.88.0/24 endpoint-address=\
f.MyDDNS.com endpoint-port=49854 interface=wg-sts-f \
public-key="KEY"
/ip address
add address=192.168.1.1/24 comment=defconf interface=bridge network=\
192.168.1.0
add address=192.168.20.1/24 interface=vlan20-IoT network=192.168.20.0
add address=172.16.0.6/30 interface=wg-sts-o network=172.16.0.4
add address=192.168.50.1/24 interface=wg-rw network=192.168.50.0
add address=172.16.0.9/30 interface=wg-sts-f network=172.16.0.8

/ip route
add disabled=no distance=111 dst-address=192.168.88.0/24 gateway=172.16.0.10 \
pref-src=0.0.0.0 routing-table=main scope=30 suppress-hw-offload=no \
target-scope=10

Cuál es la situación:
- Acceso A-B bidireccional funcionando.
- Acceso desde RW-A a B funcionando.
- Acceso C-A y C-B no funciona.

Creo que no me dejo nada. Saludos!
 
Última edición:
De momento vamos a centrarnos en la unión de las tres sedes, y luego vemos los otros dos túneles para la IPTV, que esos no tienen más ciencia que lo ya explicado.

Vamos a intentar darle nombres más descriptivos a los sitios, tal que las interfaces wireguard nos queden claras. Te propongo tres nombres que machean con las letras que tienes puestas a continuación de los sitios.

A) Francia
B) Omán
C) Argentina

De entrada, veo que tienes las siguientes interfaces wireguard en Francia (A)
Código:
/interface wireguard
add listen-port=49854 mtu=1420 name=wg-sts-a
add listen-port=54322 mtu=1420 name=wg-sts-iptv
add listen-port=49852 mtu=1420 name=wg-sts-o
add listen-port=49851 mtu=1420 name=wireguard-rw

Según tu dibujo, "wg-sts-a" está en Omán (B), no en Francia (A). Si te resulta confuso, pon en las interfaces wireguard origen y destino. Así, la interfaz wireguard que une Francia con Oman sería "wg-sts-fo", mientras que la equivalente en Omán del otro lado sería "wg-sts-of"

Según tu config, wg-sts-a, tiene esto en su direccionamiento:
Código:
/ip address
add address=172.16.0.10/30 interface=wg-sts-a network=172.16.0.8
Es decir, tienes mal el dibujo, coincide con una que tienes repetida en tu dibujo, llamada wg-sts-f. Por eso te digo, que si pones las iniciales de origen y destino en las interfaces wireguard, te evitas que haya interfaces repetidas con el mismo nombre. Siendo así, yo lo dejaría tal que así:

Otra cagada que tienes es que tienes en todas las sedes la misma subred para el road warrior. Esto te va a causar problemas, dado que vas a publicar esa subred como pasiva en OSPF pero...¿cual de las tres? Te he puesto debajo un ejemplo poniendo las subredes consecutivas, en un nodo la .50, en el siguiente la .51, en el último la .52 (modifícalas a tu gusto)

También recuerda que, para que se propague OSPF, necesitas que los nodos intercambien mensajes entre ellos. Eso se consigue aceptando dicho tráfico en input en los firewall, de ahí que metamos las interfaces site to site en la lista LAN (es matar moscas a cañonazos, pero la manera más simple de que automágiamente funcione). Si por lo que esa eso no te conviene, crea una lista nueva llamada como te de la gana, metes las interfaces sts en ella y, sobre el firewall de cada equipo, aceptas el tráfico de tipo "ospf" que llegue de esa interfaz. Ejemplo:
Código:
/interface list
add name=OSPF
/interface list member
add list=OSPF interface=wg-sts-x

/ip firewall filter
add action=accept chain=input comment="routing: allow ospf from wg-sts interfaces" \
    in-interface-list=OSPF protocol=ospf place-before=[find comment="defconf: drop all not coming from LAN"]

Te aconsejo des un paso atrás y primero dibujes todo, y, como último paso, implementes. Te propongo un dibujo, y si quieres lo alteramos o trabajamos sobre él.

Untitled Diagram.drawio-2.png

Una vez tengas eso, revisa la formación de vecinos en OSPF (Routing -> OSPF -> Neighbors), ahí es donde vas a ver si el protocolo funciona como debe. Cada nodo ha de tener dos vecinos con el stage a "Full" si todo está funcionando. Y en la tabla de LSA verás los tres routers, con los 3 IDs que hayas elegido para cada uno de ellos.

Saludos!
 
Hola Pokoyo,

De nuevo mil millones de gracias por tu ayuda. Eres un crack!

Me he estado peleando, sin éxito, con lo que me has dicho. He metido los cambios que me has sugerido y repasado las /ip address para que coincidan con tu sugerencia, pero nada. Sigue funcionando la conexión por Wireguard, pero en Neighbors no aparece nadie. No sé que más puedo estar haciendo mal, lo he mirado todo 4 veces...

Saludos!
 
Última edición:
Tienes mal los peers. Para que OSPF se propague, necesitas añadir a cada peer de tipo sts, en el allowed address, las direcciones multicast que usa el protocolo como origen de los mensajes para intercambiar rutas: 224.0.0.5 y 224.0.0.6

O, si lo quieres simplificar, en los enlaces de tipo sts donde se vaya a correr OSPF, declara un allowed-address=0.0.0.0/0 y así te evitas meter subredes nuevas cuando, por ejemplo, publiques una subred nueva en cualquier nodo OSPF (sino tendras que acordarte e ir manualmente añadiendo subredes a los allowed address de todos los nodos adyacentes).

Saludos!
 
Perfecto!! Ya parece que me funciona. Al menos en los 2 peers que tengo conectados, ya tengo los vecinos.

Ahora podría hacer lo que comentas de asignar distancia 111 a la ruta estática que había definido antes, que si no me equivoco, es esta (en Francia):

Código:
/ip route
add disabled=no dst-address=192.168.77.0/24 gateway=172.16.0.2 routing-table=\
    main suppress-hw-offload=no

El tema del IPTV, ¿lo hablamos por aquí o me voy al otro hilo?

Saludos!
 
Perfecto!! Ya parece que me funciona. Al menos en los 2 peers que tengo conectados, ya tengo los vecinos.

Ahora podría hacer lo que comentas de asignar distancia 111 a la ruta estática que había definido antes, que si no me equivoco, es esta (en Francia):

Código:
/ip route
add disabled=no dst-address=192.168.77.0/24 gateway=172.16.0.2 routing-table=\
    main suppress-hw-offload=no

El tema del IPTV, ¿lo hablamos por aquí o me voy al otro hilo?

Saludos!
Eso es, si quieres una ruta de backup, edita la que tienes y le pones. una distancia mayor a 110 que son las que crea OSPF.

Lo del IPTV muévelo mejor a otro hilo, que no ensuciemos mucho más este.

Saludos!
 
hola una ayuda porfi, este esquema estaría bién realizado para unir 4 router con OSFP? gracias por el gran trabajo.

Código:
/ip address (router A)

add address=172.16.0.1/30 interface=wg-sts-b network=172.16.0.0

add address=172.16.0.10/30 interface=wg-sts-c network=172.16.0.8

add address=172.16.0.13/30 interface=wg-sts-d network=172.16.0.12


/ip address (router B)


add address=172.16.0.2/30 interface=wg-sts-a network=172.16.0.0

add address=172.16.0.5/30 interface=wg-sts-c network=172.16.0.4

add address=172.16.0.14/30 interface=wg-sts-d network=172.16.0.12

/ip address (router C)

add address=172.16.0.6/30 interface=wg-sts-a network=172.16.0.4

add address=172.16.0.9/30 interface=wg-sts-b network=172.16.0.8

add address=172.16.0.17/30 interface=wg-sts-d network=172.16.0.16


/ip address (router D)

add address=172.16.0.18/30 interface=wg-sts-a network=172.16.0.16

add address=172.16.0.21/30 interface=wg-sts-b network=172.16.0.20

add address=172.16.22./30 interface=wg-sts-c network=172.16.0.20
 
hola una ayuda porfi, este esquema estaría bién realizado para unir 4 router con OSFP? gracias por el gran trabajo.

Código:
/ip address (router A)

add address=172.16.0.1/30 interface=wg-sts-b network=172.16.0.0

add address=172.16.0.10/30 interface=wg-sts-c network=172.16.0.8

add address=172.16.0.13/30 interface=wg-sts-d network=172.16.0.12


/ip address (router B)


add address=172.16.0.2/30 interface=wg-sts-a network=172.16.0.0

add address=172.16.0.5/30 interface=wg-sts-c network=172.16.0.4

add address=172.16.0.14/30 interface=wg-sts-d network=172.16.0.12

/ip address (router C)

add address=172.16.0.6/30 interface=wg-sts-a network=172.16.0.4

add address=172.16.0.9/30 interface=wg-sts-b network=172.16.0.8

add address=172.16.0.17/30 interface=wg-sts-d network=172.16.0.16


/ip address (router D)

add address=172.16.0.18/30 interface=wg-sts-a network=172.16.0.16

add address=172.16.0.21/30 interface=wg-sts-b network=172.16.0.20

add address=172.16.22./30 interface=wg-sts-c network=172.16.0.20
Si las subredes están bien hechas (lo puedes comprobar con esto:http://www.network-calculator.com) y sumarizas luego el OSPF con 172.16.0.0/24, diría que sí, que tiene buena pinta.

Saludos!
 
Buenas, dado que tengo un compi con unas 10 sedes de unas tiendas de autoservicio, estaba probando en EVE-NG unas configuraciones de como unir todo y propagar por OSPF. El problema lo veo en que son muchas sedes, entonces de r2 a r8 tiene que pasar por muchos tuneles wireguard (r3-r4-r5-r6-r7) y se nota como aumenta ping y pierde velocidad el link, pues estaba probando otra configuracion en modo roadwarrior. Un server Wireguard y el resto que se conecte a el. Todo perfecto, sin embargo con esta configuracion no consigo que me eche a andar OSPF. La configuracion que probe es una red para WG /24 en el server y el los clientes una una ip /32. En allow-address acepto todo 0.0.0.0/0 y la ip especifica /32 e incluso la 224.0.0.4/30 que es el broadcast de OSPF. En ospf he probado en modo NBMA, PTMT Broadcast, PTP, etc, no consigo que las rutas se propaguen. No hay nada en el firewall. Esta a pelo. Los tuneles funcionan perfectamente, puedo llegar a todos los routers.
 
El esquema que estás montando es altamente vulnerable: se cae el router principal, y a tomar por culo todas las sedes.

Obviamente no puedes montar un grafo de tipo ciclo, donde cada nodo solo tenga dos adyacencias, sino que tienes que tirar a unir más vértices entre sí. No te digo que montes uno completo (en 10 sedes tendrías 45 aristas o túneles, lo cual es un poco burrada), pero sí algo tipo rueda (que llegues a cualquier nodo como mucho en dos saltos).

La config entre túneles es siempre PTP, y simplemente pon 0.0.0.0/0 en el allowed address y te olvidas.

Saludos!
 
El esquema que estás montando es altamente vulnerable: se cae el router principal, y a tomar por culo todas las sedes.

Obviamente no puedes montar un grafo de tipo ciclo, donde cada nodo solo tenga dos adyacencias, sino que tienes que tirar a unir más vértices entre sí. No te digo que montes uno completo (en 10 sedes tendrías 45 aristas o túneles, lo cual es un poco burrada), pero sí algo tipo rueda (que llegues a cualquier nodo como mucho en dos saltos).

La config entre túneles es siempre PTP, y simplemente pon 0.0.0.0/0 en el allowed address y te olvidas.

Saludos!
Correcto, por eso pensaba hacer 2 servers por si uno cae. Es que la rueda y luego sacar verticales para que no de toda la vuelta, menudo dolor de cabeza haha.
De todas formas el problema en lo antes mencionado lo soluciono configurando los clientes con una ip /24, si uso la /32 se me cae el OSPF y configuro el server como PtMP Broadcast y el resto como PTP y funciona OK.

Ahora tengo que pensar si hacerlo como dices tu, tipo anillo con 3 verticales para encontrar rutas mas cercanas o tipo roadwarrior

Hare varias configuraciones en el emulador y luego vere por donde tiro :p
 
Los clientes PTP normalmente son /30 en las interfaces wireguard, así tienes una IP en cada extremo (más boradcast y red que no se usan). Luego, en la configuración de OSPF, lo que haces es sumarizarlas con un /24, tal que te las coja todas de un golpe.

Un ejemplo: imagina que tenemos 3 nodos, todos interconectados entre sí (cada vértice con dos aristas /túneles), el ejemplo del manual. En las interfaces wireguard, configuras las IP's, todas de un mismo segmento /24, pero como tipo punto a punto /30. Luego, en OSPF le dices, "coge la template de esta subred /24 entera, y lo que hace es que va a detectar toda interfaz que tenga una IP perteneciente a ese /24, entre ellas, las de todos los túneles levantados.

Tunel a-b = 172.16.0.1/30 A <> B 172.16.0.2/30
tunel a-c = 172.16.0.10/30 A <> C 172.16.0.9/30

Y, en OSPF, tu plantilla PTP sería 172.16.0.0/24, tal que barres esos dos túneles en A de golpe. Si sigues ese mismo ejemplo en B y C, aprovechando el resto de subredes /30 de esa subred mayor /24, con una única regla idéntica en todos los peers, barres todos los túneles de un golpe.

Saludos!
 
Arriba