MANUAL: Mikrotik, IKEv2 VPN a fondo

Buenas de nuevo, al final no sé como lo he hecho pero ya tengo funcionando el tunel eoip sobre ikev2, está tarde comprobaré si da mejor rendimiento que l2tp/ipsec jeje, gracias por todo.

Un Saludo.
 
Buenas de nuevo, al final no sé como lo he hecho pero ya tengo funcionando el tunel eoip sobre ikev2, está tarde comprobaré si da mejor rendimiento que l2tp/ipsec jeje, gracias por todo.

Un Saludo.
Estupendo. Ya nos dirás que tal va. Yo lo estuve probando estos días atrás y no me salió. Conectaba los dos routers mediante Ikev2 pero luego el tunel EoIP no tuve manera de hacerlo funcionar para conectar un deco en el otro extremo. En cambio un simple tunel EoIP sí que me funciona.
Saludos.
 
Estupendo. Ya nos dirás que tal va. Yo lo estuve probando estos días atrás y no me salió. Conectaba los dos routers mediante Ikev2 pero luego el tunel EoIP no tuve manera de hacerlo funcionar para conectar un deco en el otro extremo. En cambio un simple tunel EoIP sí que me funciona.
Saludos.

Pues raro, si hacen ping los dos routers poniendo la ip de los mismo en el tunel debería funcionarte, eso si, yo no tengo nada configurado en el firewall, no los tengo de router principal en la casa, como he dicho lo tengo detrás de los routers de las compañias.

Un Saludo.
 
En principio he seguido todos los pasos y no consigo conectar, me da el siguiente error el windows
 

Adjuntos

  • 2021-10-21 00_13_35-Configuración.png
    2021-10-21 00_13_35-Configuración.png
    13.8 KB · Visitas: 30
En principio he seguido todos los pasos y no consigo conectar, me da el siguiente error el windows
Pasa un export de la configuración. Si el mikrotik está detrás de un router de operadora, asegúrate de abrirle los puertos 4500 y 500 y mandárselos al mikrotik, quien tendrá que aceptarlos en el chain de input.

Saludos!
 
Pasa un export de la configuración. Si el mikrotik está detrás de un router de operadora, asegúrate de abrirle los puertos 4500 y 500 y mandárselos al mikrotik, quien tendrá que aceptarlos en el chain de input.

Saludos!
Tengo ONT de vodafone y directamente luego el Mikrotik. Config:
Bash:
# oct/21/2021 23:12:15 by RouterOS 6.49
# software id = 5AAQ-09TH
#
# model = RBD53iG-5HacD2HnD
/caps-man channel
add band=2ghz-g/n control-channel-width=20mhz extension-channel=disabled \
    frequency=2412,2437,2462 name=2ghz-auto-20 tx-power=17
add band=5ghz-n/ac control-channel-width=20mhz extension-channel=XXXX name=\
    5ghz-auto-80
/interface bridge
add name=bridge-guests
add admin-mac=2C:C8:1B:C7:A3:F3 auto-mac=no comment=defconf name=bridge-lan
/interface wireless
# managed by CAPsMAN
# channel: 2437/20/gn(14dBm), SSID: HARITZ, CAPsMAN forwarding
set [ find default-name=wlan1 ] band=2ghz-b/g/n channel-width=20/40mhz-XX \
    distance=indoors frequency=auto installation=indoor mode=ap-bridge ssid=\
    MikroTik-C7A3F7 wireless-protocol=802.11
# managed by CAPsMAN
# channel: 5640/20-eeeC/ac/DP(21dBm), SSID: HARITZ, CAPsMAN forwarding
set [ find default-name=wlan2 ] band=5ghz-a/n/ac channel-width=\
    20/40/80mhz-XXXX distance=indoors frequency=auto installation=indoor \
    mode=ap-bridge ssid=MikroTik-C7A3F8 wireless-protocol=802.11
/interface ethernet
set [ find default-name=ether1 ] comment=WAN
/interface vlan
add interface=ether1 name=vlan24 vlan-id=24
/caps-man datapath
add bridge=bridge-guests client-to-client-forwarding=no local-forwarding=no \
    name=datapath-guests
