IKEv2 VPN-сервер на MikroTik с сертификатами
IKEv2 (Internet Key Exchange version 2) — это современный VPN-протокол, который поддерживается «из коробки» в iOS, iPadOS, macOS, Windows 10/11 и Android (через strongSwan). В отличие от L2TP/IPsec, IKEv2 поддерживает MOBIKE (бесшовное переключение между Wi-Fi и мобильной сетью), быстрее устанавливает соединение и более устойчив к сетевым проблемам. В этом руководстве настроим полноценный IKEv2 VPN-сервер на MikroTik RouterOS 7.20+ с аутентификацией по сертификатам, автоматическим назначением IP-адресов через Mode Config, разберём подключение клиентов на всех основных платформах и рассмотрим типичные ошибки.
Описание
Почему IKEv2
Для Remote Access VPN (подключение удалённых сотрудников) IKEv2 — лучший выбор среди встроенных протоколов:
| Критерий | IKEv2 | L2TP/IPsec | SSTP | WireGuard | OpenVPN |
|---|---|---|---|---|---|
| Встроен в iOS/macOS | Да | Да | Нет | Нет* | Нет |
| Встроен в Windows | Да | Да | Да | Нет | Нет |
| Встроен в Android | Нет** | Да | Нет | Нет* | Нет |
| MOBIKE (roaming) | Да | Нет | Нет | Да | Нет |
| Скорость установки | Быстрая (4 msg) | Медленная | Средняя | Быстрая | Средняя |
| Устойчивость к NAT | Отличная | Плохая | Хорошая | Отличная | Хорошая |
| Производительность | Высокая | Средняя | Средняя | Высокая | Низкая (TCP) |
| Сложность настройки | Высокая | Средняя | Средняя | Низкая | Средняя |
* WireGuard есть в свежих версиях iOS/Android, но не как системный VPN ** Android поддерживает IKEv2 через strongSwan (бесплатное приложение)
Преимущества IKEv2 перед IKEv1
| Характеристика | IKEv1 | IKEv2 |
|---|---|---|
| Количество сообщений | 6-9 (Main + Quick Mode) | 4 (IKE_SA_INIT + IKE_AUTH) |
| MOBIKE | Нет | Да — VPN не разрывается при смене IP |
| NAT-T | Опциональное расширение | Обязательная часть стандарта |
| EAP | Нет | Да — поддержка сертификатов + пароли |
| Dead Peer Detection | Отдельный механизм | Встроен в протокол |
| Устойчивость к DoS | Низкая | Cookie challenge |
| Config Mode | Ограниченный | Полноценный (IP, DNS, маршруты) |
Архитектура решения
codeКлиент (iOS/Windows/macOS) │ │ UDP 500 / UDP 4500 (NAT-T) │ ▼ MikroTik IKEv2 Responder ──── /ip/ipsec/peer │ ├── Certificate Authentication ── /certificate │ ├── Mode Config ── /ip/ipsec/mode-config │ (выдаёт IP, DNS клиенту) │ ├── Policy Template ── /ip/ipsec/policy │ (определяет шифруемый трафик) │ └── Firewall ── /ip/firewall (разрешает UDP 500, 4500, IPsec)
Настройка
Шаг 1: Создание PKI (Certificate Authority и сертификаты)
IKEv2 с сертификатами требует три компонента:
- CA-сертификат — корневой центр сертификации
- Серверный сертификат — для MikroTik (с правильными SAN)
- Клиентские сертификаты — по одному на каждого пользователя
Создание корневого CA
[admin@MikroTik] >/certificate/add name=ca-ikev2 common-name="IKEv2 VPN CA" \ key-size=4096 days-valid=3650 \ key-usage=key-cert-sign,crl-sign /certificate/sign ca-ikev2
Дождитесь завершения подписания (несколько секунд для 4096-битного ключа):
[admin@MikroTik] >/certificate/print where name=ca-ikev2
Убедитесь, что authority=yes и статус не содержит ошибок. Установите доверие:
[admin@MikroTik] >/certificate/set ca-ikev2 trusted=yes
Создание серверного сертификата
Критически важно: поле subject-alt-name (SAN) должно содержать адрес, по которому клиенты подключаются к VPN-серверу. iOS и macOS проверяют SAN строже, чем CN.
Если клиенты подключаются по доменному имени:
[admin@MikroTik] >/certificate/add name=vpn-server common-name="vpn.example.com" \ subject-alt-name=DNS:vpn.example.com \ key-size=2048 days-valid=1825 \ key-usage=digital-signature,key-encipherment,tls-server /certificate/sign vpn-server ca=ca-ikev2
Если клиенты подключаются по IP-адресу:
[admin@MikroTik] >/certificate/add name=vpn-server common-name="203.0.113.1" \ subject-alt-name=IP:203.0.113.1 \ key-size=2048 days-valid=1825 \ key-usage=digital-signature,key-encipherment,tls-server /certificate/sign vpn-server ca=ca-ikev2
Создание клиентских сертификатов
Для каждого пользователя:
[admin@MikroTik] ># Сертификат для пользователя "Иванов" /certificate/add name=client-ivanov common-name="ivanov@example.com" \ key-size=2048 days-valid=365 \ key-usage=tls-client /certificate/sign client-ivanov ca=ca-ikev2 # Сертификат для пользователя "Петров" /certificate/add name=client-petrov common-name="petrov@example.com" \ key-size=2048 days-valid=365 \ key-usage=tls-client /certificate/sign client-petrov ca=ca-ikev2
Экспорт сертификатов для клиентов
Клиенту нужны: CA-сертификат (для проверки сервера) и свой клиентский сертификат с ключом (для аутентификации).
[admin@MikroTik] ># Экспорт CA (без ключа — только публичный сертификат) /certificate/export-certificate ca-ikev2 file-name=ca-ikev2 type=pem # Экспорт клиентского сертификата с ключом (PKCS12) /certificate/export-certificate client-ivanov \ file-name=client-ivanov type=pkcs12 \ export-passphrase="ExportPass123!"
Файлы ca-ikev2.crt и client-ivanov.p12 скачайте через WebFig → Files и передайте клиенту.
Шаг 2: Настройка IPsec Profile (Phase 1)
Profile определяет параметры IKE-согласования:
[admin@MikroTik] >/ip/ipsec/profile/add name=ikev2-profile \ hash-algorithm=sha256 \ enc-algorithm=aes-256 \ dh-group=modp2048,modp1024 \ lifetime=8h \ dpd-interval=30s \ dpd-maximum-failures=5 \ nat-traversal=yes
Параметры:
| Параметр | Значение | Описание |
|---|---|---|
hash-algorithm | sha256 | Алгоритм хеширования для IKE |
enc-algorithm | aes-256 | Шифрование IKE SA |
dh-group | modp2048 | Группа Диффи-Хеллмана (2048 бит минимум) |
lifetime | 8h | Время жизни IKE SA |
dpd-interval | 30s | Интервал проверки «живости» peer |
nat-traversal | yes | Поддержка NAT-T (UDP 4500) |
Шаг 3: Настройка IPsec Proposal (Phase 2)
Proposal определяет параметры шифрования данных:
[admin@MikroTik] >/ip/ipsec/proposal/add name=ikev2-proposal \ auth-algorithms=sha256 \ enc-algorithms=aes-256-cbc \ lifetime=1h \ pfs-group=modp2048
Шаг 4: Настройка Mode Config
Mode Config выдаёт клиентам IP-адрес, DNS-серверы и маршруты:
[admin@MikroTik] ># Пул адресов для VPN-клиентов /ip/pool/add name=ikev2-pool ranges=10.10.10.2-10.10.10.254 # Mode Config /ip/ipsec/mode-config/add name=ikev2-cfg \ address-pool=ikev2-pool \ address-prefix-length=32 \ split-include=0.0.0.0/0 \ system-dns=yes \ static-dns=8.8.8.8
Параметры Mode Config:
| Параметр | Описание |
|---|---|
address-pool | Пул IP-адресов для клиентов |
address-prefix-length | Длина маски (32 = point-to-point) |
split-include | Маршруты, передаваемые клиенту. 0.0.0.0/0 = весь трафик через VPN (full tunnel) |
system-dns | Использовать DNS-серверы маршрутизатора |
static-dns | Дополнительные DNS-серверы |
Full tunnel vs Split tunnel
Full tunnel — весь трафик клиента идёт через VPN:
[admin@MikroTik] >/ip/ipsec/mode-config/set ikev2-cfg split-include=0.0.0.0/0
Split tunnel — через VPN идёт только трафик в указанные сети:
[admin@MikroTik] >/ip/ipsec/mode-config/set ikev2-cfg \ split-include=192.168.88.0/24,10.0.0.0/8
Split tunnel экономит полосу пропускания VPN-сервера, но трафик клиента в интернет идёт без шифрования.
Шаг 5: Настройка Peer
Peer определяет, кто может подключаться:
[admin@MikroTik] >/ip/ipsec/peer/add name=ikev2-peer \ address=0.0.0.0/0 \ exchange-mode=ike2 \ profile=ikev2-profile \ send-initial-contact=yes \ passive=yes
address=0.0.0.0/0 — принимаем подключения с любого IP.
passive=yes — MikroTik работает как responder (сервер), не инициирует подключения.
Шаг 6: Настройка Identity
Identity определяет метод аутентификации:
[admin@MikroTik] >/ip/ipsec/identity/add peer=ikev2-peer \ auth-method=digital-signature \ certificate=vpn-server \ remote-certificate=none \ generate-policy=port-strict \ mode-config=ikev2-cfg \ policy-template-group=ikev2 \ match-by=certificate \ remote-id=ignore
Параметры:
| Параметр | Значение | Описание |
|---|---|---|
auth-method | digital-signature | Аутентификация по сертификатам |
certificate | vpn-server | Серверный сертификат |
remote-certificate | none | Принимать любой клиентский сертификат, подписанный нашим CA |
generate-policy | port-strict | Автоматически создавать политики для клиентов |
mode-config | ikev2-cfg | Конфигурация для выдачи IP |
match-by | certificate | Идентификация по сертификату |
remote-id | ignore | Не проверять remote ID (удобнее для мобильных клиентов) |
Шаг 7: Настройка Policy Template
[admin@MikroTik] >/ip/ipsec/policy/group/add name=ikev2 /ip/ipsec/policy/add group=ikev2 \ src-address=0.0.0.0/0 dst-address=0.0.0.0/0 \ template=yes proposal=ikev2-proposal
Шаг 8: Настройка Firewall
Разрешаем необходимый трафик:
[admin@MikroTik] ># IKE (UDP 500) /ip/firewall/filter/add chain=input protocol=udp dst-port=500 action=accept \ comment="Allow IKE" place-before=0 # NAT-T (UDP 4500) /ip/firewall/filter/add chain=input protocol=udp dst-port=4500 action=accept \ comment="Allow NAT-T" place-before=0 # IPsec ESP /ip/firewall/filter/add chain=input protocol=ipsec-esp action=accept \ comment="Allow IPsec ESP" place-before=0 # Разрешаем трафик от VPN-клиентов /ip/firewall/filter/add chain=forward src-address=10.10.10.0/24 action=accept \ comment="Allow VPN clients forward" place-before=0 # NAT для VPN-клиентов (если нужен доступ в интернет) /ip/firewall/nat/add chain=srcnat src-address=10.10.10.0/24 \ out-interface-list=WAN action=masquerade \ comment="NAT for VPN clients"
Шаг 9: IP-адрес для VPN-подсети
Назначим IP-адрес маршрутизатору в VPN-подсети:
[admin@MikroTik] >/ip/address/add address=10.10.10.1/24 interface=lo comment="IKEv2 VPN gateway"
Настройка клиентов
iOS / iPadOS / macOS
Самый надёжный способ — профиль .mobileconfig. Создайте XML-файл:
xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <!-- CA Certificate --> <dict> <key>PayloadType</key> <string>com.apple.security.root</string> <key>PayloadIdentifier</key> <string>com.example.vpn.ca</string> <key>PayloadUUID</key> <string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string> <key>PayloadVersion</key> <integer>1</integer> <key>PayloadContent</key> <data> <!-- Вставьте base64-содержимое ca-ikev2.crt --> </data> </dict> <!-- Client Certificate --> <dict> <key>PayloadType</key> <string>com.apple.security.pkcs12</string> <key>PayloadIdentifier</key> <string>com.example.vpn.client</string> <key>PayloadUUID</key> <string>B2C3D4E5-F6A7-8901-BCDE-F12345678901</string> <key>PayloadVersion</key> <integer>1</integer> <key>PayloadContent</key> <data> <!-- Вставьте base64-содержимое client-ivanov.p12 --> </data> <key>Password</key> <string>ExportPass123!</string> </dict> <!-- VPN Configuration --> <dict> <key>PayloadType</key> <string>com.apple.vpn.managed</string> <key>PayloadIdentifier</key> <string>com.example.vpn.config</string> <key>PayloadUUID</key> <string>C3D4E5F6-A7B8-9012-CDEF-123456789012</string> <key>PayloadVersion</key> <integer>1</integer> <key>UserDefinedName</key> <string>Office VPN</string> <key>VPNType</key> <string>IKEv2</string> <key>IKEv2</key> <dict> <key>RemoteAddress</key> <string>vpn.example.com</string> <key>RemoteIdentifier</key> <string>vpn.example.com</string> <key>LocalIdentifier</key> <string>ivanov@example.com</string> <key>AuthenticationMethod</key> <string>Certificate</string> <key>PayloadCertificateUUID</key> <string>B2C3D4E5-F6A7-8901-BCDE-F12345678901</string> <key>CertificateType</key> <string>RSA</string> <key>EnablePFS</key> <true/> <key>IKESecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>DiffieHellmanGroup</key> <integer>14</integer> </dict> <key>ChildSecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>DiffieHellmanGroup</key> <integer>14</integer> </dict> </dict> </dict> </array> <key>PayloadDisplayName</key> <string>Office VPN Profile</string> <key>PayloadIdentifier</key> <string>com.example.vpn</string> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>D4E5F6A7-B8C9-0123-DEFA-234567890123</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
Отправьте файл .mobileconfig пользователю — он установится через стандартный интерфейс iOS/macOS (Настройки → Профиль загружен → Установить).
Ручная настройка на iOS:
- Установите CA-сертификат (
ca-ikev2.crt) и клиентский сертификат (client-ivanov.p12) - Настройки → VPN → Добавить конфигурацию VPN
- Тип: IKEv2
- Сервер:
vpn.example.com - Remote ID:
vpn.example.com - Local ID:
ivanov@example.com - Аутентификация: Сертификат
- Выберите установленный клиентский сертификат
Windows 10/11
-
Установите CA-сертификат (
ca-ikev2.crt):- Двойной клик → Установить сертификат → Локальный компьютер → Доверенные корневые центры сертификации
-
Установите клиентский сертификат (
client-ivanov.p12):- Двойной клик → ввести пароль → Локальный компьютер → Личное
-
Создайте VPN-подключение:
- Параметры → Сеть и интернет → VPN → Добавить VPN-подключение
- Поставщик: Windows (встроенные)
- Имя подключения: Office VPN
- Адрес сервера:
vpn.example.com - Тип VPN: IKEv2
- Тип данных для входа: Сертификат
Или через PowerShell:
powershellAdd-VpnConnection -Name "Office VPN" ` -ServerAddress "vpn.example.com" ` -TunnelType IKEv2 ` -AuthenticationMethod MachineCertificate ` -EncryptionLevel Required
Настройка криптографических параметров:
powershellSet-VpnConnectionIPsecConfiguration -ConnectionName "Office VPN" ` -AuthenticationTransformConstants SHA256128 ` -CipherTransformConstants AES256 ` -DHGroup Group14 ` -IntegrityCheckMethod SHA256 ` -PfsGroup PFS2048 ` -EncryptionMethod AES256 ` -Force
Android (strongSwan)
- Установите strongSwan из Google Play
- Импортируйте CA-сертификат и клиентский сертификат (.p12) в систему
- В strongSwan → Add VPN Profile:
- Server:
vpn.example.com - VPN Type: IKEv2 Certificate
- User certificate: выберите импортированный
- CA certificate: Select automatically
- Server:
Проверка
Проверка серверных компонентов
[admin@MikroTik] ># Сертификаты /certificate/print # Должны быть: ca-ikev2 (KAT), vpn-server (KT), client-* (KT) # Профиль /ip/ipsec/profile/print where name=ikev2-profile # Proposal /ip/ipsec/proposal/print where name=ikev2-proposal # Peer /ip/ipsec/peer/print # Identity /ip/ipsec/identity/print # Mode Config /ip/ipsec/mode-config/print # Policy templates /ip/ipsec/policy/print where template=yes
Мониторинг активных подключений
[admin@MikroTik] ># Активные IKE SA (Phase 1) /ip/ipsec/active-peers/print # Активные IPsec SA (Phase 2) /ip/ipsec/installed-sa/print # Динамически созданные политики /ip/ipsec/policy/print where dynamic=yes # Выданные IP-адреса (Mode Config) /ip/ipsec/active-peers/print detail
Ключевые поля в active-peers:
| Поле | Описание |
|---|---|
state | established — соединение установлено |
remote-address | Реальный IP клиента |
dynamic-address | IP, выданный через Mode Config |
uptime | Время подключения |
side | responder — MikroTik как сервер |
Включение расширенного логирования
[admin@MikroTik] >/system/logging/add topics=ipsec,debug action=memory /system/logging/add topics=ipsec,error action=memory # Просмотр логов /log/print where topics~"ipsec"
Тестирование доступности ресурсов через VPN
С клиента после подключения:
[admin@MikroTik] ># Проверка IP (должен быть из пула 10.10.10.x) curl ifconfig.me # Ping шлюза VPN ping 10.10.10.1 # Ping ресурсов за MikroTik ping 192.168.88.1
Типичные ошибки
Ошибка: Certificate mismatch (несовпадение сертификата)
Симптомы: Клиент не подключается, в логах MikroTik — phase1 negotiation failed due to time up, на клиенте — Server identity verification failed или The server certificate is not valid.
Причина: SAN (Subject Alternative Name) серверного сертификата не совпадает с адресом, указанным в настройках клиента.
Решение:
[admin@MikroTik] ># Проверяем SAN сертификата /certificate/print detail where name=vpn-server # Поле subject-alt-name должно содержать DNS:vpn.example.com или IP:203.0.113.1
Если SAN неправильный — пересоздайте сертификат:
[admin@MikroTik] >/certificate/remove vpn-server /certificate/add name=vpn-server common-name="vpn.example.com" \ subject-alt-name=DNS:vpn.example.com \ key-size=2048 days-valid=1825 \ key-usage=digital-signature,key-encipherment,tls-server /certificate/sign vpn-server ca=ca-ikev2
iOS/macOS особенно строги: Remote ID в настройках VPN клиента должен точно совпадать с SAN сертификата.
Ошибка: NAT-T проблемы
Симптомы: VPN подключается из одних сетей, но не из других. Часто не работает из-за мобильного интернета или гостевого Wi-Fi.
Причина: Промежуточный NAT блокирует или модифицирует пакеты IPsec. NAT-T (инкапсуляция в UDP 4500) не работает.
Решение:
[admin@MikroTik] ># Убедитесь, что NAT-T включён в профиле /ip/ipsec/profile/print where name=ikev2-profile # nat-traversal должен быть yes # Проверьте firewall — UDP 4500 должен быть разрешён /ip/firewall/filter/print where dst-port=4500 # Добавьте, если нет /ip/firewall/filter/add chain=input protocol=udp dst-port=4500 action=accept \ comment="Allow NAT-T" place-before=0
Если MikroTik находится за NAT (например, за маршрутизатором провайдера), необходим проброс портов UDP 500 и UDP 4500.
Ошибка: MTU/MSS проблемы
Симптомы: VPN подключается, ping работает, но веб-страницы не открываются или загружаются очень медленно. Крупные файлы не скачиваются.
Причина: Из-за инкапсуляции IPsec эффективный MTU снижается. Если пакеты превышают MTU и фрагментация запрещена (DF bit), они отбрасываются.
Решение:
[admin@MikroTik] ># Клэмпинг MSS для трафика VPN-клиентов /ip/firewall/mangle/add chain=forward protocol=tcp \ src-address=10.10.10.0/24 tcp-flags=syn \ action=change-mss new-mss=1360 \ comment="MSS clamp for IKEv2 VPN" /ip/firewall/mangle/add chain=forward protocol=tcp \ dst-address=10.10.10.0/24 tcp-flags=syn \ action=change-mss new-mss=1360 \ comment="MSS clamp for IKEv2 VPN"
MSS 1360 — безопасное значение для большинства сценариев. Если проблемы сохраняются, попробуйте 1280.
Ошибка: клиент подключается, но нет доступа к сети
Симптомы: VPN-подключение успешно, клиент получает IP из пула, но не может достучаться до ресурсов за MikroTik.
Причина: Отсутствуют правила firewall для forward трафика VPN-клиентов, или нет NAT/маршрутов.
Решение:
[admin@MikroTik] ># Проверяем forward правила /ip/firewall/filter/print where chain=forward # Добавляем разрешение /ip/firewall/filter/add chain=forward src-address=10.10.10.0/24 action=accept \ comment="Allow VPN clients" place-before=0 # Для доступа VPN-клиентов в интернет — NAT /ip/firewall/nat/add chain=srcnat src-address=10.10.10.0/24 \ out-interface-list=WAN action=masquerade # Для доступа VPN-клиентов в LAN — маршрут может быть не нужен # (трафик уже на MikroTik), но проверьте, что LAN-устройства знают # маршрут обратно в 10.10.10.0/24
Ошибка: proposal mismatch (несовпадение параметров шифрования)
Симптомы: В логах — no proposal chosen или no matching proposal found.
Причина: Параметры шифрования на сервере и клиенте не совпадают.
Решение:
[admin@MikroTik] ># Включите расширенное логирование /system/logging/add topics=ipsec,debug action=memory # Подключитесь клиентом и проверьте лог /log/print where topics~"ipsec" # Ищите строки с "proposal" — они покажут, что предлагает клиент и что принимает сервер
Добавьте поддержку дополнительных алгоритмов:
[admin@MikroTik] >/ip/ipsec/profile/set ikev2-profile \ enc-algorithm=aes-256,aes-128 \ hash-algorithm=sha256,sha1 \ dh-group=modp2048,modp1024,ecp256 /ip/ipsec/proposal/set ikev2-proposal \ enc-algorithms=aes-256-cbc,aes-128-cbc,aes-256-gcm \ auth-algorithms=sha256,sha1 \ pfs-group=modp2048,modp1024,ecp256
Ошибка: только один клиент может подключиться
Симптомы: Первый клиент подключается успешно, но второй получает ошибку.
Причина: Peer настроен с конкретным IP вместо 0.0.0.0/0, или пул адресов слишком мал.
Решение:
[admin@MikroTik] ># Проверяем peer /ip/ipsec/peer/print # address должен быть 0.0.0.0/0 для приёма с любого IP # Проверяем пул /ip/pool/print where name=ikev2-pool # ranges должен быть достаточно большим # Проверяем Mode Config /ip/ipsec/mode-config/print # address-pool должен быть назначен
Правильно настроенный IKEv2 VPN-сервер обеспечивает безопасный удалённый доступ для сотрудников с любых устройств без установки дополнительного ПО (кроме Android). Аутентификация по сертификатам исключает brute-force атаки, а MOBIKE гарантирует стабильное подключение при переключении между Wi-Fi и мобильной сетью.
Клиент (iOS/Windows/macOS)
│
│ UDP 500 / UDP 4500 (NAT-T)
│
▼
MikroTik IKEv2 Responder ──── /ip/ipsec/peer
│
├── Certificate Authentication ── /certificate
│
├── Mode Config ── /ip/ipsec/mode-config
│ (выдаёт IP, DNS клиенту)
│
├── Policy Template ── /ip/ipsec/policy
│ (определяет шифруемый трафик)
│
└── Firewall ── /ip/firewall
(разрешает UDP 500, 4500, IPsec)
/certificate/add name=ca-ikev2 common-name="IKEv2 VPN CA" \
key-size=4096 days-valid=3650 \
key-usage=key-cert-sign,crl-sign
/certificate/sign ca-ikev2
/certificate/print where name=ca-ikev2
/certificate/set ca-ikev2 trusted=yes
/certificate/add name=vpn-server common-name="vpn.example.com" \
subject-alt-name=DNS:vpn.example.com \
key-size=2048 days-valid=1825 \
key-usage=digital-signature,key-encipherment,tls-server
/certificate/sign vpn-server ca=ca-ikev2
/certificate/add name=vpn-server common-name="203.0.113.1" \
subject-alt-name=IP:203.0.113.1 \
key-size=2048 days-valid=1825 \
key-usage=digital-signature,key-encipherment,tls-server
/certificate/sign vpn-server ca=ca-ikev2
# Сертификат для пользователя "Иванов"
/certificate/add name=client-ivanov common-name="ivanov@example.com" \
key-size=2048 days-valid=365 \
key-usage=tls-client
/certificate/sign client-ivanov ca=ca-ikev2
# Сертификат для пользователя "Петров"
/certificate/add name=client-petrov common-name="petrov@example.com" \
key-size=2048 days-valid=365 \
key-usage=tls-client
/certificate/sign client-petrov ca=ca-ikev2
# Экспорт CA (без ключа — только публичный сертификат)
/certificate/export-certificate ca-ikev2 file-name=ca-ikev2 type=pem
# Экспорт клиентского сертификата с ключом (PKCS12)
/certificate/export-certificate client-ivanov \
file-name=client-ivanov type=pkcs12 \
export-passphrase="ExportPass123!"
/ip/ipsec/profile/add name=ikev2-profile \
hash-algorithm=sha256 \
enc-algorithm=aes-256 \
dh-group=modp2048,modp1024 \
lifetime=8h \
dpd-interval=30s \
dpd-maximum-failures=5 \
nat-traversal=yes
/ip/ipsec/proposal/add name=ikev2-proposal \
auth-algorithms=sha256 \
enc-algorithms=aes-256-cbc \
lifetime=1h \
pfs-group=modp2048
# Пул адресов для VPN-клиентов
/ip/pool/add name=ikev2-pool ranges=10.10.10.2-10.10.10.254
# Mode Config
/ip/ipsec/mode-config/add name=ikev2-cfg \
address-pool=ikev2-pool \
address-prefix-length=32 \
split-include=0.0.0.0/0 \
system-dns=yes \
static-dns=8.8.8.8
/ip/ipsec/mode-config/set ikev2-cfg split-include=0.0.0.0/0
/ip/ipsec/mode-config/set ikev2-cfg \
split-include=192.168.88.0/24,10.0.0.0/8
/ip/ipsec/peer/add name=ikev2-peer \
address=0.0.0.0/0 \
exchange-mode=ike2 \
profile=ikev2-profile \
send-initial-contact=yes \
passive=yes
/ip/ipsec/identity/add peer=ikev2-peer \
auth-method=digital-signature \
certificate=vpn-server \
remote-certificate=none \
generate-policy=port-strict \
mode-config=ikev2-cfg \
policy-template-group=ikev2 \
match-by=certificate \
remote-id=ignore
/ip/ipsec/policy/group/add name=ikev2
/ip/ipsec/policy/add group=ikev2 \
src-address=0.0.0.0/0 dst-address=0.0.0.0/0 \
template=yes proposal=ikev2-proposal
# IKE (UDP 500)
/ip/firewall/filter/add chain=input protocol=udp dst-port=500 action=accept \
comment="Allow IKE" place-before=0
# NAT-T (UDP 4500)
/ip/firewall/filter/add chain=input protocol=udp dst-port=4500 action=accept \
comment="Allow NAT-T" place-before=0
# IPsec ESP
/ip/firewall/filter/add chain=input protocol=ipsec-esp action=accept \
comment="Allow IPsec ESP" place-before=0
# Разрешаем трафик от VPN-клиентов
/ip/firewall/filter/add chain=forward src-address=10.10.10.0/24 action=accept \
comment="Allow VPN clients forward" place-before=0
# NAT для VPN-клиентов (если нужен доступ в интернет)
/ip/firewall/nat/add chain=srcnat src-address=10.10.10.0/24 \
out-interface-list=WAN action=masquerade \
comment="NAT for VPN clients"
/ip/address/add address=10.10.10.1/24 interface=lo comment="IKEv2 VPN gateway"
Отправьте файл `.mobileconfig` пользователю — он установится через стандартный интерфейс iOS/macOS (Настройки → Профиль загружен → Установить).
**Ручная настройка на iOS:**
1. Установите CA-сертификат (`ca-ikev2.crt`) и клиентский сертификат (`client-ivanov.p12`)
2. Настройки → VPN → Добавить конфигурацию VPN
3. Тип: IKEv2
4. Сервер: `vpn.example.com`
5. Remote ID: `vpn.example.com`
6. Local ID: `ivanov@example.com`
7. Аутентификация: Сертификат
8. Выберите установленный клиентский сертификат
##### Windows 10/11
1. Установите CA-сертификат (`ca-ikev2.crt`):
- Двойной клик → Установить сертификат → Локальный компьютер → Доверенные корневые центры сертификации
2. Установите клиентский сертификат (`client-ivanov.p12`):
- Двойной клик → ввести пароль → Локальный компьютер → Личное
3. Создайте VPN-подключение:
- Параметры → Сеть и интернет → VPN → Добавить VPN-подключение
- Поставщик: Windows (встроенные)
- Имя подключения: Office VPN
- Адрес сервера: `vpn.example.com`
- Тип VPN: IKEv2
- Тип данных для входа: Сертификат
Или через PowerShell:
Настройка криптографических параметров:
##### Android (strongSwan)
1. Установите strongSwan из Google Play
2. Импортируйте CA-сертификат и клиентский сертификат (.p12) в систему
3. В strongSwan → Add VPN Profile:
- Server: `vpn.example.com`
- VPN Type: IKEv2 Certificate
- User certificate: выберите импортированный
- CA certificate: Select automatically
### Проверка
#### Проверка серверных компонентов
#### Мониторинг активных подключений
Ключевые поля в `active-peers`:
| Поле | Описание |
|---|---|
| `state` | `established` — соединение установлено |
| `remote-address` | Реальный IP клиента |
| `dynamic-address` | IP, выданный через Mode Config |
| `uptime` | Время подключения |
| `side` | `responder` — MikroTik как сервер |
#### Включение расширенного логирования
#### Тестирование доступности ресурсов через VPN
С клиента после подключения:
### Типичные ошибки
#### Ошибка: Certificate mismatch (несовпадение сертификата)
**Симптомы:** Клиент не подключается, в логах MikroTik — `phase1 negotiation failed due to time up`, на клиенте — `Server identity verification failed` или `The server certificate is not valid`.
**Причина:** SAN (Subject Alternative Name) серверного сертификата не совпадает с адресом, указанным в настройках клиента.
**Решение:**
Если SAN неправильный — пересоздайте сертификат:
**iOS/macOS особенно строги**: Remote ID в настройках VPN клиента должен точно совпадать с SAN сертификата.
#### Ошибка: NAT-T проблемы
**Симптомы:** VPN подключается из одних сетей, но не из других. Часто не работает из-за мобильного интернета или гостевого Wi-Fi.
**Причина:** Промежуточный NAT блокирует или модифицирует пакеты IPsec. NAT-T (инкапсуляция в UDP 4500) не работает.
**Решение:**
Если MikroTik находится за NAT (например, за маршрутизатором провайдера), необходим проброс портов UDP 500 и UDP 4500.
#### Ошибка: MTU/MSS проблемы
**Симптомы:** VPN подключается, ping работает, но веб-страницы не открываются или загружаются очень медленно. Крупные файлы не скачиваются.
**Причина:** Из-за инкапсуляции IPsec эффективный MTU снижается. Если пакеты превышают MTU и фрагментация запрещена (DF bit), они отбрасываются.
**Решение:**
MSS 1360 — безопасное значение для большинства сценариев. Если проблемы сохраняются, попробуйте 1280.
#### Ошибка: клиент подключается, но нет доступа к сети
**Симптомы:** VPN-подключение успешно, клиент получает IP из пула, но не может достучаться до ресурсов за MikroTik.
**Причина:** Отсутствуют правила firewall для forward трафика VPN-клиентов, или нет NAT/маршрутов.
**Решение:**
#### Ошибка: proposal mismatch (несовпадение параметров шифрования)
**Симптомы:** В логах — `no proposal chosen` или `no matching proposal found`.
**Причина:** Параметры шифрования на сервере и клиенте не совпадают.
**Решение:**
Добавьте поддержку дополнительных алгоритмов:
#### Ошибка: только один клиент может подключиться
**Симптомы:** Первый клиент подключается успешно, но второй получает ошибку.
**Причина:** Peer настроен с конкретным IP вместо `0.0.0.0/0`, или пул адресов слишком мал.
**Решение:**