MANUAL: Mikrotik, IKEv2 VPN a fondo

Introducción​

Hoy os vengo a traer una evolución (o directamente sustitución) del manual para montar una VPN de tipo IKEv2. Después de probar más a fondo esta VPN, me he dado cuenta de que, si bien el manual original es muy sencillo de montar y juega mucho con la configuración por defecto del router, no es la mejor de las configuraciones ni la más estable que podemos montar para este tipo de VPN. Además de esto, quiero mostraros cómo montar no sólo una VPN de tipo road-warrior, sino también como unir dos sedes usando este tipo de VPN, que sinceramente creo es la mejor que podéis montar en un equipo de esta marca, a día de hoy.
Como las presentaciones ya están hechas y sabéis de qué va el tema si habéis leído ya el otro manual, voy al grano.

Generación de certificados​

Me baso en que tenéis un dominio propio, en mi caso y para el ejemplo será pericopalotes.com, el cual apunta a la IP pública de vuestra conexión con el sub-dominio router.pericopalotes.com, de la manera que creáis conveniente. No obstante, podéis hacer lo mismo con el dominio que os regala mikrotik, el cual podéis encontrar en IP -> Cloud, si activáis esa opción. Vamos a crear dos certificados, uno para un cliente road-warrior, un supuesto teléfono móvil y el otro para un cliente de tipo oficina, que conectaremos en remoto a nuestro HQ.
Código:
# Creaccion de los certificados
# Primero la CA
/certificate
add name=vpn-ca country=ES state=Tabarnia locality=Rivendel organization="Perico Palotes LTD"\
common-name="VPN CA" subject-alt-name=DNS:pericopalotes.com key-size=2048 days-valid=3650 trusted=yes\
key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,crl-sign

# Luego el certificado del servidor
add name=vpn-server country=ES state=Tabarnia locality=Rivendel organization="Perico Palotes LTD" unit=VPN\
common-name="VPN Server" subject-alt-name=DNS:router.pericopalotes.com key-size=2048 days-valid=1825\
key-usage=tls-server,key-encipherment,digital-signature

# Por ultimo una template para crear certificados cliente
add name=~vpn-client-template country=ES state=Tabarnia locality=Rivendel organization="Perico Palotes LTD"\
common-name="VPN Client XXX" subject-alt-name=email:xxx@router.pericopalotes.com key-size=2048\
days-valid=730 key-usage=tls-client

#Y los certificados de tipo cliente, copia de la template
add copy-from=~vpn-client-template name=vpn-client-mobile common-name="VPN Client Mobile"\
subject-alt-name=email:mobile@router.pericopalotes.com
add copy-from=~vpn-client-template name=vpn-client-branch common-name="VPN Client Branch"\
subject-alt-name=email:branch@router.pericopalotes.com

# Los firmamos
/certificate
sign vpn-ca
{:delay 5};
sign vpn-server ca=vpn-ca
sign vpn-client-mobile ca=vpn-ca
sign vpn-client-branch ca=vpn-ca

# Exportar la CA y los certificados cliente
/certificate
export-certificate vpn-ca file-name=ca
export-certificate vpn-client-mobile type=pkcs12 export-passphrase="MySuperVPN!" file-name=mobile
export-certificate vpn-client-branch type=pkcs12 export-passphrase="MySuperVPN!" file-name=branch

A continuación, daremos de alta un pool para los clientes de tipo road-warrior. Abriremos un "hueco" en dicho pool, puesto que usaremos las primeras direcciones para las oficinas remotas en el modo site-to-site
Código:
/ip pool
add name=pool-vpn ranges=192.168.68.10-192.168.68.254

Y ahora creamos toda la configuración para IPSec, auto explicada en sus comentarios
Código:
#Creamos dos configuraciones, una para road warrior, y otra para la oficina remota
/ip ipsec mode-config
add address-pool=pool-vpn address-prefix-length=32 name=ike2-conf-road-warrior split-include=0.0.0.0/0 system-dns=yes
add address=192.168.68.2 address-prefix-length=32 name=ike2-conf-branch system-dns=no

# Damos de alta un nuevo groupo para asociar a él las plantillas de configuración con los policies a usar
/ip ipsec policy group
add name=ike2-template-group

# Damos de alta el perfil de authenticación
/ip ipsec profile
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 hash-algorithm=sha256 name=ike2-profile

# Damos de alta el peer que escuchará las conexiones remotas, de tipo IKEv2
/ip ipsec peer
add exchange-mode=ike2 name=ike2-peer passive=yes profile=ike2-profile

# Damos de alta la propuesta de negociación para el intercambio de claves IKE y SAs
# Las claves tendrán una validez de 8h para evitar renegociaciones innecesarias y el pfs-group=none para
# aumentar la compatiblidad con dispositivos moviles, tipo Apple. Restringimos el proposal a tipo de encriptación AES
/ip ipsec proposal
add auth-algorithms=sha512,sha256,sha1 enc-algorithms=aes-256-cbc,aes-256-ctr,aes-256-gcm,aes-192-ctr,aes-192-gcm,aes-128-cbc,aes-128-ctr,aes-128-gcm lifetime=8h \
    name=ike2-proposal pfs-group=none

# Damos de alta las identidades de los clientes que se van a conectar al router
# Por un lado el movil en modo road warrior, y por otro el router remoto en modo branch
# Cada uno apuntando a un mode-config distinto, y al nuevo grupo de plantillas que hemos creado
/ip ipsec identity
add auth-method=digital-signature certificate=vpn-server comment=mobile generate-policy=port-strict match-by=certificate mode-config=ike2-conf-road-warrior peer=ike2-peer \
    policy-template-group=ike2-template-group remote-certificate=vpn-client-mobile