add bridge=bridge-lan client-to-client-forwarding=yes local-forwarding=no \
    name=datapath-lan
/interface pppoe-client
add add-default-route=yes comment="PPPoE Vodafone" disabled=no interface=\
    vlan24 max-mru=1492 max-mtu=1492 name=pppoe-out1 use-peer-dns=yes user=\
    VFAF0000001415948@vodafone
/caps-man security
add authentication-types=wpa2-psk encryption=aes-ccm group-encryption=aes-ccm \
    name=security-profile-guests
add authentication-types=wpa2-psk encryption=aes-ccm group-encryption=aes-ccm \
    name=security-profile-lan
/caps-man configuration
add channel=2ghz-auto-20 country=spain datapath=datapath-lan mode=ap name=\
    2ghz-wifi-lan security=security-profile-lan ssid=HARITZ
add channel=5ghz-auto-80 country=spain datapath=datapath-lan mode=ap name=\
    5ghz-wifi-lan security=security-profile-lan ssid=HARITZ
add channel=2ghz-auto-20 country=spain datapath=datapath-guests mode=ap name=\
    2ghz-wifi-guests security=security-profile-guests ssid=GONBIDATUAK
add channel=5ghz-auto-80 country=spain datapath=datapath-guests mode=ap name=\
    5ghz-wifi-guests security=security-profile-guests ssid=GONBIDATUAK
/interface list
add comment=defconf name=WAN
add comment=defconf name=LAN
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
/ip ipsec mode-config
add address=192.168.98.2 address-prefix-length=32 name=ike2-conf-branch \
    system-dns=no
/ip ipsec policy group
add name=ike2-template-group
/ip ipsec profile
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 \
    hash-algorithm=sha256 name=ike2-profile
/ip ipsec peer
add exchange-mode=ike2 name=ike2-peer passive=yes profile=ike2-profile
/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
/ip pool
add name=pool-lan ranges=172.21.200.0/24
add name=pool-guests ranges=192.168.99.2-192.168.99.254
add name=pool-vpn ranges=192.168.98.10-192.168.98.254
/ip dhcp-server
add address-pool=pool-lan disabled=no interface=bridge-lan lease-script="/ip d\
    hcp-server lease\r\
    \n:if (\$leaseBound = 1 && [ get [ find where mac-address=\$leaseActMAC ] \
    dynamic ] = true) do={\r\
    \n    :do {\r\
    \n        # Variables\r\
    \n        :local Comment [/ip dhcp-server lease get value-name=comment num\
    ber=[/ip dhcp-server lease find address=\$leaseActIP]]\r\
    \n        :local DeviceName [/system identity get name];\r\
    \n        # START Send Telegram Module\r\
    \n        :local MessageText \"\\E2\\84\\B9 <b>\$DeviceName: Info DHCP</b>\
    \_%0D%0A Nombre: \$\"lease-hostname\" %0D%0A IP: \$leaseActIP %0D%0A MAC: \
    \$leaseActMAC %0D%0A Comentario: \$Comment\";\r\
    \n        :local SendTelegramMessage [:parse [/system script  get MyTGBotS\
    endMessage source]];\r\
    \n        \$SendTelegramMessage MessageText=\$MessageText;\r\
    \n        #END Send Telegram Module\r\
    \n        :log info \"Alerta DHCP: \$\"lease-hostname\" \$leaseActMAC se h\
    a conectado\"\r\
    \n    } on-error={:log error \"Alerta DHCP: Fallo de notificaci\F3n a Tele\
    gram\"}\r\
    \n}" name=dhcp-lan
