Cómo respaldar tu túnel IKEv2 con dos dominios DDNS mediante un script

Hola compis,

Debido a las caídas de los DDNS de Mikrotik, estoy viendo la posibilidad de disponer de varios dominios dentro del mismo certificado que tenemos instalado, con objeto de tener un respaldo diferente en caso de caída de los servidores DNS. He estado buscando información en los foros en inglés y parece que se puede hacer pero no lo veo claro.

Me gustaría hacer esas pruebas pero sólo tengo en casa un Mikrotik para montar un túnel IKEv2 y probarlo con unos certificados que tengan varios "Subject Alternative Name" apuntando a dos dominios DDNS, la prueba sería comprobar si efectivamente al tirar uno de los DNS, es capaz de renegociar a través del segundo DNS y por tanto seguiría levantado el túnel.

He modificado la configuración de unos certificados normales añadiendo el segundo "Subject Alternative Name". Sería algo así:

Bash:
/certificate
# Primero la CA
add name=ca-key common-name=ca-key subject-alt-name=DNS:mynetname.net,DNS:sytes.net \
country=ES state=Andalucia locality=Granada organization=Networking days-valid=3650 \
key-size=2048 key-usage=crl-sign,key-cert-sign,digital-signature,key-encipherment,data-encipherment

# Luego el certificado del servidor
add name=vpn-server country=ES state=Andalucia locality=Granada organization=Networking unit=VPN\
common-name=vpn-server key-size=2048 days-valid=1095 key-usage=tls-server \
subject-alt-name=DNS:d12345678912.sn.mynetname.net,DNS:pericopalotes.sytes.net

# Y los certificados de tipo cliente
add name=c1@d12345678912.sn.mynetname.net country=ES state=Andalucia locality=Granada \
organization=Networking common-name=c1@d12345678912.sn.mynetname.net \
subject-alt-name=email:c1@d12345678912.sn.mynetname.net,email:c1@pericopalotes.sytes.net \
days-valid=730 key-size=2048 key-usage=tls-client


# Los firmamos individualmente
/certificate
sign ca-key
{:delay 5};
sign vpn-server ca=ca-key
{:delay 5};
sign c1@d12345678912.sn.mynetname.net ca=ca-key


# Exportar la CA y los certificados cliente
/certificate
export-certificate ca-key
export-certificate c1@d12345678912.sn.mynetname.net type=pkcs12 export-passphrase="PaSsWoRd"

eso es todo, a ver si alguien se anima y lo puede probar.

S@lu2.
 
Última edición:
Si ves que no te funciona; otra opción es crear un set de certificados nuevos con el otro dominio, y tener dos identities, uno con cada juego de certificados. Es más lata, pero eso seguro que sí levantaría.

Saludos!
 
Si ves que no te funciona; otra opción es crear un set de certificados nuevos con el otro dominio, y tener dos identities, uno con cada juego de certificados. Es más lata, pero eso seguro que sí levantaría.

Saludos!
Hola, he creado un segundo set de certificados con la dns de noip, los he exportado y ya los tengo instalados en la parte branch. ¿te importaría poner un ejemplo de cómo hacerlo porfa? es para aplicarlo a mi tunel IKEv2 Site to Site.

He hecho algunas pruebas y la he liado, he tenido que cargar un backup de IPsec en ambos extremos para poder recuperar el tunel, ufff...

Entiendo que en la parte HQ tengo que crear un identity nuevo con los nuevos certificados vpn-server y el remote (cliente), en la parte de Peers ¿tengo que crear uno nuevo también? lo digo porque en la Address del Peer admite todas las direcciones: :):/0).

1631127744194.png
1631127389252.png


En la parte Branch, si creo un identity nuevo tiene que llamar al Peer correspondiente, pero aquí tiene puesta la dirección DDNS del extremo HQ

1631127824011.png


1631127473386.png


Una vez creados ambos indentities, ¿trabajarían ambos simultáneamente? entiendo que será uno u otro ¿no? ¿Cómo haría la conmutación?

Si puedes poner algún ejemplo gráfico te lo agradecería, no tengo ninguna prisa, solo quiero entenderlo bien antes de aplicarlo.

Gracias de antemano!
 
Este fin de semana si tengo un rato te lo pruebo. Tengo que montar un poco de Mari morena para probarlo.

