MANUAL: Mikrotik, IKEv2 VPN a fondo

@Snkfear
Sí, básicamente es eso.
Utilizo Ubuntu.
Yo por mi parte no configuro ningún fichero.
Instalo los paquetes de strongswan y después añado network-manager-strongswan para configurar la conexión mediante gui.

PD: Te dejo el hilo dónde yo mismo tenía problemas a la hora de conectar Linux como cliente ikev2 y mis dudas a la hora de hacer la conexión.


Saludos.
 
@Snkfear
Sí, básicamente es eso.
Utilizo Ubuntu.
Yo por mi parte no configuro ningún fichero.
Instalo los paquetes de strongswan y después añado network-manager-strongswan para configurar la conexión mediante gui.

PD: Te dejo el hilo dónde yo mismo tenía problemas a la hora de conectar Linux como cliente ikev2 y mis dudas a la hora de hacer la conexión.


Saludos.
Muchas gracias! Luego le echo un vistazo, que tengo ganas de probar que todo funcione correctamente y poder acceder al sensor de humedad.

Lo único que yo uso versiones server, así que tendré que editar la config a pelo, que gui complicado :ROFLMAO:
 
Nada, no consigo que conecte y no sé por dónde seguir...

Siguiendo la wiki de strongswan y viendo algunos tutoriales, he dejado el archivo /etc/ipsec.conf así (cambiando mi dominio):
Código:
ca home.midominio.com
        cacert=ca.crt
        auto=add

conn ikev2-rw
        right=home.midominio.com
        rightid=%home.midominio.com
        rightsubnet=0.0.0.0/0
        rightauth=pubkey
        leftsourceip=%config
        leftauth=pubkey
        leftcert=vpn-client-mobile.crt
        auto=add

Y el archivo /etc/ipsec.secrets así:
Código:
home.midominio.com : vpn-client.mobile.key

Y al intentar levantar la conexión con sudo ipsec up ikev2-rw, este es el resultado:
Código:
ubuntu@RPi4:~$ sudo ipsec up ikev2-rw
initiating IKE_SA ikev2-rw[2] to mi_ip_publica
generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]
sending packet: from 192.168.0.192[500] to mi_ip_publica[500] (768 bytes)
retransmit 1 of request with message ID 0
sending packet: from 192.168.0.192[500] to mi_ip_publica[500] (768 bytes)
retransmit 2 of request with message ID 0
sending packet: from 192.168.0.192[500] to mi_ip_publica[500] (768 bytes)
retransmit 3 of request with message ID 0
sending packet: from 192.168.0.192[500] to mi_ip_publica[500] (768 bytes)
retransmit 4 of request with message ID 0
sending packet: from 192.168.0.192[500] to mi_ip_publica[500] (768 bytes)
retransmit 5 of request with message ID 0
sending packet: from 192.168.0.192[500] to mi_ip_publica[500] (768 bytes)

Previamente he copiado los certificados en las siguientes rutas:
Código:
sudo cp ca.crt /etc/ipsec.d/cacerts/
sudo cp cert_export_vpn-client-mobile.crt /etc/ipsec.d/certs/vpn-client-mobile.crt
sudo cp cert_export_vpn-client-mobile.key /etc/ipsec.d/private/vpn-client-mobile.key

¿Alguien puede echarme un cable?

Edit: ¡invoco a los que todo lo saben! @pokoyo @furny @stargate4you
PD: no me lapidéis :x

Salu2!
 
Última edición:
Bueno, tras un tiempo intentando hacer que funcione... sigo igual.

Ahora estoy probando con una VM con ubuntu desktop y conectada directamente a un router 3G, pero al encender la VPN me pide la contraseña (entiendo que es la que se usa al exportar: MySuperVPN!) y se queda en las mismas, no conecta:

sw_config.png


He seguido el manual en el router paso a paso sin que me arroje ningún fallo, por lo que imagino que el error no estará en ese lado... pero tampoco sé qué log mirar para encontrar qué está fallando.

¿Alguna idea @pokoyo?
 
Bueno, tras un tiempo intentando hacer que funcione... sigo igual.

Ahora estoy probando con una VM con ubuntu desktop y conectada directamente a un router 3G, pero al encender la VPN me pide la contraseña (entiendo que es la que se usa al exportar: MySuperVPN!) y se queda en las mismas, no conecta:

Ver el adjunto 83820

