Содержание
Эта статья о том, как перестать мучиться с сертификатами для IKEv2-RSA и их установкой.
В Интернете есть множество статей и видео по настройке аутентификации IKEv2 с использованием сертификатов. Главная проблема такой конфигурации — необходимость генерации множества сертификатов, доставки и установки их на каждое клиентское устройство. Довольно замороченный процесс, согласитесь?
Вместе с тем, протокол IKEv2 предоставляет быстрый, защищенный доступ к локальной сети с возможностью автоматической передачи маршрутов и параметров DNS VPN‑клиенту.
Но схему доступа можно существенно упростить используя аутентификацию по логину и паролю. Полученную схему можно масштабировать на прочие VPN‑протоколы — l2tp, pptp, sstp, ovpn. Для этого необходимо VPN‑сервер MikroTik перевести на седьмую версию RouterOS. И нам потребуется сгенерировать всего один сертификат — для VPN‑сервера.
В седьмой версии RouterOS появились очень полезные функции, которые позволяют превратить MikroTik в полноценный VPN‑сервер. Среди того, что существенно облегчает жизнь админу для нашей задачи очень подходят два новшества:
- Работа с сертификатами Let’s Encrypt
- Встроенный Radius‑сервер
Теперь, для отдельно взятого vpn‑сервера MikroTik больше не требуется сторонний генератор и установщик сертификатов. Механизм запроса и установки действительного сертификата от Let’s Encrypt позволяет сделать это за несколько секунд. Встраиваемый Radius‑сервер решает проблему отсутствия такового в небольшой локальной сети или невозможности использования по иным причинам.
Важное уточнение по сертификатам от Let’s Encrypt в составе ОС.
Необходимо убедиться, правильно ли на клиенте установлены действующие сертификаты от Let’Encrypt. Это важно не только для нашей задачи, но и для корректной работы других служб и приложений использующих сертификаты.
Дело в том, что цепочка доверия Let’s Encrypt выглядит на сегодня так:
https://letsencrypt.org/certificates/
![Иерархия сертификатов Let's Encrypt Иерархия сертификатов Let's Encrypt](https://hd.zp.ua/wp-content/uploads/2023/09/2a739ca060d77fa110708e7e093155e8.png)
Все автоматически выдаваемые клиентам‑микротикам сертификаты подписаны от имени R3.
В клиентской ОС Windows сертификат R3 обязательно должен быть установлен как «промежуточный доверенный центр сертификации» в хранилище КОМПЬЮТЕРА (Local Machine). Самая распространенная проблема при импорте сертификата обычно находится в метре от ПК и кликает «мышкой». ОС Windows по‑умолчанию пытается данный сертификат установить в хранилище пользователя, что ведет к проблемам доступа.
Итак. Убедитесь, что сертификат R3 присутствует в хранилище «промежуточные доверенные центры сертификации» КОМПЬЮТЕРА. Если нет — скачайте по ссылке https://letsencrypt.org/certs/lets‑encrypt‑r3.pem и установите сертификат правильно.
![Выбор правильного хранилища для сертификата Выбор правильного хранилища для сертификата](https://hd.zp.ua/wp-content/uploads/2023/09/56b7a1f223f6ae99cd5ea3c6a9d1df27.png)
Начальные условия:
- Внешний IP (FQDN): gw1.mt-courses.ru
- Локальная сеть: 10.10.4.0/24
- Адреса для ikev2-клиентов: 192.0.2.0/24
- Маршрутизатор под управлением MikroTik RouterOS версии 7.x
Настройка MikroTik RouterOS. Подготовка
1. Генерация запроса и установка сертификата на сервер
Необходимые условия: на роутере должен быть открыт и доступен извне порт http (tcp:80). По‑умолчанию, на этом порту работает служба webfig. Доступ к ней извне всем подряд оставлять крайне НЕ рекомендуется, так что можно открывать порт только в момент генерации/обновления сертификата.
Также желательно наличие FQDN связанного с внешним IP вашего MikroTik. Например, gw1.mt‑courses.ru.
Скрипт получения сертификата:
/ip/firewall/filter add chain=input protocol=tcp dst-port=80 action=accept comment="temporary filter rule" place-before=1
/certificate/enable-ssl-certificate dns-name=gw1.mt-courses.ru
/ip/firewall/filter remove [find comment="temporary filter rule"]
Если в результате работы команды вы увидели сообщение «progress: [success] ssl certificate updated«, значит сертификат успешно сгенерирован и установлен в хранилище. Проверяем:
/certificate/print
Результат:
Flags: K — PRIVATE‑KEY; A — AUTHORITY; I, R — REVOKED; T — TRUSTED
Columns: NAME, COMMON‑NAME
0 K T letsencrypt‑autogen_2023–xx–xxThh:mm:ssZ gw1.mt‑courses.ru
2. Получение и установка дополнительного пакета user-manager на MikroTIk
Для этого Вам потребуется зайти на сайт https://www.mikrotik.com в раздел «Software» и скачать оттуда архив «extra packages» соответствующий аппаратной архитектуре Вашего роутера MikroTik.
![Внешний вид страницы загрузки пакетов RouterOS версии 7 Внешний вид страницы загрузки пакетов RouterOS версии 7](https://hd.zp.ua/wp-content/uploads/2023/09/5092887bea72bf3eaaa70e18534b58ce.png)
Обратите внимание, чтобы номер версии пакета точно соответствовал установленной версии RouterOS! Невозможно установить пакеты версии, отличающейся от версии установленной на роутере операционной системы.
Из архива Вам потребуется единственный файл «user‑manager-7.x.npk»
![Содержимое архива extra-packages Содержимое архива extra-packages](https://hd.zp.ua/wp-content/uploads/2023/09/43855166010f10a29e3b82c3331ca103.png)
Данный файл необходимо извлечь из архива, скопировать в корень файловой системы маршрутизатора MikroTik и произвести перезагрузку (/system reboot ).
В случае, если пакет успешно установлен, в корневом меню WinBox появится новый пункт «User Manager» (если нет — читайте LOG. В начале будет описана причина ошибки)
![Внешний вид меню Winbox маршрутизатора с установленным пакетом "User-Manager Внешний вид меню Winbox маршрутизатора с установленным пакетом "User-Manager](https://hd.zp.ua/wp-content/uploads/2023/09/86825f035a088fe68bdd42c81b6763b1.png)
Настройка IKEv2
Теперь переходим к самому основному, собственно настройке VPN‑сервера доступа по протоколу IKEv2. Поскольку при подключении клиента, ему выделяется некий виртуальный IP‑адрес, то сначала нам необходимо создать пул адресов для подключаемых клиентов:
/ip/pool add name=vpn-pool ranges=192.0.2.1–192.0.2.254
Переходим непосредственно к настройке IPSec. Настройка IPSec требует создания нескольких сущностей:
![Пункты настройки IPSec в меню Winbox Пункты настройки IPSec в меню Winbox](https://hd.zp.ua/wp-content/uploads/2023/09/409968ca133f71812f97a74b3a75a300.png)
- Profile
- Proposal
- Group
- Policy Template
- Peer (шаблон)
- Modeconf
- Identity
Group используется как тег для связывания Identity и Policy Template для генерации индивидуальных Policy из шаблона (template) при подключении клиента. По сути, Identity, это то, что собирает во едино все настройки, когда клиент подключится к серверу. По этому Identity настраивается в последнюю очередь, когда остальные параметры созданы.
Здесь хочу дать вам совет: Никогда. Н‑и-к‑о-г‑д-а, без острой необходимости не изменяйте в RouterOS профили с названием «Default», если точно НЕ знаете, как это повлияет на дальнейшую работу. В Winbox всегда есть возможность создать копию профиля и проводить эксперименты с копией. В консоли тоже есть такая возможность — ключевое слово «copy‑from=».
1,2) Для наглядности создадим копии имеющихся Proposal и Profile. При этом отключим в Proposal PFS:
/ip/ipsec/proposal
print
add copy-from=0 name=proposal-ike2 pfs-group=none
/ip/ipsec/profile
print
add copy-from=0 name=profile-ike2
![Новые наборы параметров для IKEv2 Новые наборы параметров для IKEv2](https://hd.zp.ua/wp-content/uploads/2023/09/b5eb3e85fc080993598bf86fd1a27b14.png)
3) Создадим отдельную Group для Policy:
/ip ipsec policy group add name=ike2
![Группа для генерации policy Группа для генерации policy](https://hd.zp.ua/wp-content/uploads/2023/09/945c53a0e149b6911fe571cd5965a11e.png)
4) Создаем шаблон Policy Template для подключенных пиров, получивших адрес из пула 192.0.2.0/24:
/ip/ipsec/policy add dst-address=192.0.2.0/24 group=ike2 proposal=proposal-ike2 src-address=0.0.0.0/0 template=yes
![Новый шаблон Ploicy Template ссылается на Proposal с шага 1 и на Group с шага 3 Новый шаблон Ploicy Template ссылается на Proposal с шага 1 и на Group с шага 3](https://hd.zp.ua/wp-content/uploads/2023/09/a7635143ecedf0c3359be32b0839e070.png)
5) Создаем шаблон пира (клиента):
/ip/ipsec/peer add exchange-mode=ike2 name=peerike2 passive=yes profile=profile-ike2
![Шаблон для peer ссылается на Profile с шага 1 Шаблон для peer ссылается на Profile с шага 1](https://hd.zp.ua/wp-content/uploads/2023/09/627f7179ba92b0fe033c166643e58566.png)
6) Создаём mode‑config. Это набор параметров, которые будут переданы клиенту, включая адрес DNS‑сервера и маршруты до локальных сетей. В примере клиенту передается маршрут до локальной сети 10.10.4.0/24:
/ip/ipsec/mode-config
add address-pool=vpn-pool name=ike2-modconf split-include=10.10.4.0/24 system-dns=yes
![Новый modeconf с параметрами для передачи клиенту. Ссылается на Pool Новый modeconf с параметрами для передачи клиенту. Ссылается на Pool](https://hd.zp.ua/wp-content/uploads/2023/09/c945ccd1d006cff981ad074541e0017c.png)
7) Создаем итоговый identity. В нем мы также будем использовать ссылку на полученный сертификат от Let’s Encrypt:
/ip/ipsec/identity
add auth-method=eap-radius certificate=letsencrypt-autogen_2023-xx-xxThh:mm:ssZ generate-policy=port-strict mode-config=ike2-modconf peer=peerike2 policy-template-group=ike2
![Identity ссылается на Radius, Group, Modeconf и сертификат Let's Encrypt Identity ссылается на Radius, Group, Modeconf и сертификат Let's Encrypt](https://hd.zp.ua/wp-content/uploads/2023/09/7dd15785c262694dc621358272975a80.png)
UPD: по рекомендации товарища @modnyman лучше сразу скачать на микротик и указать также сертификат R3 от Let’s Encrypt. Тогда не придется устанавливать его на клиентские устройства в дальнейшем для избежания ошибки IKE с кодом 13801 (см.последний абзац)
![Промежуточный сертификат Let's Encrypt можно указать сразу в составе IPSec Identity Промежуточный сертификат Let's Encrypt можно указать сразу в составе IPSec Identity](https://hd.zp.ua/wp-content/uploads/2023/09/c24e4c55861a5bcc7c43d92f2f3a4660.png)
Параметр «auth-method=eap-radius» говорит микротику, что запросы аутентификации надо пересылать на Radius-сервер. Осталось его настроить прямо на MikroTik. Наш встроенный radius (UserManager) будет использовать пароль «MySuperPass1234» и, кроме клиентов IPSec IKEv2, будет дополнительно обрабатывать запросы обычных ppp-клиентов (pptp/l2tp/sstp…)
/radius
add address=127.0.0.1 secret=MySuperPass1234 service=ppp,ipsec
/radius incoming
set accept=yes
![Настройка обращений к встроенному user-manager. Пункт "ppp" не обязателен. Настройка обращений к встроенному user-manager. Пункт "ppp" не обязателен.](https://hd.zp.ua/wp-content/uploads/2023/09/d4070dc45a66a76e22df62d79e5c254a.png)
Минимальная, самая примитивная настройка user-manager состоит из команд включения, разрешения взаимодействия с локальным сервером доступа используя пароль «1234» и добавления пользователя с логином «user1@gw» и паролем «1234567890»:
/user-manager
set enabled=yes
/user-manager router
add address=127.0.0.1 name=router1 shared-secret=MySuperPass1234
/user-manager user
add name=user1@gw1 password=1234567890
![Описание доступа для vpn-сервера и одного пользователя Описание доступа для vpn-сервера и одного пользователя](https://hd.zp.ua/wp-content/uploads/2023/09/fd60604af83c7a35b124a289b8adc396.png)
/ip/firewall/filter add chain=input protocol=tcp dst-port=80 action=accept comment="temporary filter rule" place-before=1
/certificate/enable-ssl-certificate dns-name=gw1.mt-courses.ru
/ip/firewall/filter remove [find comment="temporary filter rule"]
/ip/pool add name=vpn-pool ranges=192.0.2.1–192.0.2.254
/ip/ipsec/proposal
print
add copy-from=0 name=proposal-ike2 pfs-group=none
/ip/ipsec/profile
print
add copy-from=0 name=profile-ike2
/ip/ipsec/policy group add name=ike2
/ip/ipsec/policy add dst-address=192.0.2.0/24 group=ike2 proposal=proposal-ike2 src-address=0.0.0.0/0 template=yes
/ip/ipsec/peer add exchange-mode=ike2 name=peerike2 passive=yes profile=profile-ike2
/ip/ipsec/mode-config add address-pool=vpn-pool name=ike2-modconf split-include=10.10.4.0/24 system-dns=yes
/ip/ipsec/identity add auth-method=eap-radius certificate=letsencrypt-autogen_2023-xx-xxThh:mm:ssZ generate-policy=port-strict mode-config=ike2-modconf peer=peerike2 policy-template-group=ike2
/radius add address=127.0.0.1 secret=MySuperPass1234 service=ppp,ipsec
/radius incoming set accept=yes
/user-manager set enabled=yes
/user-manager router add address=127.0.0.1 name=router1 shared-secret=MySuperPass1234
/user-manager user add name=user1@gw1 password=1234567890
Подключаем клиента windows.
Создаем новое подключение к VPN.
Имя/адрес сервера: указываем FQDN, своё, на которое выдан сертификат (у меня это gw1.mt-courses.ru)
Логин в примере: user1@gw1 Пароль: 1234567890
![Параметры создаваемого подключения Параметры создаваемого подключения](https://hd.zp.ua/wp-content/uploads/2023/09/283c166d542c58ccdf34db3cf7e05d95.png)
Если всё сделано правильно, то должно произойти успешное подключение в VPN.
Если же возникает ошибка IKE с кодом 13801 то, скорее всего, неправильно или не туда в системе установлен сертификат R3.