Настройка VPN-сервера IKEv2 на MikroTik


Доброго времени суток, коллеги. Сегодня пишу заметку по настройке VPN-сервер IKEv2 на MikroTik. По окончании настройки к нему смогут подключиться клиенты с Windows, Android, Apple а также получим рабочий туннель для объединения 2-х офисов по схеме Site 2 Site в ситуации, когда белый IP-адрес лишь у одного микрота (сервера) либо когда он пингуется по DNS-имени. Авторизовываться будем по сертификатам, которые сгенерируем на Site-1.

Я ни в коем случае не претендую на звание ГУРУ. То, что я здесь излагаю является не более, чем записной книжкой и пособием по настройке оборудования. Если это послужит кому-нибудь подспорьем, то добро пожаловать

Итак, начинаем

В создании данной статьи я руководствовался официальной документацией и презентацией Никиты Тарикина, за которую огромное ему СПАСИБО!

После написания 3-х предыдущих заметок вся настройка будет происходит в терминале с минимумом комментариев и картинок.

Настраивал схему подключения на версии RouterOS 6.45.1. Имеем удалённый микрот (далее Site-1), который пингуется по DNS-имени vpn.dnsname.ru с белым IP-адресом 66.66.66.66
Локальная сеть за Site-1 - 192.168.0.0/22
Второй микрот (далее Site-2) с серым адресом на WAN-интерфейсе.
Локальная сеть за Site-2 - 10.10.10.0/24
Адресация для IKEv2 туннеля будет 10.0.100.0/24

Перед тем, как вставить скопированную команду в терминал убедитесь, что IP-адрес 66.66.66.66 изменен на ВАШ, и домен vpn.dnsname.ru на нужный. Ну и конечно же не забудьте сменить IP-адреса внутренних сетей (10.10.10.0/24 и 192.168.0.0/22) на ваши.

1. Настройка VPN-сервера (Site-1)

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

/system clock set time-zone-autodetect=no time-zone-name=Europe/Astrakhan
/system ntp client set enabled=yes server-dns-names=1.ru.pool.ntp.org,2.ru.pool.ntp.org,3.ru.pool.ntp.org

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

/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 вам нужно провести самостоятельно в зависимости от вашей специфики, но в итоге нам нужно, чтобы по адресу vpn.dnsname.ru пинговался IP-адрес настраиваемого VPN-сервера 66.66.66.66.

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

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

/certificate
	add name=CA.vpn.dnsname.ru country=MY state=RU \
	locality="Astrakhan region" organization=Astrakhan \
	common-name=CA.vpn.dnsname.ru 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
	sign CA.vpn.dnsname.ru

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

add name=vpn@vpn.dnsname.ru country=MY state=RU locality="Astrakhan region" \
organization=Astrakhan common-name=vpn@vpn.dnsname.ru subject-alt-name=DNS:vpn.dnsname.ru \
key-size=2048 days-valid=3560 trusted=yes key-usage=tls-server
sign vpn@vpn.dnsname.ru ca=CA.vpn.dnsname.ru

Создаём шаблон для дальнейшего создания сертификатов через копирование с шаблона:

add name=~clienttemplate@vpn.dnsname.ru country=MY state=RU	locality="Astrakhan region" \
organization=Astrakhan common-name=~client-template@vpn.dnsname.ru \
subject-alt-name=email:~clienttemplate@vpn.dnsname.ru key-size=2048 days-valid=3650 \
trusted=yes key-usage=tls-client

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

add copy-from=~clienttemplate@vpn.dnsname.ru name=s2s@vpn.dnsname.ru \
common-name=s2s@vpn.dnsname.ru subject-alt-name=email:s2s@vpn.dnsname.ru
sign s2s@vpn.dnsname.ru ca=CA.vpn.dnsname.ru

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

add copy-from=~clienttemplate@vpn.dnsname.ru name=client-1@vpn.dnsname.ru \
common-name=client-1@vpn.dnsname.ru subject-alt-name=email:client-1@vpn.dnsname.ru
sign client-1@vpn.dnsname.ru ca=CA.vpn.dnsname.ru

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