add auth-method=digital-signature certificate=vpn-server comment=router-branch generate-policy=port-strict match-by=certificate mode-config=ike2-conf-branch peer=\
    ike2-peer policy-template-group=ike2-template-group remote-certificate=vpn-client-branch

# Creamos dos plantillas con las políticas pertinentes, ambas pertenecientes al nuevo grupo
# Suponemos 192.168.88.0/24 como LAN local del router de HQ, este que estamos configurando, y 192.168.98.0/24 como LAN local del router tipo branch remoto
# La 192.168.68.0/24 es nuestro segmento VPN para los equipos en modo road-warrior
/ip ipsec policy
add comment=road-warrior dst-address=192.168.68.0/24 group=ike2-template-group proposal=ike2-proposal src-address=0.0.0.0/0 template=yes
add comment=site-to-site dst-address=192.168.98.0/24 group=ike2-template-group proposal=ike2-proposal src-address=192.168.88.0/24 template=yes

Una vez hecho esto, tenemos el router listo para admitir conexiones remotas, tanto de clientes que vengan de cualquier IP den modo road-warrior, como el cliente remoto que será nuestra oficina que conecta con este router como head-quarter. Estamos suponiendo que la oficina remota tiene una LAN distinta de la principal, en este caso la principal supones está en la 192.168.88.0/24 (la red por defecto del mikrotik) y la remota será la 192.168.98.0/24. Como veis, las plantillas de generación de políticas de ikev2 van asociadas a dichas IPs.

Configuración en modo road-warrior​

En esta parte no me voy a parar, porque ya está explicada en el manual anterior. Exportáis los certificados CA y cliente (en este caso el mobile, que yo llamé "VPN Client iPhone") y los importáis en el dispositivo móvil que vayáis a usar, confiando ciegamente en la CA. El endpoint de conexión sería "router.pericopalotes.com" y la autenticación se haría por certificados, sin ninguna otra contraseña de por medio. Una vez conectados, navegaréis y tendréis los DNS del router principal. Un ejemplo de configuración en un iPhone, una vez hecha la importación de los certificados:
1617444025450.png


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 enrutado, o podemos usar las policies de IPSec para enrutar el tráfico. Esta segunda manera no es trivial, puesto que no vamos a tener como tal una tabla de rutas donde podamos ver el caminio que seguiran los paquetes, sino que IKEv2 los tele-transportará usando las políticas de in-ipsec y out-ipsec. Me voy a centrar en esta segunda manera porque creo que es la manera correcta de hacerlo, y además vamos a obtener mucho mejor resultado en rendimiento, puesto que no vamos a generar overhead por el encapsulado de un túnel dentro de otro túnel. Si alguien quiere más detalle del setup de túnel sobre túnel, que pregunte, que lo puedo explicar también.

Del lado del servidor lo tenemos todo listo (salvo ajustar la parte del firewall, que la veremos un pelín más tarde) para que un cliente remoto establezca la conexión, ya sea tipo road warrior (usará la primera template) o de tipo site-to-site (usará la segunda template). Podemos crear tantas templates como redes queramos transportar de un lado al otro usando IPSec.

Lo primero que haremos del lado cliente es importar los dos certificados, la CA y el certificado cliente. Una vez importados, podemos renombrarlos si queremos, y así ponerle un nombre más descriptivo. En mi caso, el certificado de tipo CA se va a llamar "ca" y el certificado cliente se llamará "vpn-client-branch". Hecho esto, damos de alta una configuración similar que en el router de la oficina principal, con la única salvedad que el peer apuntará a la URL del equipo que hace de servidor VPN (router.pericopalotes.com) y que crearemos una policy de tipo túnel, en lugar de template. En este caso el identity apuntará únicamente a nuestro certificado cliente (no hay certificado servidor como en el otro lado), y pediremos la configuración al remoto. Con esto, nos quedaría así la configuración del cliente de tipo oficina remota
Código:
# Nuevo template group, idéntico al del router HQ
/ip ipsec policy group
add name=ike2-template-group
# Perfil, idéntico al del servidor
/ip ipsec profile
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 \
    hash-algorithm=sha256 name=ike2-profile

# Peer, apuntando a la dirección de nuestro dominio o IP estática del router HQ
/ip ipsec peer
add address=router.pericopalotes.com exchange-mode=ike2 name=ike2-hq-peer \
    profile=ike2-profile

# Proposal, idéntico al del router de HQ
/ip ipsec proposal
add auth-algorithms=sha512,sha256,sha1 enc-algorithms="aes-256-cbc,aes-256-ctr,a\
    es-256-gcm,aes-192-ctr,aes-192-gcm,aes-128-cbc,aes-128-ctr,aes-128-gcm" \
    lifetime=8h name=ike2-proposal pfs-group=none

# Identity, en este caso especificando únicamente el certificado cliente
# Y, como configuración, indicamos "request-only" para pedirsela al remoto
/ip ipsec identity
add auth-method=digital-signature certificate=vpn-client-branch generate-policy=\
    port-strict mode-config=request-only peer=ike2-hq-peer \
    policy-template-group=ike2-template-group

# Policy, en este caso en modo túnel, no template
# Origen la LAN de nuestra oficina branch, destino la LAN del router HQ
/ip ipsec policy
add dst-address=192.168.88.0/24 level=unique peer=ike2-hq-peer proposal=\
    ike2-proposal src-address=192.168.98.0/24 tunnel=yes