Saludos!
 
Hola!

Esta tarde he estado haciendo varias pruebas en un túnel IKEv2 que tengo entre dos Sites.

Lado HQ

Partimos que ya existe un túnel IPSec/IKEv2 funcionando con Certificados tipo *.sn.mynetname.net.

Crear en HQ un segundo pack de Certificados: CA, VPN Server y Cliente, configurado con un DDNS distinto al *.sn.mynetname.net. En mi caso voy añadir un DDNS tipo NoIP (*.sytes.net).

Creamos un nuevo Identity:

Bash:
/ip ipsec identity
add auth-method=digital-signature certificate=vpn-server-noip comment=router-branch-noip \
generate-policy=port-strict match-by=certificate mode-config=ike2-conf-branch \
peer=ike2-peer policy-template-group=ike2-template-group\
remote-certificate=c1@prueba.sytes.net

Con esto ya hemos terminado en el lado HQ.

Lado Branch

Importamos Certificados CA y Cliente.

Bash:
# Creamos un nuevo peer que apunta al dominio DDNS creado.
/ip ipsec peer
add address=prueba.sytes.net exchange-mode=ike2 name=ike2-noip-peer profile=ike2-profile

# Nueva Identity con el certificado cliente de DDNS NoIP
/ip ipsec identity
add auth-method=digital-signature certificate=vpn-client-noip generate-policy=port-strict \
mode-config=request-only peer=ike2-noip-peer policy-template-group=ike2-template-group

Para conmutar manualmente, primero desactivas el Peer de *.sn.mynetname.net y después desactivas la Identity correspondiente.

Ahora vamos a activar, primero la Identity de DDNS NoIP y después el Peer (el peer inicia la conexión).

1631213921080.png

1631214066437.png


Si en algún momento vemos que alguna de las policies existentes no pasan a estado "established" solo hay que desactivarlas y volverlas a activar individualmente. Con esto quedan levantadas.

1631214154803.png


Ahora viene lo bueno: el reto sería construir un script que detecte cuando cae la DDNS activa y conmutar a la identity + peer de reserva. Con eso nos aseguramos que el túnel esté siempre levantado.

No soy experto en este tema (continuo aprendiendo) pero si se os ocurre algo más interesante, cualquier idea es bienvenida.

S@lu2.
 

Adjuntos

  • 1631213985284.png
    1631213985284.png
    25.7 KB · Visitas: 29
Hola!

Bueno, al final he creado un script totalmente funcional para automatizar la tarea de conmutar los Peers y las Identities de cada proveedor y así en caso de caída de uno de ellos, el script lo detectaría y lo cambiaría al proveedor que estuviera online. De esta forma el tunel IKEv2 levanta solito y las Policies las resetea para levanten igualmente.

Aparte de los expuesto en el post anterior, he creado en el lado "Branch" del túnel nuevas Policies para que apunten a cada dominio (cada Peer apunta a un dominio diferente), es decir, habría que crearlas por duplicado, tal como está en la imagen siguiente, y además etiquetar cada una para mejorar la funcionalidad del script.

OB9fQALzhX.png


