Настройка IKEv2 EAP на роутерах Mikrotik
Не так давно к нам обратились с просьбой реализовать подключение к корпоративной сети максимально простым и нативным способом с разных устройств.
Протоколы типа PPTP, SSTP, L2TP+IPSec отпали сразу, т.к. современные устройства, за исключением Windows, прекратили их поддержку. Устанавливать OpenVPN клиенты, передавать и импортировать сертификаты для пользователей, зачастую, достаточно сложно.
Выбор был сделан в пользу протокола IKEv2+EAP, т.к. пользователю придётся ввести только адрес сервера, логин и пароль. К тому же, у заказчика уже имелся в сети роутер Mikrotik и на нём реализовать данный тип подключения возможно.
Итак, что необходимо для реализации данного способа подключения:
- Роутер от компании Mikrotik, подключенный напрямую в интернет с RouterOS 7й версии (крайне желательно, чтобы он поддерживал аппаратное шифрование, чтобы не становиться узким местом при передаче данных)
- Внешний «белый» ip-адрес от провайдера
- Публичное доменное имя, для нашего роутера (A-запись указывающая на внешний IP-адрес роутера, сделанная в DNS-зоне вашего домена)
- Установленный пакет 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-сервер для подключения к корпоративной сети, вы всегда можете обратиться за помощью в нашу компанию, квалифицированные специалисты помогут вам с настройкой любого сетевого или серверного оборудования.
Свяжитесь с нами
Автор: Артем Гавриш