Si todo ha ido bien, en el router cliente, el que hace de branch remota, tendremos una entrada tipo túnel en la pestaña de IPSec Policies, y en la columna PH2 State, veremos el mensaje "established". Dicha entrada habrá golpeado en el router remoto, en la template "site-to-site", y se habrá generado una entrada similar, creada por la plantilla de forma dinámica, con el mismo mensaje "established" en la columna PH2 State. Si navegamos en cualquiera de los dos routers a la pestaña "Installed SAs" podremos ver las claves de encriptado que se han generado en ambos extremos (autenticación sha512 y encriptado aes cbc de 256 bits) , y en la pestaña "Active Peers" podremos ver la conexión del cliente en sí. En este momento ambas LANs estarán conectadas y podremos lanzar un ping desde un cliente conectado al router de HQ hacia un cliente conectado al router de la branch y viceversa.
En el router cliente, veréis una nueva dirección 192.168.68.2 que ha aparecido de manera dinámica sobre ether1 (o la que sea vuestra interfaz WAN), lo cual podéis comprobar en IP -> Address.

Una cosa curiosa de este método es que nos permite conectividad incluso si el router de la oficina estuviera debajo de un NAT de otro router de operadora. Si además quisiéramos tener acceso desde al oficina HQ a dicho router que está por encima de nuestro mikrotik en la branch remota, bastaría con crear un nuevo túnel en el router de dicha oficina mandándole a la red remota la red de dicho equipo. Como ambos están conectados entre sí, podríamos incluso acceder a ese equipo que tenemos por encima.

Ajustando el firewall - Reglas de input y TCP MSS​

En el firewall de ambos equipos necesitamos hacer un par de ajustes. Obviamente permitir el tráfico de IPSec en el chain de input (puertos 4500 y 500), permitiremos también el tráfico del protocolo 50 para ESP. En el router de tipo branch, además, permitiremos el tráfico de entrada encriptado, desde la red lan HQ, para administrar ese router de forma remota, una vez el túnel esté levantado.
Fijaos que en ninguno de los dos lados nos hará falta una regla de masquerade como nos pasa con otro tipo de VPN's, puesto que la regla general que enmascara el tráfico que sale por la WAN ya lleva un tipo de policy "out,none" que nos evita tener que hacerlo. Del resto, se encargan las templates del apartado Policies en ambos lados de la conexión, auto-mágicamente.

Firewall -> Filter (Lado Servidor, HQ)
Código:
/ip firewall filter
add action=accept chain=input comment="allow ipsec" dst-port=500,4500 protocol=udp
add action=accept chain=input protocol=ipsec-esp

Firewall -> Filter (Lado Cliente, Branch). Permitimos también la administración remota desde la LAN de HQ.
Código:
/ip firewall filter
add action=accept chain=input comment="allow ipsec" dst-port=500,4500 protocol=udp
add action=accept chain=input protocol=ipsec-esp
add action=accept chain=input comment="allow HQ access to router" ipsec-policy=in,ipsec src-address=192.168.88.0/24

Por último nos queda ajustar el MSS de los paquetes TCP. Y diréis, ¿qué narices es eso? Pues bien, aunque tal y como está la conexión os va a dar un buen resultado, el tema se puede mejorar aún más si ajustamos el tamaño del paquete. Al estar trabajando con IPSec y con tráfico encriptado, no toda la información del los 1500bytes del tamaño de paquete la podemos usar para transportar información útil, puesto que el propio encapsulado y el encriptado se come parte de ese tamaño. Para evitar dicha fragmentación, lo que haremos será modificar el valor del tamaño del paquete para los mensajes que se intercambien como TPC SYN, tal que si un cliente remoto quiere enviarnos información, lo primero que hará será mandarnos ese paquete de sincronización, donde ya le estaremos advirtiendo de que nuestra capacidad de mandar información útil es algo menor que los 1500bytes del MTU. Esto es algo que en otras VPN que manejan interfaces es automático, puesto que llevan un flag llamado "Clamp TCP MSS", que por defecto ya viene marcado (mirad por ejemplo los túneles de tipo L2TP o EoIP), pero al estar trabajando sin interfaces e ir directamente por IP, no tenemos esa opción. Para esto crearemos las siguientes reglas de mangle, que harán exactamente lo mismo:

Mangle, en el router HQ, Servidor (2x road warrior + 1x de entrada por cada de LAN de oficina remota)
Código:
/ip firewall mangle
add action=change-mss chain=forward comment="ike2-road-warrior clamp tcp mss" ipsec-policy=in,ipsec new-mss=1360 passthrough=yes protocol=tcp src-address=192.168.68.0/24 \
    tcp-flags=syn tcp-mss=!0-1360
add action=change-mss chain=forward dst-address=192.168.68.0/24 ipsec-policy=out,ipsec new-mss=1360 passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=!0-1360
add action=change-mss chain=forward comment="ike2-branch clamp tcp mss" dst-address=192.168.88.0/24 ipsec-policy=in,ipsec new-mss=1360 passthrough=yes protocol=tcp \
    src-address=192.168.98.0/24 tcp-flags=syn tcp-mss=!0-1360

Mangle, en el router de la branch (una única entrada, para el tráfico de entrada al router HQ)
Código:
/ip firewall mangle
add action=change-mss chain=forward comment="ike2-hq clamp tcp mss" dst-address=192.168.98.0/24 \
    ipsec-policy=in,ipsec new-mss=1360 passthrough=yes protocol=tcp src-address=192.168.88.0/24 tcp-flags=syn \
    tcp-mss=!0-1360

Y, con esto y un bizcocho, hemos terminado por hoy de afinar aún más las conexiones VPN de tipo IKEv2. Si alguien se anima a probar el túnel site-to-site, que me diga qué rendimiento le da.

Saludos, y que lo disfrutéis!
 