Bash:
{
# Dirección IP del cualquier host activo del lado HQ
:local HOST "192.168.88.247"
# DDNS del router Mikrotik
:local DDNSMK "dXXXXXXXXXX9.sn.mynetname.net"
# Otro DDNS de respaldo
:local DDNSNOIP "prueba.sytes.net"
:local LOCATION "Despacho"
# Obtener el Peer activo
:local PEER [/ip ipsec active-peers get 0 id];
# Interface de la Red remota
:local GW "bridge-local"
# Tiempo de espera del ping. Aumente o disminuya según sea necesario
:local TIMEOUT "100ms"
# Número de pings a enviar
:local COUNT "10"
# Número de respuestas requeridas
:local LESSTHAN "8"

:log info "IKEv2: Tunnel Check Started"
:log info "IKEv2: Looking for $HOST at $LOCATION"

# Hacemos ping a una IP de la LAN del router HQ para comprobar si el túnel está levantado
# Si está caído ejecuta dos condicionales "IF".
:if ([/ping interface=$GW $HOST interval=$TIMEOUT count=$COUNT]<$LESSTHAN) do={
    log error "IKEv2: Tunnel with $LOCATION is down, modifying DDNS...";
    
    # Primera condición: comprueba si hay conectividad con el DDNS de Mikrotik.
    # Si está levantado, omite esta condifión "IF" y pasa a la segunda.
    # Si está caído ejecuta los siguientes comandos para conmutar al DDNS No-IP.
    :if ([/ping $DDNSMK interval=$TIMEOUT count=$COUNT]<$LESSTHAN) do={

        log info "IKEv2: Peer & Identity changed to <$DDNSNOIP>";
        /ip ipsec peer disable 0
        :delay 1s
        /ip ipsec identity disable 0 
        :delay 2s
        /ip ipsec identity enable 1
        :delay 1s
        /ip ipsec peer enable 1
        :delay 5s

        log info "IKEv2: Reset Policies...";
        # A veces al conmutar de Peer e Identity, algunos Policies quedan en "no phase2"
        # Reseteamos filtrando los comentarios de nuestras policies.
        /ip ipsec policy disable [/ip ipsec policy find comment="1noip"]
        /ip ipsec policy disable [/ip ipsec policy find comment="2noip"]
        /ip ipsec policy disable [/ip ipsec policy find comment="3noip"]
        :delay 2s
        /ip ipsec policy enable [/ip ipsec policy find comment="1noip"]
        :delay 2s
        /ip ipsec policy enable [/ip ipsec policy find comment="2noip"]
        :delay 2s
        /ip ipsec policy enable [/ip ipsec policy find comment="3noip"]
        
        # START Send Telegram Module
        :local MessageText "\E2\9A\A0 <b>Apartamento:</b> IKEv2 tunnel is Down%0APeer & Identity changed to:%0A$DDNSNOIP";
        :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
        $SendTelegramMessage MessageText=$MessageText;
        #END Send Telegram Module
    }
    
    # Segunda condición: comprueba si hay conectividad con el DDNS de No-IP.
    # Si está levantado, omite esta condifión "IF".
    # Si está caído ejecuta los siguientes comandos para conmutar al DDNS Mikrotik.
    :if ([/ping $DDNSNOIP interval=$TIMEOUT count=$COUNT]<$LESSTHAN) do={

        log info "IKEv2: Peer & Identity changed to <$DDNSMK>";
        /ip ipsec peer disable 1
        :delay 1s
        /ip ipsec identity disable 1 
        :delay 2s
        /ip ipsec identity enable 0
        :delay 1s
        /ip ipsec peer enable 0
        :delay 5s
        
        log info "IKEv2: Reset Policies...";
        # A veces al conmutar de Peer e Identity, algunos Policies quedan en "no phase2"
        # Reseteamos filtrando los comentarios de nuestras policies.
        /ip ipsec policy disable [/ip ipsec policy find comment="1hq"]
        /ip ipsec policy disable [/ip ipsec policy find comment="2hq"]
        /ip ipsec policy disable [/ip ipsec policy find comment="3hq"]
        :delay 2s
        /ip ipsec policy enable [/ip ipsec policy find comment="1hq"]
        :delay 2s
        /ip ipsec policy enable [/ip ipsec policy find comment="2hq"]
        :delay 2s
        /ip ipsec policy enable [/ip ipsec policy find comment="3hq"]
        
        # START Send Telegram Module
        :local MessageText "\E2\9A\A0 <b>Apartamento:</b> IKEv2 tunnel is Down%0APeer & Identiy changed to:%0A$DDNSMK";
        :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
        $SendTelegramMessage MessageText=$MessageText;
        #END Send Telegram Module
    }
    log info "IKEv2: Ready!";
    
} else {

:log warning "IKEv2: tunnel to $LOCATION is OK. Nothing to do";
/ip ipsec active-peers print

# START Send Telegram Module
:local MessageText "\E2\9C\85 <b>Apartamento:</b> IKEv2 tunnel is UP%0AActive Peer:%0A$PEER";
:local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module
}

}

Y eso es todo, espero que esta aportación le ayude a alguien si se encuentra en la misma situación, o simplemente quieres asegurar que el DDNS de Mikrotik no nos vuelve a dejar unos días sin acceso a nuestros "chacharros". No todo el mundo puede permitirse tener dos operadoras en casa/oficina o bien pagarse una IP fija.

S@lu2.
 
