Настройка IKEv2 EAP на роутерах Mikrotik

Не так давно к нам обратились с просьбой реализовать подключение к корпоративной сети максимально простым и нативным способом с разных устройств.

Протоколы типа PPTP, SSTP, L2TP+IPSec отпали сразу, т.к. современные устройства, за исключением Windows, прекратили их поддержку. Устанавливать OpenVPN клиенты, передавать и импортировать сертификаты для пользователей, зачастую, достаточно сложно.

Выбор был сделан в пользу протокола IKEv2+EAP, т.к. пользователю придётся ввести только адрес сервера, логин и пароль. К тому же, у заказчика уже имелся в сети роутер Mikrotik и на нём реализовать данный тип подключения возможно.

Итак, что необходимо для реализации данного способа подключения:

  1. Роутер от компании Mikrotik, подключенный напрямую в интернет с RouterOS 7й версии (крайне желательно, чтобы он поддерживал аппаратное шифрование, чтобы не становиться узким местом при передаче данных)
  2. Внешний «белый» ip-адрес от провайдера
  3. Публичное доменное имя, для нашего роутера (A-запись указывающая на внешний IP-адрес роутера, сделанная в DNS-зоне вашего домена)
  4. Установленный пакет User Manager на роутере Mikrotik (скачивается с официального сайта, находится в архиве Extra Packages для вашей модели роутера). Для установки пакета достаточно закачать его в роутер и выполнить перезагрузку.

Наконец, приступим к установке.

0. Подключаемся к роутеру

1. Разбираемся с сертификатами

Автоматически выпускаем Let’s Encrypt сертификат для нашего роутера

Открываем окно New Terminal и вводим команду

certificate/enable-ssl-certificate dns-name=”полное доменное имя нашего роутера”

Дожидаемся, когда процесс выпуска, верификации и установки завершится (на слабых роутерах может длиться до 3 минут)

Проверяем что сертификат успешно установился в разделе System->Certificates

После этого скачиваем сертификаты R3 и X1 в формате .der, они необходимы нам для формирования полной цепочки доверия для нашего сертификата.

R3 – https://letsencrypt.org/certs/lets-encrypt-r3.der

X1 – https://letsencrypt.org/certs/isrgrootx1.der

Загружаем их в наш роутер Mikrotik и в разделе System->Certificates импортируем их на роутер

Проверяем, что у всех присутствует флаг Trusted (буква T в первой колонке), если нет, открываем сертификат и ставим соответствующую галку.

2.  Создадим пул ip-адресов для наших VPN клиентов

Раздел IP->Pool, нажимаем «+» и добавляем новый пул адресов

/ip pool add name=ikev2 ranges=172.16.1.20-172.16.1.30

3. Переходим в раздел IP->IPSec на вкладку Groups и добавляем новую группу

/ip ipsec policy group add name=ikev2-group

4.  На вкладке Proposals добавляем новый.

Обратите внимание на необходимые галки и значение PFS Group, если допустить в них ошибку, клиент не сможет подключиться. Данный конфиг не является истиной в последней инстанции, но проверен и работает на всех устройствах, до которых мне удалось дотянуться.

/ip ipsec proposal add auth-algorithms=sha256,sha1 enc-algorithms=”aes-256-cbc,aes-256-ctr,aes-256-gcm,aes-192-ctr,aes-192-gcm,aes-128-ctr,aes-128-gcm” name=IKEv2-prop pfs-group=none

5.  На вкладке Policies добавляем новую политику

Обязательно ставим галку Template, выбираем нашу созданную группу.

На вкладке Action выбираем

Action: encrypt

IPSec Protocols: esp

Proposal: ранее созданный Proposal (в моём случае IKEv2-prop)

/ip ipsec policy add group=ikev2-group proposal=IKEv2-prop template=yes

6. На вкладке Mode Configs создаём новый конфиг

Выбираем наш созданный пул ip-адресов

Длину префикса можно не менять, но для нашего примера это было необходимо

Значение поля Split include можно не заполнять, тогда весь трафик клиента будет направляться в туннель, либо можно указать подсети, маршруты до которых должны передаться клиенту.

По умолчанию стоит галка System DNS, она передаёт клиенту те DNS сервера, которые указаны у нашего роутера. У нас сеть доменная и в ней есть 2 контроллера домена с ролью DNS, соответственно, снимаем галку и указываем адреса наших контроллеров домена.