Última edición:
@pokoyo Excelente manual. Gracias por la actualización y ampliación del anterior. Agradecerte siempre tu esfuerzo y dedicación.
Saludos.
De nada @stargate4you. Si alguno lo pone en práctica, me interesan mucho los resultados de velocidad con el nuevo cifrado. Tanto en road warrior como en site-to-site.


Tengo ese mismo setup en mi casa, pero el router remoto está detrás de un plc que a su vez está conectado a un router de operadora (operadora -> plc ≈≈≈ plc -> mikrotik), así que no pude como tal sacar una conclusión, en cuanto a velocidad. Lo que sí veo es que es super estable, y la renegociación se claves, o reconexión si la necesitara del site to site, es rapidísima. Y lo de poder trabajar con un doble NAT es un punto.

Saludos!
 
Gracias por compartir tanto curro !!!
Más cosas interesantes que añadir a la colección.

Saludos,
 
Fantástico manual, @pokoyo . Muchas gracias.

Yo intenté hace un tiempo tener al mismo tiempo el RW y un túnel y no lo conseguí. Voy a probar como lo haces tú a ver si me sale, pues creo que puede ser muy útil y seguro.

Sólo un apunte/sugerencia, por si fuera de utilidad. Yo en el modo RW tengo puesto:

/ip ipsec peer
add exchange-mode=ike2 name=rw-ike2-peer passive=yes profile=rw-ike2-prof \
send-initial-contact=no

Esto del "send-initial-contact" es un nombre poco afortunado, pues parece que no hace lo que se espera de tal denominación. El caso es que en el propio manual aconsejan que para RW NO se use. Te copio lo que dice:

Specifies whether to send "initial contact" IKE packet or wait for remote side, this packet should trigger removal of old peer SAs for current source address. Usually in road warrior setups clients are initiators and this parameter should be set to no. Initial contact is not sent if modecfg or xauth is enabled for ikev1.

Yo, cuando me estuve peleando para poner en marcha el Ikev2 si no ponía esto a "no" con algunos clientes al hacer el rekeying se caían, no te sé decir en qué ocasiones. Con ello a "no", al menos con clientes Apple y W10 me duran las conexiones horas, sin problemas.

Esto quizás te obligue a crear dos tipos de "peer", uno para RW y otro para el túnel.

Dicho lo anterior, supongo que después ponerle encima el EoiP será fácil, como en el manual el ejemplo de GRE sobre IPSEC, ¿no?

Cuando tenga un rato, lo pruebo y te digo.

Lo dicho, maestro: chapeau por tu dedicación y esfuerzo.
 
Fantástico manual, @pokoyo . Muchas gracias.

Yo intenté hace un tiempo tener al mismo tiempo el RW y un túnel y no lo conseguí. Voy a probar como lo haces tú a ver si me sale, pues creo que puede ser muy útil y seguro.

Sólo un apunte/sugerencia, por si fuera de utilidad. Yo en el modo RW tengo puesto:

/ip ipsec peer
add exchange-mode=ike2 name=rw-ike2-peer passive=yes profile=rw-ike2-prof \
send-initial-contact=no

Esto del "send-initial-contact" es un nombre poco afortunado, pues parece que no hace lo que se espera de tal denominación. El caso es que en el propio manual aconsejan que para RW NO se use. Te copio lo que dice:

Specifies whether to send "initial contact" IKE packet or wait for remote side, this packet should trigger removal of old peer SAs for current source address. Usually in road warrior setups clients are initiators and this parameter should be set to no. Initial contact is not sent if modecfg or xauth is enabled for ikev1.

Yo, cuando me estuve peleando para poner en marcha el Ikev2 si no ponía esto a "no" con algunos clientes al hacer el rekeying se caían, no te sé decir en qué ocasiones. Con ello a "no", al menos con clientes Apple y W10 me duran las conexiones horas, sin problemas.

Esto quizás te obligue a crear dos tipos de "peer", uno para RW y otro para el túnel.

Dicho lo anterior, supongo que después ponerle encima el EoiP será fácil, como en el manual el ejemplo de GRE sobre IPSEC, ¿no?

Cuando tenga un rato, lo pruebo y te digo.

Lo dicho, maestro: chapeau por tu dedicación y esfuerzo.
A mi lo que me daba problemas con los dispositivos apple era la configuración del proposal, concretamente el PFS Group. Poniendo el proposal con una validez de 8h y con el pfsgroup=none, no he tenido necesidad de tocar el campo que tú dices. Y, ahoramismo, mi Peer en el router del lado servidor (Head Office) es idéntico para roadwarrior que para site-to-site.

Saludos!
 
A mi lo que me daba problemas con los dispositivos apple era la configuración del proposal, concretamente el PFS Group. Poniendo el proposal con una validez de 8h y con el pfsgroup=none, no he tenido necesidad de tocar el campo que tú dices. Y, ahoramismo, mi Peer en el router del lado servidor (Head Office) es idéntico para roadwarrior que para site-to-site.

Saludos!
Sí. Yo tenía también problemas en dispositivos Apple con el PFS Group, si le asignaba algo que no fuera "none". Pero lo del send-initial-contact=no también lo tengo puesto.

Saludos!!!
 
Sí. Yo tenía también problemas en dispositivos Apple con el PFS Group, si le asignaba algo que no fuera "none". Pero lo del send-initial-contact=no también lo tengo puesto.

Saludos!!!
Tú prueba con esa configuración que te pongo y me dices. No obstante, siempre la podemos mejorar con vuestras aportaciones y experiencias, la modificamos según vayamos encontrando mejores maneras para afinarla.