add address-pool=pool-guests disabled=no interface=bridge-guests \
    lease-script="/ip dhcp-server lease\r\
    \n:if (\$leaseBound = 1 && [ get [ find where mac-address=\$leaseActMAC ] \
    dynamic ] = true) do={\r\
    \n    :do {\r\
    \n        # Variables\r\
    \n        :local Comment [/ip dhcp-server lease get value-name=comment num\
    ber=[/ip dhcp-server lease find address=\$leaseActIP]]\r\
    \n        :local DeviceName [/system identity get name];\r\
    \n        # START Send Telegram Module\r\
    \n        :local MessageText \"\\E2\\84\\B9 <b>\$DeviceName: Info DHCP</b>\
    \_%0D%0A Nombre: \$\"lease-hostname\" %0D%0A IP: \$leaseActIP %0D%0A MAC: \
    \$leaseActMAC %0D%0A Comentario: \$Comment\";\r\
    \n        :local SendTelegramMessage [:parse [/system script  get MyTGBotS\
    endMessage source]];\r\
    \n        \$SendTelegramMessage MessageText=\$MessageText;\r\
    \n        #END Send Telegram Module\r\
    \n        :log info \"Alerta DHCP: \$\"lease-hostname\" \$leaseActMAC se h\
    a conectado\"\r\
    \n    } on-error={:log error \"Alerta DHCP: Fallo de notificaci\F3n a Tele\
    gram\"}\r\
    \n}" name=dhcp-guests
/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
/caps-man manager
set ca-certificate=auto certificate=auto enabled=yes \
    require-peer-certificate=yes
/caps-man manager interface
set [ find default=yes ] forbid=yes
add disabled=no interface=bridge-lan
/caps-man provisioning
add action=create-dynamic-enabled comment=2ghz-auto-provisioning \
    hw-supported-modes=gn master-configuration=2ghz-wifi-lan name-format=\
    prefix-identity name-prefix=2ghz-auto slave-configurations=\
    2ghz-wifi-guests
add action=create-dynamic-enabled comment=5ghz-auto-provisioning \
    hw-supported-modes=ac master-configuration=5ghz-wifi-lan name-format=\
    prefix-identity name-prefix=5ghz-auto slave-configurations=\
    5ghz-wifi-guests
/interface bridge port
add bridge=bridge-lan comment=defconf interface=ether2
add bridge=bridge-lan comment=defconf interface=ether3
add bridge=bridge-lan comment=defconf interface=ether4
add bridge=bridge-lan comment=defconf interface=ether5
add bridge=bridge-lan comment=defconf interface=wlan1
add bridge=bridge-lan comment=defconf interface=wlan2
/ip neighbor discovery-settings
set discover-interface-list=LAN
/interface list member
add comment=defconf interface=bridge-lan list=LAN
add comment=defconf interface=ether1 list=WAN
add interface=pppoe-out1 list=WAN
/interface wireless cap
#
set bridge=bridge-lan caps-man-addresses=127.0.0.1 certificate=\
    CAP-2CC81BC7A3F2 enabled=yes interfaces=wlan1,wlan2 lock-to-caps-man=yes
/ip address
add address=172.21.0.1/16 comment=defconf interface=bridge-lan network=\
    172.21.0.0
add address=192.168.99.1/24 interface=bridge-guests network=192.168.99.0
/ip dhcp-client
add comment=defconf disabled=no interface=ether1
/ip dhcp-server lease
add address=172.21.201.3 client-id=1:66:72:11:24:c5:dd mac-address=\
    66:72:11:24:C5:DD server=dhcp-lan
add address=172.21.201.2 client-id=1:ea:de:6a:88:99:14 mac-address=\
    EA:DE:6A:88:99:14 server=dhcp-lan
add address=172.21.201.4 client-id=1:82:1a:e8:e7:c1:74 mac-address=\
    82:1A:E8:E7:C1:74 server=dhcp-lan
add address=172.21.201.1 client-id=1:b8:8:cf:8c:6c:4d mac-address=\
    B8:08:CF:8C:6C:4D server=dhcp-lan
add address=172.21.201.5 client-id=1:fc:2d:5e:ce:2c:43 mac-address=\
    FC:2D:5E:CE:2C:43 server=dhcp-lan
add address=172.21.200.252 block-access=yes client-id=1:64:90:c1:14:84:ff \
    mac-address=64:90:C1:14:84:FF server=dhcp-lan
add address=172.21.201.6 client-id=1:2c:71:ff:9:a:ec mac-address=\
    2C:71:FF:09:0A:EC server=dhcp-lan
add address=172.21.201.7 client-id=1:1a:39:3e:20:8:2f mac-address=\
    1A:39:3E:20:08:2F server=dhcp-lan
