mikrotik-wiki.ru
Главная
Загрузка...

IKEv2 VPN-сервер на MikroTik с сертификатами

RouterOS 7.xVPN12 мин330 мар. 2026 г.
TelegramVK

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 — лучший выбор среди встроенных протоколов:

КритерийIKEv2L2TP/IPsecSSTPWireGuardOpenVPN
Встроен в iOS/macOSДаДаНетНет*Нет
Встроен в WindowsДаДаДаНетНет
Встроен в AndroidНет**ДаНетНет*Нет
MOBIKE (roaming)ДаНетНетДаНет
Скорость установкиБыстрая (4 msg)МедленнаяСредняяБыстраяСредняя
Устойчивость к NATОтличнаяПлохаяХорошаяОтличнаяХорошая
ПроизводительностьВысокаяСредняяСредняяВысокаяНизкая (TCP)
Сложность настройкиВысокаяСредняяСредняяНизкаяСредняя

* WireGuard есть в свежих версиях iOS/Android, но не как системный VPN ** Android поддерживает IKEv2 через strongSwan (бесплатное приложение)

Преимущества IKEv2 перед IKEv1

ХарактеристикаIKEv1IKEv2
Количество сообщений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 с сертификатами требует три компонента:

  1. CA-сертификат — корневой центр сертификации
  2. Серверный сертификат — для MikroTik (с правильными SAN)
  3. Клиентские сертификаты — по одному на каждого пользователя

Создание корневого 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-algorithmsha256Алгоритм хеширования для IKE
enc-algorithmaes-256Шифрование IKE SA
dh-groupmodp2048Группа Диффи-Хеллмана (2048 бит минимум)
lifetime8hВремя жизни IKE SA
dpd-interval30sИнтервал проверки «живости» peer
nat-traversalyesПоддержка 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-methoddigital-signatureАутентификация по сертификатам
certificatevpn-serverСерверный сертификат
remote-certificatenoneПринимать любой клиентский сертификат, подписанный нашим CA
generate-policyport-strictАвтоматически создавать политики для клиентов
mode-configikev2-cfgКонфигурация для выдачи IP
match-bycertificateИдентификация по сертификату
remote-idignoreНе проверять 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:

  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:

powershell
Add-VpnConnection -Name "Office VPN" `
  -ServerAddress "vpn.example.com" `
  -TunnelType IKEv2 `
  -AuthenticationMethod MachineCertificate `
  -EncryptionLevel Required

Настройка криптографических параметров:

powershell
Set-VpnConnectionIPsecConfiguration -ConnectionName "Office VPN" `
  -AuthenticationTransformConstants SHA256128 `
  -CipherTransformConstants AES256 `
  -DHGroup Group14 `
  -IntegrityCheckMethod SHA256 `
  -PfsGroup PFS2048 `
  -EncryptionMethod AES256 `
  -Force

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

Проверка

Проверка серверных компонентов

[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:

ПолеОписание
stateestablished — соединение установлено
remote-addressРеальный IP клиента
dynamic-addressIP, выданный через Mode Config
uptimeВремя подключения
sideresponder — 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 и мобильной сетью.

[admin@MikroTik] >
Клиент (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`, или пул адресов слишком мал.

**Решение:**
VPN / IKEv2 VPN-сервер на MikroTik с сертификатами