Por si a alguien le interesa el insight, las configuraciones están basadas en los manuales del MUM de Nikita Tarikin, corrigiendo algunos gazapos que tienen las presentaciones, y yendo al grano, porque entre que el tipo es ruso y se expresa regular en inglés, y se ve que no le gusta mucho lo de hablar en público, las presentaciones son un tanto complejas de seguir. No obstante, las podéis buscar (tanto las presentaciones como las ppts asociadas) y juzgar vosotros mismos.

Saludos!
 
Tú prueba con esa configuración que te pongo y me dices. No obstante, siempre la podemos mejorar con vuestras aportaciones y experiencias, la modificamos según vayamos encontrando mejores maneras para afinarla.

Por si a alguien le interesa el insight, las configuraciones están basadas en los manuales del MUM de Nikita Tarikin, corrigiendo algunos gazapos que tienen las presentaciones, y yendo al grano, porque entre que el tipo es ruso y se expresa regular en inglés, y se ve que no le gusta mucho lo de hablar en público, las presentaciones son un tanto complejas de seguir. No obstante, las podéis buscar (tanto las presentaciones como las ppts asociadas) y juzgar vosotros mismos.

Saludos!
Hola, compañero. Finalmente he tenido un buen rato libre y he implementado en el hAP mini el túnel s2s ikeV2, siguiendo tus indicaciones y va estupendamente, muchas gracias. Solo he podido probarlo a través del móvil como WAN, pero va muy bien. Cuando tenga la ocasión de conectarme a un sitio remoto real, ya te diré, pero mi impresión es muy buena.

Por otra parte, para la casa de vacaciones, estoy montando un hAP y ahí, como quiero llevar no solo acceso a la LAN de casa, sino también al Voip y a IPTV con multicast y todo, he montado un Eoip sobre IkeV2, para comparar con el Eoip sobre IPSec estándar automatico. Pare ello, he seguido las indicaciones del manual de MK del apartado de IPSec, en concreto, como montar un túnel GRE sobre IPSec. Solo que he hecho un túnel IkeV2 con RSA (certificados) y en vez del GRE, Eoip. Después he añadido los extremos del túnel a los correspondientes bridges de cada router y he probado. Pues el resultado es fantástico: mucho mejor que con el Eoip con IPSec automático, en particular, en el acceso y manejo d IPTV.. Y eso que lo ha probado a través del móvil como WAN! Mientras que con el otro túnel el desco iba a pedales y tardaba varios minutos en cargarse, dando errores de acceso todo el rato, con el nuevo tunel va, no como en casa, pero al menos carga en tiempo razonable y no da errores. Un éxito! ¡Ardo en deseos de poder probarlo en real en la casa de vacaciones!

muchas gracias por tus indicaciones, maestro y de ponerme sobre la pista de como hacer el túnel Eoip sobre IkeV2. Si alguien estuviese interesado, puedo dar las indicaciones precisas.

Saludos!
 
Hola, compañero. Finalmente he tenido un buen rato libre y he implementado en el hAP mini el túnel s2s ikeV2, siguiendo tus indicaciones y va estupendamente, muchas gracias. Solo he podido probarlo a través del móvil como WAN, pero va muy bien. Cuando tenga la ocasión de conectarme a un sitio remoto real, ya te diré, pero mi impresión es muy buena.

Por otra parte, para la casa de vacaciones, estoy montando un hAP y ahí, como quiero llevar no solo acceso a la LAN de casa, sino también al Voip y a IPTV con multicast y todo, he montado un Eoip sobre IkeV2, para comparar con el Eoip sobre IPSec estándar automatico. Pare ello, he seguido las indicaciones del manual de MK del apartado de IPSec, en concreto, como montar un túnel GRE sobre IPSec. Solo que he hecho un túnel IkeV2 con RSA (certificados) y en vez del GRE, Eoip. Después he añadido los extremos del túnel a los correspondientes bridges de cada router y he probado. Pues el resultado es fantástico: mucho mejor que con el Eoip con IPSec automático, en particular, en el acceso y manejo d IPTV.. Y eso que lo ha probado a través del móvil como WAN! Mientras que con el otro túnel el desco iba a pedales y tardaba varios minutos en cargarse, dando errores de acceso todo el rato, con el nuevo tunel va, no como en casa, pero al menos carga en tiempo razonable y no da errores. Un éxito! ¡Ardo en deseos de poder probarlo en real en la casa de vacaciones!

muchas gracias por tus indicaciones, maestro y de ponerme sobre la pista de como hacer el túnel Eoip sobre IkeV2. Si alguien estuviese interesado, puedo dar las indicaciones precisas.

Saludos!
Prueba IPIP o EoIP también sobre IKEv2, que se puede. No lo documenté por no hacer el manual más tocho, pero lo tienes explicado en el ppt de MUM de Nikita. De hecho, el la forma “fácil” de hacerlo, porque tienes dos IPs, las de ambos extremos del túnel, y lo único que necesitas es montar dicha interfaz de túnel encima de túnel (a elegir) y las rutas correspondientes para enrutar ambos extremos, y lo tienes montado.

Otra opción que me gusto mucho también fue la que se explica en este vídeo, aunque aún no me ha dado para probarla.


Si te animas a probarlo, no dudes en compartirlo. Yo con el site to site estoy muy contento montado con policy templates, funciona como un cañon.

Saludos!
 
Prueba IPIP o EoIP también sobre IKEv2, que se puede. No lo documenté por no hacer el manual más tocho, pero lo tienes explicado en el ppt de MUM de Nikita. De hecho, el la forma “fácil” de hacerlo, porque tienes dos IPs, las de ambos extremos del túnel, y lo único que necesitas es montar dicha interfaz de túnel encima de túnel (a elegir) y las rutas correspondientes para enrutar ambos extremos, y lo tienes montado.