fantástico tuto, pero yo lo que he hecho es crear un subdominio "ddns.midominio.ga" (un año gratis) y apuntar las ddns de mikrotik o las de noip, creas credenciales con ddns.midominio.ga y llegado el momento cambias el servidor ddns por mikrotik, noip o el que sea de tu preferencia.

Yo creo que es más sencillo y menos quebraderos de cabeza, pal año que viene pues se deja morir y se crea otro sin problema... a fin de cuentas te da igual que sea .ga, .tk o .gol... lo importante es que puedas crear subdominios y que sea gratis.

Que si tienes un dominio registrado y lo estás pagando tienes el servicio que te comento igualmente gratuito y le quitas mayor rentabilidad a tu inversión.

Un saludo
 
fantástico tuto, pero yo lo que he hecho es crear un subdominio "ddns.midominio.ga" (un año gratis) y apuntar las ddns de mikrotik o las de noip, creas credenciales con ddns.midominio.ga y llegado el momento cambias el servidor ddns por mikrotik, noip o el que sea de tu preferencia.

Yo creo que es más sencillo y menos quebraderos de cabeza, pal año que viene pues se deja morir y se crea otro sin problema... a fin de cuentas te da igual que sea .ga, .tk o .gol... lo importante es que puedas crear subdominios y que sea gratis.

Que si tienes un dominio registrado y lo estás pagando tienes el servicio que te comento igualmente gratuito y le quitas mayor rentabilidad a tu inversión.

Un saludo
Si, lo que comentas también es muy válido, pero el sistema que propongo es totalmente desatendido que era la idea, que me lo levantara sólo sin necesidad de intervenir, aunque para ello tenga que crear dos juegos de certificados diferentes (uno para cada servidor DDNS).

Voy a estudiar ese dominio .ga, .tk, etc a ver que tal.

S@lu2.
 
Si, lo que comentas también es muy válido, pero el sistema que propongo es totalmente desatendido que era la idea, que me lo levantara sólo sin necesidad de intervenir, aunque para ello tenga que crear dos juegos de certificados diferentes (uno para cada servidor DDNS).

Voy a estudiar ese dominio .ga, .tk, etc a ver que tal.

S@lu2.
Son soluciones diferentes al mismo problema.

Nadie duda que es mejor rebanarse los sesos para llegar a tu solución, mi solución es https://www.freenom.com, con acceder a la página y cambiar la DDNS tienes acceso en pocos minutos, depende de cuanto tarde en actualizar el DDNS el subdominio.

Las dos opciones son muy válidas para evitar futuros problemas de DDNS mikrotik y parar "nuestro" mundo por ello.
 
Son soluciones diferentes al mismo problema.

Nadie duda que es mejor rebanarse los sesos para llegar a tu solución, mi solución es https://www.freenom.com, con acceder a la página y cambiar la DDNS tienes acceso en pocos minutos, depende de cuanto tarde en actualizar el DDNS el subdominio.

Las dos opciones son muy válidas para evitar futuros problemas de DDNS mikrotik y parar "nuestro" mundo por ello.
No funciona. Cualquier dominio inventado que intentas registrar con .tk por ej. sale como "no disponible". Eso tiene truco?

S@lu2.
 
No funciona. Cualquier dominio inventado que intentas registrar con .tk por ej. sale como "no disponible". Eso tiene truco?

S@lu2.

Como ves a mi me dejó registrar en septiembre/2021

1632044487713.png


Si el dominio está pillado o ya no deja registrar yo no lo se

Yo no tuve problemas a la hora de registrar, sinceramente
 
No te preocupes, habrá algún problema puntual con los registros, gracias.
No se, cuando me dijiste eso me puse a registar "mynetname" que me lo daba libre en .ga y no me dejó... supongo que la página no está optimizada del todo

1632047659012.png


Si le das a "consiguelo ahora" te dice "no disponible"...

He probado a registrar "otromynetname" y tampoco me dejó, no tuve suerte tampoco con "otroadslftth", entonces será algún problema interno de freenom, a lo mejor el lunes ya deja registrar de nuevo

[EDITO]

Si estoy registrado en la página me deja contratar dominios

1632048359013.png


Así que a lo mejor si intentas registrarte primero y "comprar" después tengas suerte
 
Última edición:
Arriba