Зачем нужны сертификаты в VPN MikroTik
При организации VPN-доступа к локальной сети через MikroTik возникает вопрос выбора метода аутентификации. Традиционные протоколы PPTP и L2TP/IPsec используют пароли, которые могут быть перехвачены или подобраны. Использование сертификатов позволяет реализовать более надежную схему, при которой подлинность каждой стороны подтверждается криптографически, без передачи секретных данных по сети.
Сертификаты решают две ключевые задачи: аутентификацию сервера перед клиентом и аутентификацию клиента перед сервером. Это исключает атаки типа "человек посередине", когда злоумышленник пытается выдать себя за VPN-сервер. Кроме того, сертификаты позволяют централизованно управлять доступом: выпустить сертификат для каждого сотрудника и при необходимости отозвать его, не меняя пароли на всех устройствах.
В контексте MikroTik сертификаты используются в протоколе IKEv2, который является современной заменой устаревших PPTP и L2TP. IKEv2 поддерживается всеми актуальными операционными системами (Windows, macOS, iOS, Android) без установки дополнительного ПО, что делает его удобным для организации удаленной работы.
Создание центра сертификации (CA) на MikroTik
Первый шаг в настройке VPN с сертификатами — создание собственного центра сертификации (CA). Это позволяет выпускать и подписывать сертификаты для сервера и клиентов, не обращаясь к сторонним коммерческим CA. В RouterOS это делается встроенными средствами через меню System → Certificates.
Для создания корневого сертификата CA необходимо:
- Перейти в System → Certificates и нажать кнопку "+".
- Заполнить поля: Name (например, ca), Common Name (также ca), Key Size (рекомендуется 2048 бит или больше), Days Valid (срок действия, например, 3650 дней — 10 лет).
- На вкладке Key Usage оставить только флаги crl sign (подпись списков отзыва) и key cert. sign (подпись сертификатов).
- Нажать Apply, затем Sign. В поле CA CRL Host указать IP-адрес роутера (например, 127.0.0.1 или реальный адрес).
В терминале эти действия выглядят так:
/certificate add name=ca common-name=ca key-size=2048 days-valid=3650 key-usage=crl-sign,key-cert-sign
/certificate sign ca ca-crl-host=192.168.103.1После подписи корневой сертификат появится в списке с флагом A (authority). Этот сертификат будет использоваться для подписи всех остальных сертификатов в инфраструктуре.
Выпуск серверного сертификата для VPN
Серверный сертификат необходим для шифрования соединения и проверки подлинности VPN-сервера клиентами. При его создании важно учесть несколько требований.
Статический IP или доменное имя. Сервер должен иметь постоянный IP-адрес или, что предпочтительнее, доменное имя (FQDN). В сертификате указывается конкретный адрес, по которому клиенты будут подключаться. Если IP изменится, придется перевыпускать сертификат и обновлять настройки клиентов. Использование FQDN позволяет избежать этой проблемы.
Соответствие адреса. Сертификат должен быть выпущен именно на тот адрес (IP или FQDN), который клиенты будут указывать при подключении. Если сертификат выпущен для домена, а клиент подключается по IP, соединение будет отклонено, и наоборот.
Для создания серверного сертификата:
- В System → Certificates нажмите "+".
- В поле Name укажите IP или FQDN сервера (например, vpn.example.com).
- В поле Common Name укажите то же значение.
- В поле Subject Alt. Name выберите тип DNS (для домена) или IP (для адреса) и укажите соответствующее значение.
- Key Size — 2048, Days Valid — например, 3650.
- На вкладке Key Usage оставьте только флаг tls server.
- Нажмите Apply, затем Sign и выберите созданный ранее CA.
Пример команды для терминала:
/certificate add name=vpn.example.com common-name=vpn.example.com subject-alt-name=DNS:vpn.example.com key-size=2048 days-valid=3650 key-usage=tls-server
/certificate sign vpn.example.com ca=caВыпуск и экспорт клиентских сертификатов
Клиентские сертификаты выдаются каждому устройству или пользователю, которому разрешен доступ к VPN. Они подписываются тем же CA и содержат закрытый ключ клиента.
При создании клиентского сертификата рекомендуется использовать понятные имена, например, ФИО сотрудника или название отдела. Это упрощает администрирование и позволяет быстро определить владельца сертификата. Срок действия клиентских сертификатов не следует делать слишком большим — оптимально 1 год (365 дней). Это снижает риски при компрометации ключа.
Процесс создания:
- В System → Certificates нажмите "+".
- Заполните Name и Common Name (например, IvanovIA).
- Укажите Days Valid (например, 365).
- На вкладке Key Usage оставьте только флаг tls client.
- Нажмите Apply, затем Sign и выберите CA.
После подписи сертификат необходимо экспортировать для установки на клиентское устройство. Наиболее удобный формат — PKCS12, который объединяет в одном файле закрытый ключ клиента, его сертификат и корневой сертификат CA. Для экспорта:
- Выберите сертификат в списке.
- Нажмите Export.
- В поле Type выберите PKCS12.
- В поле Export Passphrase введите пароль (не менее 8 символов).
- Укажите имя файла и нажмите Export.
Файл появится в разделе Files, откуда его можно скачать на компьютер. Команда для терминала:
/certificate export IvanovIA type=pkcs12 export-passphrase=0123456789Настройка IPsec для IKEv2: профили, предложения, пулы
После создания сертификатов переходим к настройке IPsec, который является основой IKEv2. Этот этап включает создание нескольких сущностей в меню IP → IPsec.
Профиль (Profile). Задает параметры установления соединения. Создайте новый профиль с осмысленным именем (например, IKEv2). Все параметры можно оставить по умолчанию. В терминале:
/ip ipsec profile add name=IKEv2Предложения (Proposals). Определяют алгоритмы шифрования и хеширования, которые сервер предлагает клиентам. По умолчанию в RouterOS используется устаревший 3des, который следует удалить. Добавьте современные алгоритмы aes-128-cbc, aes-192-cbc, aes-256-cbc. Это обеспечит совместимость с актуальными ОС и высокий уровень безопасности.
/ip ipsec proposal add name=IKEv2 pfs-group=noneОбратите внимание: при создании предложения через терминал и через Winbox набор параметров может отличаться. В терминале команда создает предложение с нужными алгоритмами автоматически.
Пул IP-адресов. Для выдачи адресов VPN-клиентам создайте пул в меню IP → Pool. Например, диапазон 172.16.200.1-172.16.200.100 или 10.20.0.100-10.20.0.199.
/ip pool add name=IKEv2_Pool ranges=172.16.200.1-172.16.200.100Настройка Mode Config, групп, политик и пиров
Продолжаем настройку IPsec, создавая конфигурацию для передачи параметров клиентам и правила обработки трафика.
Mode Config. Определяет параметры, которые VPN-сервер передает клиенту при подключении: IP-адрес из пула, маску, DNS-серверы, маршруты до внутренних сетей. Создайте новую конфигурацию в IP → IPsec → Mode Configs. Установите флаг Responder, выберите созданный пул, укажите Address Prefix Length = 32. В поле Split Include укажите подсети, доступ к которым должен получать клиент (например, 192.168.111.0/24). Флаг System DNS предписывает клиенту использовать DNS-серверы роутера.
/ip ipsec mode-config add address-pool=IKEv2_Pool address-prefix-length=32 name=IKEv2-cfg split-include=192.168.111.0/24 system-dns=yesГруппы. Используются для связывания политик и identity. Создайте группу с уникальным именем.
/ip ipsec policy group add name=ikev2-policiesПолитики (Policies). Определяют, какой трафик будет зашифрован и направлен в туннель. Создайте шаблон политики: Src. Address = 0.0.0.0/0 (разрешить подключения с любого адреса), Dst. Address = диапазон VPN-сети (например, 172.16.200.0/24), установите флаг Template и укажите группу. На вкладке Action выберите созданное предложение.
/ip ipsec policy add dst-address=172.16.200.0/24 group=ikev2-policies proposal=IKEv2 src-address=0.0.0.0/0 template=yesПиры (Peers). Настройте прием подключений: установите флаг Passive, Address = 0.0.0.0/0, Profile = созданный профиль, Exchange Mode = IKE2.
/ip ipsec peer add exchange-mode=ike2 name=IKEv2-peer passive=yes profile=IKEv2Настройка Identity и правил брандмауэра
Identity — это ключевая настройка, которая связывает все созданные элементы: пир, сертификат, группу политик и mode-config. Она определяет, как будет проходить аутентификация.
В IP → IPsec → Identities создайте новую запись:
- Peer — выберите созданный пир (IKEv2-peer).
- Auth. Method — digital signature (цифровая подпись).
- Certificate — выберите серверный сертификат.
- Policy Template Group — выберите группу политик.
- Mode Configuration — выберите созданную mode-config.
- Generate Policy — port strict.
Команда для терминала:
/ip ipsec identity add auth-method=digital-signature certificate=vpn.example.com generate-policy=port-strict mode-config=IKEv2-cfg peer=IKEv2-peer policy-template-group=ikev2-policiesПосле настройки IPsec необходимо добавить правила брандмауэра, разрешающие входящие VPN-соединения и доступ к внутренней сети.
Правило 1. Разрешить входящие UDP-пакеты на порты 500 и 4500 (используются IKEv2/IPsec) на внешнем интерфейсе.
/ip firewall filter add action=accept chain=input dst-port=500,4500 in-interface=ether1 protocol=udpПравило 2. Разрешить форвардинг трафика от VPN-клиентов во внутреннюю сеть.
/ip firewall filter add action=accept chain=forward in-interface=ether1 ipsec-policy=in,ipsecОба правила должны быть расположены выше любых запрещающих правил в соответствующих цепочках.
Подключение клиентов: Windows, Android, iOS
После настройки сервера необходимо импортировать клиентский сертификат на устройство и создать VPN-подключение.
Windows. Импортируйте файл PKCS12 в хранилище сертификатов (рекомендуется в раздел "Личное" для текущего пользователя). Затем создайте новое VPN-подключение: Параметры → Сеть и Интернет → VPN → Добавить VPN-подключение. Укажите:
- Поставщик VPN: Windows (встроенный).
- Имя подключения: произвольное.
- Имя или адрес сервера: FQDN или IP, указанный в сертификате.
- Тип VPN: IKEv2.
- Тип данных для входа: Сертификат.
После сохранения подключение можно активировать. Если используется сертификат, пароль вводить не нужно.
Android. Импортируйте PKCS12-файл через настройки безопасности (Параметры → Безопасность → Установить из хранилища). Затем создайте VPN-профиль: Параметры → Сеть → VPN → Добавить. Выберите тип IKEv2/IPsec MSCHAPv2 (или IKEv2/IPsec Certificate, если доступно) и укажите сертификат.
iOS/macOS. Импортируйте сертификат через профиль или AirDrop, затем создайте VPN-подключение в настройках, выбрав IKEv2 и указав сертификат.
Важно: на всех устройствах должен быть установлен корневой сертификат CA, иначе цепочка доверия не будет построена. В PKCS12-файле он уже содержится, поэтому при импорте он установится автоматически.
Альтернатива: IKEv2 с логином и паролем через RADIUS
Настройка сертификатов для каждого клиента может быть трудоемкой, особенно при большом количестве устройств. В RouterOS 7 появилась возможность использовать аутентификацию по логину и паролю для IKEv2, что значительно упрощает процесс.
Для этого потребуется:
- Сертификат для сервера. Можно использовать бесплатный сертификат Let's Encrypt, который RouterOS 7 умеет получать автоматически. Для этого необходимо, чтобы роутер был доступен извне по HTTP (порт 80) и имел FQDN. Команда:
/certificate/enable-ssl-certificate dns-name=gw1.example.com- Встроенный RADIUS-сервер (User Manager). Установите пакет user-manager (скачайте extra packages с сайта MikroTik и установите файл user-manager-7.x.npk). Затем настройте его:
/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- Настройка IPsec с EAP-RADIUS. В identity укажите auth-method=eap-radius и сертификат сервера. Также добавьте RADIUS-клиент:
/radius add address=127.0.0.1 secret=MySuperPass1234 service=ppp,ipsec
/radius incoming set accept=yesПри подключении клиент вводит логин и пароль, а сервер проверяет их через RADIUS. Это удобно для небольших сетей, где не требуется сложная инфраструктура сертификатов.
Типичные ошибки и способы их решения
При настройке IKEv2 VPN с сертификатами часто возникают ошибки, которые можно диагностировать по кодам и сообщениям.
Ошибка IKE с кодом 13801 (Windows). Эта ошибка обычно связана с неправильной установкой промежуточного сертификата Let's Encrypt R3. Убедитесь, что сертификат R3 установлен в хранилище "Промежуточные доверенные центры сертификации" на уровне компьютера (Local Machine), а не пользователя. Скачать его можно с сайта Let's Encrypt.
Не удается подключиться, если сертификат выпущен для FQDN, а клиент подключается по IP. Проверьте, что адрес, указанный в настройках клиента, точно совпадает с Common Name и Subject Alt. Name сертификата.
Проблемы с цепочкой доверия. Если клиент не доверяет серверному сертификату, убедитесь, что корневой сертификат CA установлен на клиентском устройстве. В PKCS12 он включается автоматически, но при использовании отдельных файлов его нужно установить вручную.
Нет доступа к внутренним ресурсам. Проверьте правило firewall для forward-цепочки и настройки split-include в mode-config. Убедитесь, что маршруты до внутренних сетей передаются клиенту.
Соединение устанавливается, но нет интернета. Если требуется полный туннель, убедитесь, что в mode-config не задано split-include, либо добавьте маршрут по умолчанию. В противном случае клиент будет использовать свой интернет-канал.
Вопросы и ответы
Можно ли использовать один сертификат для нескольких клиентов?
Технически можно, но не рекомендуется. Если сертификат скомпрометирован, придется отзывать его и перевыпускать для всех, кто его использовал. Лучше выпускать отдельный сертификат для каждого пользователя или устройства. Это упрощает управление доступом и позволяет точечно отзывать доступ при увольнении сотрудника или утере устройства.
Какой срок действия выбирать для сертификатов?
Для корневого CA можно установить длительный срок, например, 10 лет (3650 дней). Для серверного сертификата также допустимо 10 лет, но лучше обновлять его чаще. Клиентские сертификаты рекомендуется выпускать на 1 год (365 дней). Это снижает риски при компрометации ключей и упрощает ротацию.
Что делать, если изменился IP-адрес VPN-сервера?
Если сертификат выпущен на IP-адрес, его придется перевыпустить и обновить на всех клиентах. Чтобы избежать этой проблемы, используйте доменное имя (FQDN) и динамический DNS. Тогда при изменении IP достаточно обновить DNS-запись, и сертификат останется действительным.
В чем отличие IKEv2 от L2TP/IPsec и OpenVPN?
IKEv2 — современный протокол на базе IPsec, поддерживается всеми ОС без дополнительного ПО, устойчив к разрывам соединения (например, при смене сети). L2TP/IPsec также встроен в ОС, но медленнее и менее стабилен. OpenVPN требует установки клиента, но обеспечивает высокую гибкость настройки. IKEv2 часто выбирают за скорость и простоту настройки клиентов.
Можно ли использовать сертификаты от Let's Encrypt для IKEv2?
Да, в RouterOS 7 есть встроенная поддержка Let's Encrypt. Это удобно, так как не нужно создавать собственный CA. Однако для аутентификации клиентов все равно потребуется либо сертификаты, либо логин/пароль через RADIUS. Сертификат Let's Encrypt используется для проверки подлинности сервера.
Как отозвать доступ конкретному пользователю?
Если используется сертификатная аутентификация, можно отозвать сертификат в RouterOS. Для этого в меню System → Certificates выберите сертификат и нажмите Revoke. После этого клиент с этим сертификатом не сможет подключиться. Если используется RADIUS, достаточно удалить или заблокировать пользователя в User Manager.