Otra opción que me gusto mucho también fue la que se explica en este vídeo, aunque aún no me ha dado para probarla.


Si te animas a probarlo, no dudes en compartirlo. Yo con el site to site estoy muy contento montado con policy templates, funciona como un cañon.

Saludos!
jajaja. Me parece que andas apurado con algo y no has leído mi mensaje en detalle. Si te fijas, el segundo túnel que he hecho, entre el hEX y el hAP, decía que era precisamente un EoiP sobre IkeV2.

Pero voy a echar un vistazo a ese vídeo, que tiene buena pinta... Gracias!!!
 
Correcto, he visto GRE y me he quedado con que habías montado eso, en lugar del EoIP. Mil perdones.

Lo del BCP lo tengo pendiente, porque me parece también un invento. Pena no poder movernos ahora, como bien dices, y poder trastear con estos temas. Pero buenos esperemos que de cara al verano la cosa mejore y tengamos ya nuestros routers listos para echarlos a la maleta.

Saludos!
 
Correcto, he visto GRE y me he quedado con que habías montado eso, en lugar del EoIP. Mil perdones.

Lo del BCP lo tengo pendiente, porque me parece también un invento. Pena no poder movernos ahora, como bien dices, y poder trastear con estos temas. Pero buenos esperemos que de cara al verano la cosa mejore y tengamos ya nuestros routers listos para echarlos a la maleta.

Saludos!
Jajaja!. ¡No hay nada que perdonar, hombre!

Ya te diré lo del BCP cuando lo estudie, que tiene buena pinta.

Saludos!
 
muchas gracias por tus indicaciones, maestro y de ponerme sobre la pista de como hacer el túnel Eoip sobre IkeV2. Si alguien estuviese interesado, puedo dar las indicaciones precisas.

Todos los manuales son bienvenidos. Así queda documentado y siempre le puede venir bien a alguien ( no os quepa la menor duda ). Estupendo trabajo.
Gracias por la parte que os corresponde a cada uno.
Saludos.
 
Todos los manuales son bienvenidos. Así queda documentado y siempre le puede venir bien a alguien ( no os quepa la menor duda ). Estupendo trabajo.
Gracias por la parte que os corresponde a cada uno.
Saludos.
Bueno, pues aquí viene mi aportación. La añado a este mismo hilo, pero si no os parece apropiado, la borro e inicio otro hilo distinto, pero es que creo que están totalmente relacionadas.
 
Bueno, pues aquí viene mi aportación. La añado a este mismo hilo, pero si no os parece apropiado, la borro e inicio otro hilo distinto, pero es que creo que están totalmente relacionadas.
Dale sin miedo!

Saludos!
 
El objetivo es hacer un túnel EoiP sobre un túnel Ipsec/IKEv2 con RSA (certificados) entre dos routers MK, de modo que un bridge del router remoto quede integrado totalmente en un bridge del router de HQ (equivalente a esto, se monta automáticamente si creamos un túnel EoiP y le marcamos que sea sobre Ipsec. Pero así, lo que se monta, no es Ikev2). Este bridge lo denominaremos IPTV-bridge, mientras que los bridges "locales" de cada router los podemos llamar como queramos (por ejemplo, LAN-bridge, en HQ, y Playa-bridge, en el router remoto). Partimos, en el router de HQ (en mi caso un hEX), de la configuración con dos bridges, triple VLAN de Movistar, tal y como se indica en el hilo de configuraciones básicas.

Y otro router remoto, "Playa" (en mi caso un hAP), con una configuración estándar de QuickSet, sólo que el acceso WAN lo adaptamos, lógicamente, a lo que diga el ISP de ese lugar; y, eso sí, le ponemos como dirección del Playa-bridge 192.168.18.0/24, para no confundirnos con la del HQ (que es 192.168.88.0/24).

Pues empezamos con el router de HQ

A esta configuración que decía, le aplicamos primero los cambios que indica @pokoyo arriba para el IKEv2 en Road Warrior (sólo los de RW, los de site-to-site no son necesarios, a menos que tengamos un tercer router y queramos conectarlo también, pero con el túnel site-to-site Ikev2 simple, ya descrito por @pokoyo; pero no pasa nada si se queda también es<a otra configuración, pues los pasos que voy a exponer no son incompatibles).

1-a) Vamos a crear un nuevo certificado para el router remoto "Playa" (supongo que tenéis ya creados previamente los certificados raíz "VPN CA" y del servidor "VPN Server", según el manual de @pokoyo más arriba. Si no, los creáis, pues son imprescindibles):
Código:
/certificate
add copy-from=~vpn-client-template name=vpn-client-playa common-name="VPN Client Playa"\
subject-alt-name=email:playa@router.pericopalotes.com

1-b) Lo firmamos:
Código:
/certificate
sign vpn-ca
{:delay 5};
sign vpn-client-playa ca=vpn-ca

1-c) ...y lo exportamos:
Código:
/certificate
export-certificate vpn-client-playa type=pkcs12 export-passphrase="MySuperVPN!" file-name=playa

2-a) Ahora vamos a crear un tercer bridge "loopback" en el router HQ. Este es un bridge "tonto", con una dirección de red propia, que solo va a recibir, como veréis, un extremo del túnel IPSEC, pero sobre esa dirección vamos a montar después el túnel EoiP:
Código:
/interface bridge
add comment="Site-to-site dummy bridge" name=loopback

2-b) Ahora creamos una subred para el túnel y le damos una dirección al bridge "loopback":
Código:
/ip address
add address=192.168.99.1 comment="For site-to-site IkeV2 EoiP tunnel" \
    interface=loopback network=192.168.99.1