add copy-from=~clienttemplate@vpn.dnsname.ru name=client-2@vpn.dnsname.ru \
common-name=client-2@vpn.dnsname.ru subject-alt-name=email:client-2@vpn.dnsname.ru
sign client-2@vpn.dnsname.ru ca=CA.vpn.dnsname.ru

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

/certificate export-certificate CA.vpn.dnsname.ru type=pem export-passphrase=passwordforexport
/certificate export-certificate vpn@vpn.dnsname.ru type=pem  export-passphrase=passwordforexport
/certificate export-certificate s2s@vpn.dnsname.ru type=pem  export-passphrase=passwordforexport
/certificate export-certificate client-1@vpn.dnsname.ru type=pkcs12  export-passphrase=passwordforexport
/certificate export-certificate client-2@vpn.dnsname.ru type=pkcs12  export-passphrase=passwordforexport

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

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

/ip firewall filter
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
add action=accept chain=input comment="IKE2 - Accept IPSec-esp" dst-address=\
    66.66.66.66 protocol=ipsec-esp place-before=0
add action=accept chain=input comment="Accept - In Ipsec" ipsec-policy=\
    in,ipsec src-address=10.0.100.0/24 place-before=0
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
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
/ip firewall mangle
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 и поместим их над правилом основного маскарада:

/ip firewall nat
add action=masquerade chain=srcnat comment="ike2 masq non ipsec" \
    ipsec-policy=out,none out-interface-list="WAN interfaces" place-before=0
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
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:

/ip ipsec policy group
add name="clients"
add name="s2s"
/ip ipsec profile
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 \
    hash-algorithm=sha256 name="vpn.dnsname.ru"
/ip ipsec peer
	add exchange-mode=ike2 local-address=66.66.66.66 name=\
    "peer VPN" passive=yes profile="vpn.dnsname.ru"
/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="vpn.dnsname.ru" pfs-group=none
/ip ipsec mode-config
add address-pool=IKE2 address-prefix-length=32 name=clients.vpn.dnsname.ru split-include=\
    0.0.0.0/0 static-dns=10.0.100.1 system-dns=no
add address=10.0.100.2 name=s2s.vpn.dnsname.ru split-include=10.0.100.1 static-dns=10.0.100.1 \
    system-dns=no
/ip ipsec identity
	add auth-method=digital-signature certificate=vpn@vpn.dnsname.ru \
	generate-policy=port-strict match-by=certificate mode-config=clients.vpn.dnsname.ru \
	peer="peer VPN" policy-template-group="clients" \
	remote-certificate=client-1@vpn.dnsname.ru remote-id=user-fqdn:client-1@vpn.dnsname.ru
add auth-method=digital-signature certificate=vpn@vpn.dnsname.ru \
	generate-policy=port-strict match-by=certificate mode-config=clients.vpn.dnsname.ru \
	peer="peer VPN" policy-template-group="clients" \
	remote-certificate=client-2@vpn.dnsname.ru remote-id=user-fqdn:client-2@vpn.dnsname.ru
add auth-method=digital-signature certificate=vpn@vpn.dnsname.ru \
	generate-policy=port-strict match-by=certificate mode-config=s2s.vpn.dnsname.ru \
	peer="peer VPN" policy-template-group="s2s" \
	remote-certificate=s2s@vpn.dnsname.ru remote-id=user-fqdn:s2s@vpn.dnsname.ru
/ip ipsec policy
	add dst-address=10.0.100.2/32 group=s2s proposal=vpn.dnsname.ru src-address=10.0.100.1/32 template=yes
	add dst-address=10.0.100.0/24 group=clients proposal=vpn.dnsname.ru src-address=0.0.0.0/0 template=yes

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

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

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

2. Настройка клиента Windows.

Первым на очереди комп с установленной Windows 10 Pro x64 версия 1903.
В винде кликаем правой кнопкой мыши на значок сетевого подключения и выбираем пункт ОТКРЫТЬ ПАРАМЕТРЫ СЕТИ И ИНТЕРНЕТ.

Слева выбираем раздел VPN и справа ДОБАВИТЬ VPN ПОДКЛЮЧЕНИЕ:

Поставщик - Windows (встроенные)
Имя подключения - произвольно
Имя или адрес сервера - vpn.dnsname.ru
Тип VPN - IKEv2
и нажимаем сохранить.