add address=172.21.201.8 client-id=1:c4:d9:87:56:e8:d4 mac-address=\
    C4:D9:87:56:E8:D4 server=dhcp-lan
add address=172.21.201.9 mac-address=44:3E:07:10:B4:7F server=dhcp-lan
/ip dhcp-server network
add address=172.21.0.0/16 comment=defconf dns-server=172.21.0.1 gateway=\
    172.21.0.1 netmask=16
add address=192.168.99.0/24 gateway=192.168.99.1
/ip dns
set allow-remote-requests=yes servers=8.8.8.8,8.8.4.4
/ip dns static
add address=172.21.0.1 comment=defconf name=router.lan
/ip firewall filter
add action=accept chain=input comment=\
    "defconf: accept established,related,untracked" connection-state=\
    established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=\
    invalid
add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp
add action=accept chain=input comment=\
    "defconf: accept to local loopback (for CAPsMAN)" dst-address=127.0.0.1
add action=drop chain=input comment="defconf: drop all not coming from LAN" \
    in-interface-list=!LAN
add action=accept chain=forward comment="defconf: accept in ipsec policy" \
    ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" \
    ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \
    connection-state=established,related
add action=accept chain=forward comment=\
    "defconf: accept established,related, untracked" connection-state=\
    established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" \
    connection-state=invalid
add action=drop chain=forward comment=\
    "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \
    connection-state=new in-interface-list=WAN
add action=drop chain=forward comment="block guests accesing LAN" \
    dst-address=172.21.0.0/16 src-address=192.168.99.0/24
add action=drop chain=forward comment="block LAN accesing guests" \
    dst-address=192.168.99.0/24 src-address=172.21.0.0/16
add action=accept chain=input comment="allow ipsec" dst-port=500,4500 \
    protocol=udp
add action=accept chain=input protocol=ipsec-esp
/ip firewall nat
add action=masquerade chain=srcnat comment="defconf: masquerade" \
    ipsec-policy=out,none out-interface-list=WAN
add action=dst-nat chain=dstnat dst-port=8081 in-interface=pppoe-out1 \
    protocol=tcp to-addresses=172.21.0.200 to-ports=8081
add action=dst-nat chain=dstnat dst-port=16001 in-interface=pppoe-out1 \
    protocol=tcp to-addresses=172.21.0.200 to-ports=16001
add action=dst-nat chain=dstnat dst-port=8001 in-interface=pppoe-out1 \
    protocol=tcp to-addresses=172.21.0.200 to-ports=8001
add action=dst-nat chain=dstnat dst-port=8002 in-interface=pppoe-out1 \
    protocol=tcp to-addresses=172.21.0.200 to-ports=8002
add action=dst-nat chain=dstnat dst-port=21 in-interface=pppoe-out1 protocol=\
    tcp to-addresses=172.21.0.200 to-ports=21
/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
/ip ipsec policy
add comment=road-warrior dst-address=192.168.98.0/24 group=\
    ike2-template-group proposal=ike2-proposal src-address=0.0.0.0/0 \
    template=yes
/system clock
set time-zone-name=Europe/Madrid
/system identity
set name=Router
/system script
add dont-require-permissions=no name=MyTGBotSendMessage owner=admin policy=\
    ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":\
    local BotToken \"XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\";\r\
    \n:local ChatID \"XXXXXXXXXX\";\r\
    \n:local parseMode \"HTML\";\r\
    \n:local SendText \$MessageText;\r\
    \n\r\
    \n/tool fetch url=\"https://api.telegram.org/bot\$BotToken/sendMessage\\\?\
    chat_id=\$ChatID&parse_mode=\$parseMode&text=\$SendText\" keep-result=no;\
    \r\
    \n\r\
    \n:log info \"Enviado Mensaje Telegram\";"
/tool mac-server
set allowed-interface-list=LAN
/tool mac-server mac-winbox
set allowed-interface-list=LAN
 