3) Ahora vamos a configurar el túnel Ipsec Ikev2. Pongo en comentarios (copiados de @pokoyo) los pasos de la parte común con Road Warrior, por si no los hubierais hecho, pues son imprescindibles:

3-a) Creamos su propio mode-config. Como veis, lo que hacemos es inyectar el tráfico por el túnel hasta el extremo remoto 192.168.99.2 de la red del bridge "loopback":
Código:
/ip ipsec mode-config
add address=192.168.99.2 address-prefix-length=32 name=eoip-ike2-config \
    split-include=192.168.99.1/32 system-dns=no

3-b) Los siguientes son pasos comunes con la configuración RW, pero es imprescindible tenerlos configurados, si no lo habéis hecho previamente:
Código:
# Damos de alta un nuevo group para asociar a él las plantillas de configuración con los policies a usar
/ip ipsec policy group
add name=ike2-template-group

# Damos de alta el perfil de autenticación
/ip ipsec profile
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 hash-algorithm=sha256 name=ike2-profile

# Damos de alta la propuesta de negociación para el intercambio de claves IKE y SAs
# Las claves tendrán una validez de 8h para evitar renegociaciones innecesarias y el pfs-group=none para
# aumentar la compatiblidad con dispositivos moviles, tipo Apple. Restringimos el proposal a tipo de encriptación AES
/ip ipsec proposal
add auth-algorithms=sha512,sha256,sha1 enc-algorithms=aes-256-cbc,aes-256-ctr,aes-256-gcm,aes-192-ctr,aes-192-gcm,aes-128-cbc,aes-128-ctr,aes-128-gcm lifetime=8h \
name=ike2-proposal pfs-group=none

3-c) Este paso es común con RW, pero lo pongo porque yo difiero de la configuración de @pokoyo: aquí en el lado HQ tengo deshabilitado send-initial-contact=no. Esto es porque, con algunos dispositivos clientes, no me funcionaba bien el RW en alguna fase. Además, como veréis, en el lado remoto "Playa", SI lo tengo habilitado: con ello la iniciativa de levantar el enlace se la dejo al lado remoto, que es el que puede estar desconectado o apagado sin uso más frecuentemente:
Código:
/ip ipsec peer
add exchange-mode=ike2 name=ike2-peer passive=yes profile=ike2-profile send-initial-contact=no

3-d) Damos de alta la identidad del lado remoto "Playa", apuntando a su mode-config:
Código:
/ip ipsec identity
add auth-method=digital-signature certificate=vpn-server comment=router-playa generate-policy=port-strict match-by=certificate mode-config=eoip-ike2-config peer=\
    ike2-peer policy-template-group=ike2-template-group remote-certificate=vpn-client-playa

3-e) Por fin, creamos la plantilla de la política para este túnel. Fijaos que lo hacemos entre las dos direcciones de la red .99, es decir, el lado de loopback (.99.1) y el lado remoto (.99.1):
Código:
/ip ipsec policy
add comment="site-to-site ike2 EoiP tunnel" dst-address=192.168.99.2/32 \
    group=ike2-template-group proposal=ike2-proposal src-address=192.168.99.1/32 \
    template=yes

4-a) Por último, creamos el túnel Eoip sobre el túnel Ipsec/IkeV2 recién creado. Le he puesto un número MAC propio dentro del rango libre, para que sea único (es buena práctica. Haré lo mismo con el otro extremo Playa). Lo importante es que ambos lados tengan el mismo número de túnel: yo he puesto 16. Y se hace entre las dos direcciones de la red .99 creada ad-hoc:
Código:
/interface eoip
add allow-fast-path=no disabled=yes !keepalive local-address=192.168.99.1 \
    mac-address=00:00:5E:FF:07:36 mtu=1500 name=s2s-ike2-tunnel \
    remote-address=192.168.99.2 tunnel-id=16

4-b) Ya sólo queda añadir la nueva interfaz a nuestro IPTV-bridge:
Código:
/interface bridge port
add bridge=IPTV-Bridge interface=s2s-ike2-tunnel

Y con esto hemos terminado en el lado HQ.

Vamos al lado remoto "Playa"

# Punto previo: Si no tenéis puesto DDNS hay que ponerlo. Ya sabéis:
Código:
/ip cloud
set ddns-enabled=yes ddns-update-interval=1m

5-a) Lo primero, creamos el IPTV-bridge en este router:
Código:
/interface bridge
add igmp-snooping=yes name=IPTV-Bridge

5-b) ...y lo metemos en la lista LAN:
Código:
/interface list member
add interface=IPTV-Bridge list=LAN

6-a) Vamos a crear el túnel Ipsec/Ike2 en este lado. Lo primero, su mode-config. Como veis, es distinto del del lado HQ:
Código:
/ip ipsec mode-config
add name=s2s-ike2-config responder=no

6-b) Voy copiando casi la misma configuración de @pokoyo para el router "branch". Nuevo template group, idéntico al del router HQ
Código:
/ip ipsec policy group
add name=ike2-template-group

6-c) Perfil, idéntico al del servidor
Código:
/ip ipsec profile
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 \
    hash-algorithm=sha256 name=ike2-profile

6-d) Peer, apuntando a la dirección de nuestro dominio o IP estática del router HQ, con send-initial-contact=yes
Código:
/ip ipsec peer
add address=router.pericopalotes.com exchange-mode=ike2 name=s2s-peer \
    profile=ike2-profile send-initial-contact=yes

6-e) Proposal, idéntico al del router de HQ
Código:
/ip ipsec proposal
add auth-algorithms=sha512,sha256,sha1 enc-algorithms="aes-256-cbc,aes-256-ctr,a\
    es-256-gcm,aes-192-ctr,aes-192-gcm,aes-128-cbc,aes-128-ctr,aes-128-gcm" \
    lifetime=8h name=ike2-proposal pfs-group=none