He seguido el manual en el router paso a paso sin que me arroje ningún fallo, por lo que imagino que el error no estará en ese lado... pero tampoco sé qué log mirar para encontrar qué está fallando.

¿Alguna idea @pokoyo?
En gateway no iría la CA, sino el certificado del servidor.

No he dicho nada.

Saludos!
 
Última edición:
Por otro lado, ¿has instalado strongswan en ese equipo? @stargate4you, @Yoniper, me suena que uno de los dos había probado esto en linux, ¿puede ser?

Saludos!
 
Creo que StrongSwan esta basado en IPsec.
No recuerdo haberlo usado, debe haber sido el otro compi.

Saludos.
 
Sí, yo lo tengo funcionando.
El pantallazo del compañero lo veo bien.
Instalo los paquetes de strongswan y después añado network-manager-strongswan para configurar la conexión mediante gui.
La contraseña que te pide es la que ponemos al exportar el certificado del cliente en el router.
Saludos.
 
Última edición:
Sí, yo lo tengo funcionando.
El pantallazo del compañero lo veo bien.
La contraseña que te pide es la que ponemos al exportar el certificado del cliente en el router.
Saludos.
y en gateway iba la CA? Ya me falla la memoria...

Saludos!
 
Os dejo un pantallazo de como lo tengo.
Instalación de paquetes : Strongswan y después añado network-manager-strongswan para configurar la conexión mediante gui.
Saludos.

Captura de pantalla_2021-06-28_19-28-31.png
 
Muchas gracias por la guía, he echado a andar el servidor para "road warrior". Un par de detalles:

· He modificando "ike2-conf-road-warrior" para que las peticiones DNS vayan por el túnel y las resuelva el router. Quizás me suba la latencia, no lo he medido, pero así puedo usar direcciones del dominio local.
· Tenía varios puertos abiertos a internet para un proxy inverso dentro de mi red y todas las peticiones desde el cliente móvil me las mandaba al proxy. He tenido que cambiar las reglas de NAT para especificar que las aplique al tráfico entrante por WAN que no tenga ip de rango local. Lo dejo por si a alguien le resulta de utilidad:

Por ejemplo, el puerto 443:
Código:
/ip firewall address-list
add address=192.168.0.0/16 list=lan_horizon
/ip firewall mangle
add action=dst-nat chain=dstnat comment="Sulaco -> HTTPS" dst-port=443 \
    in-interface-list=WAN protocol=tcp \
    to-addresses=192.168.1.50 to-ports=9003

Cambiado a:
Código:
/ip firewall address-list
add address=192.168.0.0/16 list=lan_horizon
/ip firewall mangle
add action=dst-nat chain=dstnat comment="Sulaco -> HTTPS" dst-port=443 \
    in-interface-list=WAN protocol=tcp src-address-list=!lan_horizon \
    to-addresses=192.168.1.50 to-ports=9003
 

Configuración en modo site-to-site​

Esta conexión hay dos maneras de hacerla. O podemos montar un túnel IKEv2, exactamente del mismo modo que se conectaría cualquier cliente road-warrior, usando su perfil, para luego levantar sobre dicho túnel otro túnel IPIP, GRE, EoIP, etc y así hacer el enrutadoaf

Buenas, ¿como sería esta configuración en el mikrotik cliente?, lo estoy intentado pero no tengo manera de que se vean las redes.

Un Saludo.
 

Configuración en modo site-to-site​

Esta conexión hay dos maneras de hacerla. O podemos montar un túnel IKEv2, exactamente del mismo modo que se conectaría cualquier cliente road-warrior, usando su perfil, para luego levantar sobre dicho túnel otro túnel IPIP, GRE, EoIP, etc y así hacer el enrutadoaf

Buenas, ¿como sería esta configuración en el mikrotik cliente?, lo estoy intentado pero no tengo manera de que se vean las redes.

Un Saludo.
¿tienes ya ambos extremos conectados en modo road-warrior? Si los tienes, creas sendos túneles, uno en cada extremo (IPIP, por ejemplo), con dos IP's /30 para dichas interfaces y, en la declaración del túnel, le pones como extremo la IP del IKEv2. Luego, sobre las IP's /30 que has definido para esas nuevas interfaces, declaras una ruta estática que te diga que la LAN X se llega por el túnel Y, y que a la LAN Y, se llega por el túnel X, y listo.

Saludos!
 
¿tienes ya ambos extremos conectados en modo road-warrior?
El caso es que no lo tengo muy claro, en el log del router HQ me da esto:

new ike2 SA (R): 192.168.x.x[4500]-84.122.x.x[4500] spi:c1397..........
peer authorized: 192.168.x.x[4500]-84.122.x.x[4500] spi:c1397..........
acquired 192.168.71.254 address for 84.122.x.x, mobile@router.pericopalotes.com

Siendo la 192.168.x.x la dirección del router HQ y la 192.168.71.254 supongo que será la ip que le asigna al otro router.

Un Saludo.
 
Sí, eso tiene buena pinta. Mira si desde el router HQ puedes hace ping a la IP del router remoto, a la que sea que le haya otorgado como Peer. Lo puedes ver, en HQ, en la IP -> IPSec -> Active Peers, columna Dynamic Address.

Digamos, por ejemplo (sino, pásame un export y lo vemos con datos reales), que has establecido un túnel IKEv2 y que tu pool de VPN es el 192.168.89.0/24, siendo la IP que le otorga IKEv2 al equipo remoto la 192.168.89.2, y la 192.168.89.1 tu IP local (asignada al bridge de loopback)

En ese momento, podrías levantar un túnel desde HQ al remoto y viceversa, tipo esto:
Código:
# En HQ, ip local 192.168.89.1, IP remota 192.168.89.2
/interface ipip
add local-address=192.168.89.1 name=ipip-tunnel-to-remote remote-address=192.168.89.2

En el remoto, idéntico, pero a la inversa
Código:
# En el remoto, ip local 192.168.89.2, IP remota (HQ) 192.168.89.1
/interface ipip
add local-address=192.168.89.2 name=ipip-tunnel-to-hq remote-address=192.168.89.1

En ese momento ya tienes dos interfaces routeables que montan un túnel sobre IKEv2. Te quedaría darles una IP /30 a cada interfaz de cada lado, y montar rutas estáticas para encontrar el otro lado. Imaginemos que usamos como IP's de los túneles la 192.172.16.1/30 para HQ y la 192.172.16.2/30 para el remoto. Nos quedaría algo así:
Código:
# En el lado HQ
/ip address
add address=192.172.16.1/30 interface=ipip-tunnel-to-remote network=192.172.16.0

Código:
# En el lado Remoto
/ip address
add address=192.172.16.2/30 interface=ipip-tunnel-to-hq network=192.172.16.0

Con esto y un bizcocho, lo único que nos quedarían serían las rutas estáticas, para decirle "A la lan del otro lado, se llega por este túnel que te doy". Imaginemos que los segmentos LAN HQ y remoto son 192.168.88.0/24 y 192.168.87.0/24 respectivamente. Tendríamos que añadir las siguientes rutas estáticas para que el tema funcione:
Código:
# En el lado HQ
/ip route
add dst-address=192.168.87.0/24 gateway=192.172.16.2

Y en el lado remoto, idéntico pero a la inversa
Código:
# En el lado Remoto
/ip route
add dst-address=192.168.88.0/24 gateway=192.172.16.1

Con eso tendrías comunicadas las LAN de ambos extremos, usando interfaces routeables (túneles IPIP) sobre otro túnel IKEv2. Y, la parte de las policies y el marcado de paquetes en mangle, te lo ahorras.

Saludos!
 
Lo puedes ver, en HQ, en la IP -> IPSec -> Active Peers, columna Dynamic Address.

Buenos días, los datos que me da en HQ son:

Local Address --> ip local Lan de mi router
Remote Adress -> ip wan remota
Dynamic Address -> 192.168.71.15 (mi pool VPN es 192.168.71.0/24)

En el router remoto:

Local Address --> ip local Lan de mi router
Remote Adress -> ip wan remota
Dynamic Address -> 0.0.0.0

Pero no hago ping a nada y la conexión está establecida.

tu IP local (asignada al bridge de loopback)
Esto no lo entiendo muy bien, no sé que significa.

Todo lo demás creo entenderlo, pero si no hago ping al otro extremo no puedo seguir.

Comentarte que los dos Mikrotik están detrás de routers de operadora haciendo doble NAT y que ya tengo un tunel EOIP sobre L2TP/Ipsec entre ellos funcionando bien, estoy probando IKev2 que te he leído que dan mejor rendimiento.

Por cierto, cuando intento conectarme con windows10 no lo consigo, me dice "Las credenciales de autenticación IKE son inaceptables", ¿es problema de windows?.

Un Saludo.
 
Arriba