La posición de las reglas en el firewall es importante. Es como una especie de escalera que vas bajando, dividida en dos "chains" o cadenas (las reglas de input por un lado, las de forward por otro) Una vez que entras por un escalón superior, el tráfico no sigue avanzando. Trata de poner siempre las reglas de input juntas, y las de forward juntas, puesto que entre cadenas no hay orden (es decir, se van a ejecutar las de input por un lado, en el orden en el que estén, y las de forward por otro, también en su orden).

Ahora mismo, tu última regla de input (sin contar las dos que has metido) dice textualmente: todo lo que no venga de la lista LAN, lo tiras a la basura. Obviamente, cualquier regla que metas detrás, o cumple con esa regla primero, o no va a recibir tráfico.

Para corregir tu problema, mueve estas dos reglas:
Código:
add action=accept chain=input comment="allow ipsec" dst-port=500,4500 \
    protocol=udp
add action=accept chain=input protocol=ipsec-esp
Delante de esta otra:
Código:
add action=drop chain=input comment="defconf: drop all not coming from LAN" \
    in-interface-list=!LAN

La segunda regla que has metido, la que acepta el tráfico "ipsec-esp" no es estrictamente necesaria. Está pensada para cuando no tienes el firewall por defecto. Sin embargo, si vas a querer acceder al propio router desde la red de la VPN, necesitas una regla adicional (no sé si es tu caso o no). Te dejo debajo cómo debería quedar tu firewall con esta última regla que te digo (a tu elección meterla o borrarla)
Código:
/ip firewall filter
add action=accept chain=input comment=\
    "defconf: accept established,related,untracked" connection-state=\
    established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=\
    invalid
add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp
add action=accept chain=input comment=\
    "defconf: accept to local loopback (for CAPsMAN)" dst-address=127.0.0.1
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="vpn: allow ipsec road warriors" \
    ipsec-policy=in,ipsec src-address=192.168.98.0/24
add action=drop chain=input comment="defconf: drop all not coming from LAN" \
    in-interface-list=!LAN
add action=accept chain=forward comment="defconf: accept in ipsec policy" \
    ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" \
    ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \
    connection-state=established,related
add action=accept chain=forward comment=\
    "defconf: accept established,related, untracked" connection-state=\
    established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" \
    connection-state=invalid
add action=drop chain=forward comment=\
    "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \
    connection-state=new in-interface-list=WAN
add action=drop chain=forward comment="block guests accesing LAN" \
    dst-address=172.21.0.0/16 src-address=192.168.99.0/24
add action=drop chain=forward comment="block LAN accesing guests" \
    dst-address=192.168.99.0/24 src-address=172.21.0.0/16

También hecho de menos el cambiar el tamaño del paquete en el mangle. Esto es debido a que IKEv2 no detecta automáticamente el tamaño máximo de MTU como lo pueden hacer otros protocolos VPN, al enrutar vía políticas. Si quieres hacerlo fino, fino, añade estas dos (te va a funcionar igual como lo tienes, solo que perderás algo de rendimiento en la conexión VPN)
Código:
/ip firewall mangle
add action=change-mss chain=forward comment="ike2-rw clamp tcp mss" \
    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
add action=change-mss chain=forward dst-address=192.168.98.0/24 ipsec-policy=\
    out,ipsec new-mss=1360 passthrough=yes protocol=tcp tcp-flags=syn \
    tcp-mss=!0-1360

Saludos!
 
La posición de las reglas en el firewall es importante. Es como una especie de escalera que vas bajando, dividida en dos "chains" o cadenas (las reglas de input por un lado, las de forward por otro) Una vez que entras por un escalón superior, el tráfico no sigue avanzando. Trata de poner siempre las reglas de input juntas, y las de forward juntas, puesto que entre cadenas no hay orden (es decir, se van a ejecutar las de input por un lado, en el orden en el que estén, y las de forward por otro, también en su orden).

Ahora mismo, tu última regla de input (sin contar las dos que has metido) dice textualmente: todo lo que no venga de la lista LAN, lo tiras a la basura. Obviamente, cualquier regla que metas detrás, o cumple con esa regla primero, o no va a recibir tráfico.

Para corregir tu problema, mueve estas dos reglas:
Código:
add action=accept chain=input comment="allow ipsec" dst-port=500,4500 \
    protocol=udp