6-f) Identity, en este caso especificando únicamente el certificado cliente:
Código:
/ip ipsec identity
add auth-method=digital-signature certificate=vpn-client-playa generate-policy=\
    port-strict mode-config=s2s-ike2-config peer=s2s-peer \
    policy-template-group=ike2-template-group

6-g) Y por fin, la política. La hacemos aquí en modo template, y también, poniendo las direcciones de los dos extremos:
Código:
/ip ipsec policy
add dst-address=192.168.99.1/32 group=ike2-template-group proposal=ike2-proposal \
    src-address=192.168.99.2/32 template=yes

7-a) Ahora toca crear en este lado el túnel EoiP por encima del recién creado. Fijaos que el MAC es distinto, pero el número de túnel el mismo que en HQ:
Código:
/interface eoip
add allow-fast-path=no !keepalive local-address=192.168.99.2 mac-address=\
    00:00:5E:FF:07:37 mtu=1500 name=s2s-ike2-Playa remote-address=\
    192.168.99.1 tunnel-id=16

7-b) ... añadimos esta nueva interfaz al puente:
Código:
/interface bridge port
add bridge=IPTV-Bridge interface=s2s-ike2-Playa

7-c) ...y le añadimos además los puertos físicos ether o wireless del router que queramos, que estarán como directamente "en el router HQ" (que antes los hemos quitado del Playa-bridge, el bridge credo con el QuickSet, si es que le hubiéramos dejado añadir todos los de la lan por defecto. El como quitarlos es fácil: vais al puerto correspondiente en /interface bridge port y lo quitáis), en este caso, el ether4 solo:
Código:
/interface bridge port
add bridge=IPTV-Bridge interface=ether4

8 ) Sólo queda levantar un cliente DHCP para que, a través de los túneles, le asigne una dirección de la subred de IPTV-bridge en HQ, en este lado al IPTV-bridge y a los clientes que se conecten a su puerto ether4 (o a las interfaces locales, como una wireless, que hayamos añadido a IPTV-bridge en este router remoto Playa"). Como veis, SI pedimos que le asigne el mismo DNS que tuviera asignado IPTV-bridge en el router HQ:
Código:
/ip dhcp-client
add add-default-route=no disabled=no interface=IPTV-Bridge use-peer-dns=yes

Con esto estaría listo el router remoto "Playa"

Reglas firewall

Por último, y muy importante: No olvides poner las reglas de firewall correspondientes, tanto en HQ como en Playa, como aconsejaba @pokoyo:

9) En el lado HQ:
Código:
/ip firewall filter
add action=accept chain=input comment="allow ipsec" dst-port=500,4500 protocol=udp
add action=accept chain=input protocol=ipsec-esp
add action=accept chain=input comment=\
    "Allow decrypted IpSec traffic from Playa to router HQ" ipsec-policy=in,ipsec

10) Y en el lado remoto "Playa":
Código:
/ip firewall filter
add action=accept chain=input comment="allow ipsec" dst-port=500,4500 protocol=udp
add action=accept chain=input protocol=ipsec-esp
add action=accept chain=input comment="allow HQ access to router" ipsec-policy=in,ipsec

Y, listo!. Ahora debería levantarse el túnel Eoip en ambos lados y también el Ipsec. Si no fuera así, comprobad que el Playa ha cogido su ip pública en /ip cloud y si no estuviera, hacéis "force update". Después, vais a ip -> ipsec -> installed SAs y hacéis un "flush". Con esto obligáis a levantar el túnel Ike2/Ipsec. Ahora, debería funcionar.

No he puesto las reglas de TCP MSS, pues el túnel EoiP tiene ya una opción por defecto, que creo que podría ser suficiente, al menos para EoiP, pero como hay dos túneles... no sé...; pero antes debo estudiarlo y calcular exactamente la dimensión del doble encapsulamiento, y probarlo en real, que no lo he hecho.

Si lo probáis, veréis que este túnel EoiP es más rápido y eficiente que el EoiP sobre Ipsec automático, tanto al levantarse el enlace, como en su funcionamiento. Además, si el extremo remoto está desconectado, no hace falta deshabilitar la interfaz Eoip ni el loopback: se quedan esperando sin dar la lata. Veréis que no hay mensajes de error si el extremo hAP (Playa) está caído o desconectado. Por supuesto que al basarse en certificados RSA en vez de en clave compartida es también más seguro.

Espero que os sea útil.
Suerte!!!
 
Última edición por un moderador:
Gracias @furny @pokoyo
Sería posible editar la guía/hilo de furny para adaptarlo al resto de manuales. Me refiero a las etiquetas de código.
Código:
Instrucciones para RouterOS
Para facilitar la lectura y su comprensión.
Si es posible y sin prisas.
Saludos.
 
Gracias @furny @pokoyo
Sería posible editar la guía/hilo de furny para adaptarlo al resto de manuales. Me refiero a las etiquetas de código.
Código:
Instrucciones para RouterOS
Para facilitar la lectura y su comprensión.
Si es posible y sin prisas.
Saludos.
Hecho, a ver si te refieres a eso.

@furny, he editado directamente tu código, espero que no te importe, para meter las instrucciones de código en bloques de tipo <code>.

No obstante, si puedes y tienes tiempo @furny, aprovecha que está editado y llévatelo a un nuevo manual, que merece la pena tenerlo a mano. Algo así como EoIP sobre IKEv2 site to site. Le ponemos una chincheta y otro para la colección, así no se pierde entre los comentarios.

Saludos!
 
Arriba