Далее кликаем правой кнопкой мыши на значок сетевого подключения и выбираем пункт ОТКРЫТЬ ПАРАМЕТРЫ СЕТИ И ИНТЕРНЕТ. В правой части левый клик на пункте НАСТРОЙКА ПАРАМЕТРОВ АДАПТЕРА и в открывшемся окне правый клик на созданном VPN-подключении -> СВОЙСТВА. В разделе БЕЗОПАСНОСТЬ пункт ШИФРОВАНИЕ ДАННЫХ - самое стойкое (отключиться, если нет шифрования) ПРОВЕРКА ПОДЛИННОСТИ - выбираем ИСПОЛЬЗОВАТЬ СЕРТИФИКАТЫ КОМПЬЮТЕРА.

В случае если вам нужно выходить в интернет через шлюз подключенной через VPN сети, то выбираем вкладку СЕТЬ, двойной левый клик на IP версии 4, в открытом окне ДОПОЛНИТЕЛЬНО и далее во вкладке ПАРАМЕТРЫ IP ставьте галку ИСПОЛЬЗОВАТЬ ОСНОВНОЙ ШЛЮЗ В УДАЛЕННОЙ СЕТИ.

Далее импортируем сертификаты, которые экспортировали на предыдущем этапе:

  • CA@vpn.dnsname.ru. Двойной левый клик по сохраненному серту, установить и в пункте РАСПОЛОЖЕНИЕ ХРАНИЛИЩА выбираем ЛОКАЛЬНЫЙ КОМПЬЮТЕР, а в пункте ХРАНИЛИЩЕ СЕРТИФИКАТОВ выбираем ПОМЕСТИТЬ ВСЕ СЕРТИФИКАТЫ В ВЫБРАННОЕ ХРАНИЛИЩЕ и по кнопке выбираем хранилище ДОВЕРЕННЫЕ КОРНЕВЫЕ ЦЕНТРЫ СЕРТИФИКАЦИИ. Остальное по схеме далее -> далее -> готово.
  • client-1@vpn.dnsname.ru. Здесь также нужно выбрать хранилище ЛОКАЛЬНЫЙ КОМПЬЮТЕР, а в пункте ХРАНИЛИЩЕ СЕРТИФИКАТОВ выбираем ПОМЕСТИТЬ ВСЕ СЕРТИФИКАТЫ В ВЫБРАННОЕ ХРАНИЛИЩЕ и по кнопке выбираем хранилище ЛИЧНОЕ. Не забываем ввести пароль, который использовали при экспорте (в этой заметке пароль passwordforexport). Далее -> далее -> готово.

Можно подключаться.

3. Настройка MikroTik по схеме Site 2 Site (Site-2).

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

/system clock set time-zone-autodetect=no time-zone-name=Europe/Astrakhan
/system ntp client set enabled=yes server-dns-names=1.ru.pool.ntp.org,2.ru.pool.ntp.org,3.ru.pool.ntp.org

Заходим на МикроТик Site-2 и перекидываем на него скаченные сертификаты CA, VPN и S2S. В сумме у вас должно быть 6 файлов:

  • CA.vpn.dnsname.ru.crt
  • CA.vpn.dnsname.ru.key
  • s2s@vpn.dnsname.ru.crt
  • s2s@vpn.dnsname.ru.key
  • vpn@vpn.dnsname.ru.crt
  • vpn@vpn.dnsname.ru.key

и импортируем их по порядку. Обратите внимание, что импортировать нужно сначала CRT, а затем KEY.

/certificate 
import file-name=CA@vpn.dnsname.ru.crt passphrase=passwordforexport
import file-name=CA@vpn.dnsname.ru.key passphrase=passwordforexport
import file-name=vpn@vpn.dnsname.ru.crt passphrase=passwordforexport
import file-name=vpn@vpn.dnsname.ru.key passphrase=passwordforexport
import file-name=s2s@vpn.dnsname.ru.crt passphrase=passwordforexport
import file-name=s2s@vpn.dnsname.ru.key passphrase=passwordforexport

Настроим FireWall, параметры IPsec, добавим GRE-туннель и добавим маршрут в сеть Site-1:

/ip firewall filter
add action=accept chain=input comment="IKE2 - Accept UDP 500,4500 IPSec" \
    src-address=66.66.66.66 dst-port=500,4500 protocol=udp place-before=0
add action=accept chain=input comment="IKE2 - Accept IPSec-esp" src-address=\
    66.66.66.66 protocol=ipsec-esp place-before=0
add action=accept chain=input comment="Accept - In Ipsec" ipsec-policy=\
    in,ipsec dst-address=10.0.100.0/24 place-before=0
add action=accept chain=forward comment=\
    "Accept - All Traffic from VPN to ANY" dst-address=10.10.10.0/24 \
    ipsec-policy=in,ipsec src-address=10.0.100.0/24 place-before=0
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
/ip ipsec policy group
	add name="s2s"
/ip ipsec profile
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 \
    hash-algorithm=sha256 name="vpn.dnsname.ru"
/ip ipsec peer
add address=66.66.66.66/32 exchange-mode=ike2 name="peer VPN" profile=vpn.dnsname.ru
/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="vpn.dnsname.ru" pfs-group=none
/ip ipsec mode-config
	add name=s2s.vpn.dnsname.ru responder=no
/ip ipsec policy	
add dst-address=10.0.100.1/32 group=s2s proposal=vpn.dnsname.ru src-address=10.0.100.2/32 template=yes
/ip ipsec identity
	add auth-method=digital-signature certificate=s2s@vpn.dnsname.ru \
	generate-policy=port-strict match-by=certificate mode-config=s2s.vpn.dnsname.ru \
	peer="peer VPN" policy-template-group="s2s" \
	remote-certificate=vpn@vpn.dnsname.ru remote-id=user-fqdn:s2s@vpn.dnsname.ru
/interface gre
add local-address=10.0.100.2 name="IKEv2-GRE-Tunnel" remote-address=10.0.100.1
/ip route
	add distance=1 dst-address=192.168.0.0/22 gateway="IKEv2-GRE-Tunnel"

Если вы всё сделали по инструкции, то на данном этапе туннель должен заработать! Если же это не так, то попробуйте отключить запрещающие правила на FireWall на обоих маршрутизаторах.

Для настройки клиента на устройствах под управлением Android и и продуктов фирмы Apple предлагаю проследовать на сайт официальной документации, дублировать которую просто не вижу смысла.

Ньюансы Windows 10

Небольшое дополнение: При подключении с ПК под управлением Windows (в моем случае Windows10 x64 1903) к разным микротам VPN-подключение непонятным образом выбирает CA-сертификат. Решение подсказали на форуме и состоит оно в принудительном указании соответствия сертификата подключению, используя powerShell.

Set-VpnConnection -Name "My VPN Connection" -MachineCertificateIssuerFilter 'C:\mycerts\cert_export_MikrotikIKEv2-CA.crt'

Также случается, что на винде не получается автоматически маршрут к удаленной сети. Эта проблема также решается через powerShell добавлением маршрута после подключения определенного VPN.

Add-VpnConnectionRoute -ConnectionName "VPN Connection Name" -DestinationPrefix 192.168.50.0/24

Ньюансы Windows 7

Настройка VPN-подключения в Windows 7 ничем не отличается от Windows 10 кроме процесса импорта сертификатов в хранилище.
Итак: нажимаете Windows + R и в строке пишем mmc и нажимаем Enter.

Меню Файл - > Добавить или удалить оснастку.

В левой части открывшегося окна ищем пункт Сертификаты и нажимаем кнопку Добавить.

В следующем окне нужно выбрать учетной записи компьютера

И жмём Далее -> Готово -> ОК.

Перед нами откроется окно и здесь уже нужно импортировать сертификаты.

Сертификаты -> Правой кнопкой мыши по Личное -> Все задачи -> Импорт -> и выбираем наш сертификат p12.

После импорта настоятельно рекомендую проверить, чтобы клиентский серт был в личном, а СА в доверенных.

Надеюсь, что у вас всё получилось.
Если же нет, то добро пожаловать в раздел КОНТАКТЫ

Компонент комментариев CComment

IT-admins

IT-admins

8.00 - 17.00

☎ +7 (8512) 755-888
☎ +7 (905) 480-5470
☎ +7 (917) 199-8113
info@it-admins.ru


IT-admins © 2018