Настройка IKEv2 mikrotik

Автор George, Фев. 07, 2023, 06:06

« назад - далее »

George

Настраиваем часовой пояс, NTP-клиента.

Код: bash
/system clock set time-zone-autodetect=no time-zone-name=Europe/Moscow
/system ntp client set enabled=yes servers=0.ru.pool.ntp.org,1.ru.pool.ntp.org

Добавляем бридж и вешаем пул адресов на него же

Код: bash
/interface bridge add name=IKE2-loopback
/ip address add address=10.0.100.1/24 interface=IKE2-loopback network=10.0.100.0
/ip pool add name="IKE2" ranges=10.0.100.100-10.0.100.200

Настройку DNS вам нужно провести самостоятельно в зависимости от вашей специфики, но в итоге нам нужно, чтобы по адресу cloud-life.site пинговался IP-адрес настраиваемого VPN-сервера 66.66.66.66.

Следующий шаг - генерация сертификатов. Я разбил команды на блоки не случайно. Ошибки при генерации сертификатов нам не нужны. Выполняем по порядку, дожидаясь завершения процесса подписания, не прерывать!!!!

Генерируем корневой сертификат:

Код: bash
/certificate
Код: bash
    add name=CA.cloud-life.site country=RU state=MO \
    locality="Moscow region" organization=Cloud-life \
    common-name=CA.cloud-life.site subject-alt-name=IP:66.66.66.66 \
    key-size=2048 days-valid=3650 trusted=yes \
    key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,crl-sign
   
Код: bash
sign CA.cloud-life.site

Генерируем сертификат VPN-сервера:

Код: bash
add name=ikev2@cloud-life.site country=RU state=MO locality="Moscow region" \
organization=Cloud-life common-name=ikev2@cloud-life.site subject-alt-name=DNS:cloud-life.site \
key-size=2048 days-valid=3560 trusted=yes key-usage=tls-server
Код: bash
sign ikev2@cloud-life.site ca=CA.cloud-life.site

Создаём шаблон для дальнейшего создания сертификатов через копирование с шаблона:
Код: bash
add name=~clienttemplate@cloud-life.site country=RU state=MO    locality="Moscow region" \
organization=Cloud-life common-name=~client-template@cloud-life.site \
subject-alt-name=email:~clienttemplate@cloud-life.site key-size=2048 days-valid=3650 \
trusted=yes key-usage=tls-client

Сертификат для схемы Site 2 Site (для микротика Site-2):

Код: bash
add copy-from=~clienttemplate@cloud-life.site name=s2s@cloud-life.site \
common-name=s2s@cloud-life.site subject-alt-name=email:s2s@cloud-life.site
Код: bash
sign s2s@cloud-life.site ca=CA.cloud-life.site

Для первого клиента:

Код: bash
add copy-from=~clienttemplate@cloud-life.site name=client-1@cloud-life.site \
common-name=client-1@cloud-life.site subject-alt-name=email:client-1@cloud-life.site
Код: bash
sign client-1@cloud-life.site ca=CA.cloud-life.site

Для второго клиента, а остальные по той же схеме:

Код: bash
add copy-from=~clienttemplate@cloud-life.site name=client-2@cloud-life.site \
common-name=client-2@cloud-life.site subject-alt-name=email:client-2@cloud-life.site
Код: bash
sign client-2@cloud-life.site ca=CA.cloud-life.site

Далее экспортируем сгенерированные ключи, но обратите внимание, что сертификаты экспортируются в разных форматах (pem и pkcs12). Обязательно установите пароль при экспорте, т.к. при его отсутствии ошибок не будет, но работать VPN тоже не будет. Ни в коем случае не экспортируйте CA-сертификат с паролем, т.к. тогда экспортируется и закрытый ключ.

Код: bash
/certificate export-certificate CA.cloud-life.site type=pem
Код: bash
/certificate export-certificate ikev2@cloud-life.site type=pem  export-passphrase=passwordforexport
Код: bash
/certificate export-certificate s2s@cloud-life.site type=pem  export-passphrase=passwordforexport
Код: bash
/certificate export-certificate client-1@cloud-life.site type=pkcs12  export-passphrase=passwordforexport
Код: bash
/certificate export-certificate client-2@cloud-life.site type=pkcs12  export-passphrase=passwordforexport

Скачиваем экспортированные сертификаты и сохраняем в одну папку. Я еще и переименовал скаченные сертификаты для удобства, удалив начало cert_export_.

Чуть настроим FireWall и изменим MSS. Правила размещайте перед запрещающими!!!! Я расположу их в самом начале списка (place-before=0)

Код: bash
/ip firewall filter
Код: bash
add action=accept chain=input comment="IKE2 - Accept UDP 500,4500 IPSec" \
    dst-address=66.66.66.66 dst-port=500,4500 protocol=udp place-before=0
Код: bash
add action=accept chain=input comment="IKE2 - Accept IPSec-esp" dst-address=\
    66.66.66.66 protocol=ipsec-esp place-before=0
Код: bash
add action=accept chain=input comment="Accept - In Ipsec" ipsec-policy=\
    in,ipsec src-address=10.0.100.0/24 place-before=0