/ip ipsec mode-config add address-pool=ikev2 address-prefix-length=32 name=IKEv2-cfg split-include=172.16.0.0/16 static-dns=172.16.1.200,172.16.1.203 system-dns=no

7. Вкладка Profiles, добавляем новый профиль

Внимательно смотрим на галки и параметры, в случае ошибки, подключение не установится.

/ip ipsec profile add dh-group=ecp256,modp2048,modp1024 enc-algorithm=aes-256 hash-algorithm=sha256 name=IKEv2

8. На вкладке Peers создаём нового

/ip ipsec peer add exchange-mode=ike2 name=IKEv2-peer passive=yes profile=IKEv2

9. Вкладка Identities тут будем собирать всю магию в кучу.

Добавляем новый.

Peer – выбираем созданный ранее peer

Auth. Method – eap radius

Certificate – добавляем 3 поля:

 – в первом указываем наш автоматически выпущенный сертификат

 – во втором сертификат r3

 – в третьем сертификат x1

Policy Template Group – ранее созданный шаблон политики

Mode Configuration – ранее созданный Mod. Config

Generate Policy – port strict

/ip ipsec identity add auth-method=eap-radius certificate=”letsencrypt-autogen_2024-04-02T16:46:17Z,lets-encrypt-r3.der_0,isrgrootx1.der_0″ generate-policy=port-strict mode-config=IKEv2-cfg peer=IKEv2-peer policy-template-group=ikev2-group

10. Добавляем RADIUS сервер

В левом меню выбираем RADIUS и добавляем новый RADIUS сервер:

Service – ipsec

Address – локальный адрес роутера, в моём случае, loopback адрес 127.0.0.1

Secret – задаём пароль

/radius add address=127.0.0.1 service=ipsec secret=”SuPeR$ECRetP@s$w0rD”

11. Раздел User Manager

В левом меню выбираем User Manager, на вкладке Routers добавляем новую запись:

Shared Secret – указываем пароль RADIUS

Address – указываем локальный адрес роутера, в моём случае, это, опять же, loopback адрес 127.0.0.1

/user-manager router add address=127.0.0.1 name=router1 shared-secret=”SuPeR$ECRetP@s$w0rD”

По кнопке Settings ставим галку Enabled

/user-manager set enabled=yes

12. Создаём пользователя

На вкладке Users добавляем нового пользователя, задаём ему имя и пароль

/user-manager user add name=test password=”$tr0ngUSerP@$sw0rd”

На этом всё, настройка нашего VPN-сервера завершена. Мы можем передавать нашему пользователю:

адрес сервера для подключения – публичное доменное имя нашего роутера

логин – в нашем случае test

пароль – в нашем случае $tr0ngUSerP@$sw0rd

Как видим, в целом, не очень сложная настройка, но требует внимательности.

Сертификат Let’s Encrypt действует всего 3 месяца, чтобы он продлевался автоматически, нужно добавить в Scheduler следующий скрипт:

#Указываем в кавычках публичное имя вашего роутера
:global commName “публичное-имя-вашего-роутера”
#Указываем имя peer которое вы создали в разделе IP->IPSec, вкладка peers
:global peerName “IKEv2-peer”
ip service/enable www
certificate/enable-ssl-certificate dns-name=$commName
:delay 180s;
:global certName [certificate/get [find where common-name=$commName] name]
:global R3 [certificate/get [find where common-name=R3] name]
:global X1 [certificate/get [find where common-name=”ISRG Root X1″] name]
ip/ipsec/identity/set [find where peer=$peerName] certificate=”$certName,$R3,$X1″
ip service/disable www
:set commName
:set peerName
:set certName
:set R3
:set X1

Настройка подключения с Windows 10 выглядит следующим образом:

Настройка подключения для iphone осуществляется штатными средствами

Настройка подключения для Android

К сожалению, каждый производитель смартфонов на Android по-своему реализует штатный клиент VPN в своих оболочках, поэтому, рекомендую использовать клиент StrongSwan из Play Market (https://play.google.com/store/apps/details?id=org.strongswan.android&hl=en)

Настройка подключения в нём тривиальна:

Более подробная настройка IKEv2-EAP доступна в видео: https://youtu.be/hSy39PvxOgA

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

Автор: Артем Гавриш

Поделиться с друзяьми: