Как стать автором
Обновить

Сервер VPN IKEv2 с логином и паролем на MikroTik

Время на прочтение7 мин
Количество просмотров84K

Эта статья о том, как перестать мучиться с сертификатами для 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

Все автоматически выдаваемые клиентам‑микротикам сертификаты подписаны от имени R3.
В клиентской ОС Windows сертификат R3 обязательно должен быть установлен как «промежуточный доверенный центр сертификации» в хранилище КОМПЬЮТЕРА (Local Machine). Самая распространенная проблема при импорте сертификата обычно находится в метре от ПК и кликает «мышкой». ОС Windows по‑умолчанию пытается данный сертификат установить в хранилище пользователя, что ведет к проблемам доступа.

Итак. Убедитесь, что сертификат R3 присутствует в хранилище «промежуточные доверенные центры сертификации» КОМПЬЮТЕРА. Если нет — скачайте по ссылке https://letsencrypt.org/certs/lets‑encrypt‑r3.pem и установите сертификат правильно.

Выбор правильного хранилища для сертификата
Выбор правильного хранилища для сертификата

Начальные условия:

  • Внешний 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

Обратите внимание, чтобы номер версии пакета точно соответствовал установленной версии RouterOS! Невозможно установить пакеты версии, отличающейся от версии установленной на роутере операционной системы.

Из архива Вам потребуется единственный файл «user‑manager-7.x.npk»

Содержимое архива extra-packages
Содержимое архива extra-packages

Данный файл необходимо извлечь из архива, скопировать в корень файловой системы маршрутизатора MikroTik и произвести перезагрузку (/system reboot ).

В случае, если пакет успешно установлен, в корневом меню WinBox появится новый пункт «User Manager» (если нет — читайте LOG. В начале будет описана причина ошибки)

Внешний вид меню Winbox маршрутизатора с установленным пакетом "User-Manager
Внешний вид меню Winbox маршрутизатора с установленным пакетом "User-Manager

Настройка 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
  1. Profile

  2. Proposal

  3. Group

  4. Policy Template

  5. Peer (шаблон)

  6. Modeconf

  7. 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

3) Создадим отдельную Group для Policy:

/ip ipsec policy group add name=ike2
Группа для генерации policy
Группа для генерации policy

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

5) Создаем шаблон пира (клиента):

/ip/ipsec/peer add exchange-mode=ike2 name=peerike2 passive=yes profile=profile-ike2
Шаблон для peer ссылается на Profile с шага 1
Шаблон для peer ссылается на Profile с шага 1

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

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

UPD: по рекомендации товарища @modnyman лучше сразу скачать на микротик и указать также сертификат R3 от Let's Encrypt. Тогда не придется устанавливать его на клиентские устройства в дальнейшем для избежания ошибки IKE с кодом 13801 (см.последний абзац)

Промежуточный сертификат Let's Encrypt можно указать сразу в составе IPSec Identity
Промежуточный сертификат Let's Encrypt можно указать сразу в составе IPSec Identity

Параметр "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" не обязателен.

Минимальная, самая примитивная настройка 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-сервера и одного пользователя
Код для RouterOS целиком
/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

Параметры создаваемого подключения
Параметры создаваемого подключения

Если всё сделано правильно, то должно произойти успешное подключение в VPN.

Если же возникает ошибка IKE с кодом 13801 то, скорее всего, неправильно или не туда в системе установлен сертификат R3.

Теги:
Хабы:
Всего голосов 12: ↑12 и ↓0+12
Комментарии52

Публикации

Истории

Работа

Ближайшие события