Код: bash
add action=accept chain=forward comment=\
    "Accept - All Traffic from VPN to ANY" dst-address=192.168.0.0/22 \
    ipsec-policy=in,ipsec src-address=10.0.100.0/24 place-before=0
Код: bash
add action=accept chain=forward comment=\
    "Accept - All Traffic from VPN to ANY" dst-address=0.0.0.0/0 \
    ipsec-policy=in,ipsec src-address=10.0.100.0/24 place-before=0
Код: bash
/ip firewall mangle
Код: bash
add action=change-mss chain=forward dst-address=10.0.100.0/24 ipsec-policy=\
    in,ipsec new-mss=1360 passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=\
    !0-1360  place-before=0

Добавим правила NAT и поместим их над правилом основного маскарада:

Код: bash
/ip firewall nat
Код: bash
add action=masquerade chain=srcnat comment="ike2 masq non ipsec" \
    ipsec-policy=out,none out-interface-list="WAN interfaces" place-before=0
Код: bash
add action=masquerade chain=srcnat comment="ike2 masq non ipsec" \
    ipsec-policy=out,none out-interface-list="WAN interfaces" src-address=\
    10.0.100.0/24 place-before=0
Код: bash
add action=src-nat chain=srcnat comment="ike2 masq non ipsec" ipsec-policy=\
    out,none out-interface=WAN src-address=10.0.100.0/24 to-addresses=\
    66.66.66.66 place-before=0
Настраиваем параметры IPSec. Настройка едина как для конфигурации Client 2 Site, так и для Site 2 Site:
Код: bash
/ip ipsec policy group
Код: bash
add name="clients"
add name="s2s
"
Код: bash
/ip ipsec profile
Код: bash
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 \
    hash-algorithm=sha256 name="cloud-life.site"
Код: bash
/ip ipsec peer
Код: bash
    add exchange-mode=ike2 local-address=66.66.66.66 name=\
    "peer VPN" passive=yes profile="cloud-life.site"
Код: bash
/ip ipsec proposal
Код: bash
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="cloud-life.site" pfs-group=none
Код: bash
/ip ipsec mode-config
Код: bash
add address-pool=IKE2 address-prefix-length=32 name=clients.cloud-life.site split-include=\
    0.0.0.0/0 static-dns=10.0.100.1 system-dns=no
Код: bash
add address=10.0.100.2 name=s2s.cloud-life.site split-include=10.0.100.1 static-dns=10.0.100.1 \
    system-dns=no
Код: bash
/ip ipsec identity
    add auth-method=digital-signature certificate=ikev2@cloud-life.site \
    generate-policy=port-strict match-by=certificate mode-config=clients.cloud-life.site \
    peer="peer VPN" policy-template-group="clients" \
    remote-certificate=client-1@cloud-life.site remote-id=user-fqdn:client-1@cloud-life.site
Код: bash
add auth-method=digital-signature certificate=ikev2@cloud-life.site \
    generate-policy=port-strict match-by=certificate mode-config=clients.cloud-life.site \
    peer="peer VPN" policy-template-group="clients" \
    remote-certificate=client-2@cloud-life.site remote-id=user-fqdn:client-2@cloud-life.site
Код: bash
add auth-method=digital-signature certificate=ikev2@cloud-life.site \
    generate-policy=port-strict match-by=certificate mode-config=s2s.cloud-life.site \
    peer="peer VPN" policy-template-group="s2s" \
    remote-certificate=s2s@cloud-life.site remote-id=user-fqdn:s2s@cloud-life.site
Код: bash
/ip ipsec policy
   
Код: bash
add dst-address=10.0.100.2/32 group=s2s proposal=cloud-life.site src-address=10.0.100.1/32 template=yes
    add dst-address=10.0.100.0/24 group=clients proposal=cloud-life.site src-address=0.0.0.0/0 template=yes

Сразу добавим GRE-туннель, который в дальнейшем позволит нам легко настроить маршрутизацию между офисами:

Код: bash
/interface gre add local-address=10.0.100.1 name="IKEv2-GRE-Tunnel" remote-address=10.0.100.2
Код: bash
/ip route add distance=1 dst-address=10.10.10.0/24 gateway="IKEv2-GRE-Tunnel"

На этом настройку VPN-сервера можно считать законченной и пора переходить на сторону клиента.
  •  

George

Возможные проблемы и их решения:
Если компьютер в домене, и в домене есть ЦС, т.е. на компе есть сертификат компа, то, поскольку в windows нельзя выбрать сертификат для vpn соединение не устанавливается, т.к. отсылается не верный сертификат. Решается вот такой командой в powershell
Код: bash
Set-VpnConnection -Name "My VPN Connection" -MachineCertificateIssuerFilter 'C:\mycerts\cert_export_MikrotikIKEv2-CA.crt'
Также действуем при наличии не одного IKEv2 подключения. НО!
Это не помогло в моем случае - в логах микротика все норм, подключение установлено, а вот в винде мне писало "неприемлемые учетные данные IKE"
решение - добавляем в реестр ключ:
Код: bash
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters" /v DisableIKENameEkuCheck /t REG_DWORD /d 1
  •  

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.