add action=accept chain=input protocol=ipsec-esp
Delante de esta otra:
Código:
add action=drop chain=input comment="defconf: drop all not coming from LAN" \
    in-interface-list=!LAN

La segunda regla que has metido, la que acepta el tráfico "ipsec-esp" no es estrictamente necesaria. Está pensada para cuando no tienes el firewall por defecto. Sin embargo, si vas a querer acceder al propio router desde la red de la VPN, necesitas una regla adicional (no sé si es tu caso o no). Te dejo debajo cómo debería quedar tu firewall con esta última regla que te digo (a tu elección meterla o borrarla)
Código:
/ip firewall filter
add action=accept chain=input comment=\
    "defconf: accept established,related,untracked" connection-state=\
    established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=\
    invalid
add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp
add action=accept chain=input comment=\
    "defconf: accept to local loopback (for CAPsMAN)" dst-address=127.0.0.1
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="vpn: allow ipsec road warriors" \
    ipsec-policy=in,ipsec src-address=192.168.98.0/24
add action=drop chain=input comment="defconf: drop all not coming from LAN" \
    in-interface-list=!LAN
add action=accept chain=forward comment="defconf: accept in ipsec policy" \
    ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" \
    ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \
    connection-state=established,related
add action=accept chain=forward comment=\
    "defconf: accept established,related, untracked" connection-state=\
    established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" \
    connection-state=invalid
add action=drop chain=forward comment=\
    "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \
    connection-state=new in-interface-list=WAN
add action=drop chain=forward comment="block guests accesing LAN" \
    dst-address=172.21.0.0/16 src-address=192.168.99.0/24
add action=drop chain=forward comment="block LAN accesing guests" \
    dst-address=192.168.99.0/24 src-address=172.21.0.0/16

También hecho de menos el cambiar el tamaño del paquete en el mangle. Esto es debido a que IKEv2 no detecta automáticamente el tamaño máximo de MTU como lo pueden hacer otros protocolos VPN, al enrutar vía políticas. Si quieres hacerlo fino, fino, añade estas dos (te va a funcionar igual como lo tienes, solo que perderás algo de rendimiento en la conexión VPN)
Código:
/ip firewall mangle
add action=change-mss chain=forward comment="ike2-rw clamp tcp mss" \
    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
add action=change-mss chain=forward dst-address=192.168.98.0/24 ipsec-policy=\
    out,ipsec new-mss=1360 passthrough=yes protocol=tcp tcp-flags=syn \
    tcp-mss=!0-1360

Saludos!
Muchas gracias @pokoyo He cambiado la regla de posicion y ahora he conseguido conectar con Android mediante StrongSwan.

Seria posible añadir algo más de seguridad con un usuario y contraseña? Actualmente cualquiera que tenga el certificado puede conectarse, es por darle algo más de seguridad. En caso de ser posible asignar usuarios, se podrían crear reglas de firewall por usuario para permitir acceso únicamente a unos servicios específicos?
 
Muchas gracias @pokoyo He cambiado la regla de posicion y ahora he conseguido conectar con Android mediante StrongSwan.

Seria posible añadir algo más de seguridad con un usuario y contraseña? Actualmente cualquiera que tenga el certificado puede conectarse, es por darle algo más de seguridad. En caso de ser posible asignar usuarios, se podrían crear reglas de firewall por usuario para permitir acceso únicamente a unos servicios específicos?
No, para nada. Los certificados son autoafirmaros, igual que los generas tú, los revocas tú y andando. Y, para conectar no necesitas un certificado, sino dos, la CA autoafirmara y el de cliente. Créeme que es bastante más seguro que ningún usuario/contraseña.

Saludos!
 
No, para nada. Los certificados son autoafirmaros, igual que los generas tú, los revocas tú y andando. Y, para conectar no necesitas un certificado, sino dos, la CA autoafirmara y el de cliente. Créeme que es bastante más seguro que ningún usuario/contraseña.

Saludos!

Buenas @pokoyo. Esta claro que es mucho mas seguro que un usuario y contraseña. Lo que mas bien estaba comentando era si existe la posibilidad de añadir una capa mas de seguridad, mediante usuario y contraseña aparte del tema de certificados.

Hay alguna forma de crear reglas de firewall para las conexiones de VPN? Si por ejemplo a un usuario unicamente le quiero dar acceso a un equipo en concreto pero no al resto, como podria hacerlo?

Y por ultimo, para tener claro para lo que es cada certificado y entender mejor como funciona el IKEv2:

Este entiendo que es el principal
Bash:
# 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

Para la parte del servidor, en este caso el Mikrotik
Bash:
# 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

El template para generar los certificados por usuario que se vaya a conectar
Bash:
# 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

Los certificados que vamos a ir generando para cada usuario
Bash:
#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

Tenemos que generar un certificado por cada usuario o es suficiente tener uno de tipo mobile para todos y despues un branch por cada sede por ejemplo?

El certificado a instalar el los clientes de tipo mobile es este ultimo que generamos desde la plantilla? o hace falta tambien el CA?

EDITO: Hasta ahora he conseguido conectarme desde Android sin problemas, y lo sigo haciendo, pero si hago desde Windows me dice lo siguiente: Las credenciales de autentcación IKE son inaceptables

Gracias
 
Última edición:
Buenas @pokoyo. Esta claro que es mucho mas seguro que un usuario y contraseña. Lo que mas bien estaba comentando era si existe la posibilidad de añadir una capa mas de seguridad, mediante usuario y contraseña aparte del tema de certificados.
Sí, existe esa posibilidad, pero ya te metes con autenticación tipo servidor Radius, que es quien debería tener ese usuario y contraseña registrado, vinculado al certificado.

Hay alguna forma de crear reglas de firewall para las conexiones de VPN? Si por ejemplo a un usuario unicamente le quiero dar acceso a un equipo en concreto pero no al resto, como podria hacerlo?
Sí, claro. Asignas una IP concreta siempre a ese usuario en el mode-config (en lugar de tirar de un pool) y para esa IP en el firewall aceptas o rechazas lo que te interese en el chain de forward.

Tenemos que generar un certificado por cada usuario o es suficiente tener uno de tipo mobile para todos y despues un branch por cada sede por ejemplo?
Cada usuario con su certificado. Sino, tendrías que combinar común de cliente con un segundo factor de autenticación como podría ser lo que decías antes, de un usuario y contraseña. En mi opinión, si pones a cada usuario un certificado lo identificas perfectamente con él, y no andas manejando contraseñas. Si tienes el certificado conectas, sino no. Y, si sospecho que los certificados puedan estar comprometidos, borro la CA y empiezo de nuevo.

El certificado a instalar el los clientes de tipo mobile es este ultimo que generamos desde la plantilla? o hace falta tambien el CA?
CA + certificado cliente. Sin la CA, el certificado cliente no será confiable, puesto que la CA es autofirmada. Es decir, como hemos hecho el "Juan Palomo, yo me lo guiso, yo me lo como", pues tienes que marcar como confiable la CA puesto que es un certificado que tú mismo has creado. Si el certificado cliente lo hubiera firmado una CA pública, este paso no haría falta, e irías únicamente con un único certificado cliente, firmado por una entidad certificadora pública tal que tu ordenador pueda validar.

EDITO: Hasta ahora he conseguido conectarme desde Android sin problemas, y lo sigo haciendo, pero si hago desde Windows me dice lo siguiente: Las credenciales de autentcación IKE son inaceptables
Pelearos vosotros con Windows, que a mi no me queda paciencia con ello. En el primer manual que hice hablando de IKE y OpenVPN hay alguna recomendación de cómo hacer la importación en windows y asegurarnos que solo tenemos un único certificado cliente. Mira a ver si es por eso.

Saludos!
 
Pelearos vosotros con Windows, que a mi no me queda paciencia con ello. En el primer manual que hice hablando de IKE y OpenVPN hay alguna recomendación de cómo hacer la importación en windows y asegurarnos que solo tenemos un único certificado cliente. Mira a ver si es por eso.

Saludos!
Creo que he conseguido la conexion con Windows, por lo menos a mi me a funcionado:

Instalar el certificado
Bash:
CERTUTIL -f -p PasswordCertificado -importpfx "rutacertificado.p12"

Crear VPN y configurar
Bash:
Add-VpnConnection -Name "Nombre_VPN" -ServerAddress "URL_VPN" -TunnelType "ikev2" -AuthenticationMethod "MachineCertificate" -EncryptionLevel "Maximum"
Set-VpnConnection -Name "Nombre_VPN" -RememberCredential $True -SplitTunneling $False
Set-VpnConnectionIPsecConfiguration -ConnectionName "Nombre_VPN" -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup None -DHGroup Group14 -PassThru -Force
 
Hola, te hago una consulta, veo que en los algoritmos de encriptación pones varios tipos (sha512, sha256 etc) si solo seleccionas uno, por ejemplo sha512 influye en algo?
 
Hola @pokoyo, llevo tiempo usando la VPN y fetén. Sin embargo, quisiera crear y firmar dos certificados mas (para dar a cada usuario un certificado diferente). Basta con hacer una còpia de la template y firmarlos con la CA?

Gracias de nuevo,
 
Hola @pokoyo, llevo tiempo usando la VPN y fetén. Sin embargo, quisiera crear y firmar dos certificados mas (para dar a cada usuario un certificado diferente). Basta con hacer una còpia de la template y firmarlos con la CA?

Gracias de nuevo,
Correcto. La template de cliente está justo para eso, para crear tantos certificados de cliente como sean necesarios. Asegúrate de no recusar certificados entre clientes, al no haber autenticación por usuario y contraseña, lo único que identifica a un cliente es el peer y su certificado asociado. Necesitarás añadir un nuevo peer para ese nuevo cliente, con su certificado asociado.

Saludos!
 
Correcto. La template de cliente está justo para eso, para crear tantos certificados de cliente como sean necesarios. Asegúrate de no recusar certificados entre clientes, al no haber autenticación por usuario y contraseña, lo único que identifica a un cliente es el peer y su certificado asociado. Necesitarás añadir un nuevo peer para ese nuevo cliente, con su certificado asociado.

Saludos!
Hola @pokoyo, gracias.
Qué es un peer? No recuerdo leer esto en tus manuales.

Saludos,
 
Hola @pokoyo, gracias.
Qué es un peer? No recuerdo leer esto en tus manuales.

Saludos,
Perdón, un peer no, un “identity”, que es donde juntas todo: peer, proposal, profile y mode-config; junto con los certificados asociados a servidor y cliente. Es básicamente cómo identificas a un cliente de tu vpn.

Saludos!
 
Perdón, un peer no, un “identity”, que es donde juntas todo: peer, proposal, profile y mode-config; junto con los certificados asociados a servidor y cliente. Es básicamente cómo identificas a un cliente de tu vpn.

Saludos!

Pues he creado otro certificado cliente a partir de la template, firmado, y ni Windows ni strong swan lo acepta.
En la captura de abajo, es el segundo (la linea seleccionada).

Y firmado tal que así:

/certificate
sign vpn-client-F*** ca=vpn-ca

Ves algo sospechoso?

Untitled.png


De hecho, es el tercero ya que creo. Hay uno que tuve que revocar porque estaba todo mal. No sabía que Mikrotik no te deja eliminar los certificados, a no ser que elimines el CA.

Puede ser que me falte esto?

/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-F***

Saludos,
 
Pues he creado otro certificado cliente a partir de la template, firmado, y ni Windows ni strong swan lo acepta.
En la captura de abajo, es el segundo (la linea seleccionada).

Y firmado tal que así:

/certificate
sign vpn-client-F*** ca=vpn-ca

Ves algo sospechoso?

Ver el adjunto 87993

De hecho, es el tercero ya que creo. Hay uno que tuve que revocar porque estaba todo mal. No sabía que Mikrotik no te deja eliminar los certificados, a no ser que elimines el CA.

Puede ser que me falte esto?

/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-F***

Saludos,
Correcto, te falta el identity. El certificado por sí solo no hace nada. Es cuando das de alta el identity cuando estás juntando todo y creando el nuevo acceso de usuario a la vpn.

Saludos!
 
Arriba