L2TP/IPsec VPN на MikroTik — настройка сервера и клиентов
L2TP/IPsec — один из самых распространённых VPN-протоколов, поддерживаемый «из коробки» в Windows, macOS, iOS и Android. В отличие от WireGuard, для подключения не нужно устанавливать дополнительное ПО — встроенный VPN-клиент операционной системы справляется с задачей. В этом руководстве мы настроим L2TP/IPsec сервер на MikroTik RouterOS 7.20+, создадим пользователей, откроем нужные порты в firewall и подключим клиентов на Windows 10/11, macOS и iOS. Также рассмотрим site-to-site вариант и разберём типичные ошибки.
Описание
Когда L2TP/IPsec лучше WireGuard
WireGuard — современный, быстрый и простой протокол, но у L2TP/IPsec есть свои преимущества:
| Критерий | L2TP/IPsec | WireGuard |
|---|---|---|
| Встроенный клиент Windows | Да (с XP) | Нет (нужна установка) |
| Встроенный клиент macOS | Да | Нет (нужна установка) |
| Встроенный клиент iOS | Да | Нет (App Store) |
| Встроенный клиент Android | Да (до Android 12) | Нет (Play Store) |
| Корпоративный MDM | Легко настроить через GPO | Требует дополнительных шагов |
| Скорость | 100–300 Мбит/с | 300–900 Мбит/с |
| Overhead | Выше (двойная инкапсуляция) | Минимальный |
| NAT traversal | NAT-T (UDP 4500) | Нативная (UDP) |
| Конфигурация на сервере | Сложнее (IPsec + L2TP + PPP) | Проще |
Вывод: используйте L2TP/IPsec когда нужно подключить устройства без установки дополнительного ПО, в корпоративной среде с GPO, или когда WireGuard заблокирован (DPI).
Как работает L2TP/IPsec
Протокол работает в два уровня:
-
IPsec (Internet Protocol Security) — создаёт зашифрованный туннель между клиентом и сервером. Используется ESP (Encapsulating Security Payload) для шифрования. За NAT работает через NAT-T (NAT Traversal, UDP порт 4500).
-
L2TP (Layer 2 Tunneling Protocol) — работает поверх IPsec, создавая PPP-сессию внутри зашифрованного туннеля. Через PPP передаются логин/пароль, назначаются IP-адреса, маршруты и DNS.
Порты и протоколы, которые нужно открыть:
| Протокол/Порт | Назначение |
|---|---|
| UDP 500 | IKE (Internet Key Exchange) — согласование IPsec |
| UDP 4500 | NAT-T (NAT Traversal) — IPsec через NAT |
| UDP 1701 | L2TP (внутри IPsec-туннеля, но для прямых подключений) |
| IP protocol 50 | ESP (Encapsulating Security Payload) |
Настройка
Шаг 1. Создание пула адресов для VPN-клиентов
VPN-клиенты получат IP-адреса из отдельного пула. Используем подсеть, не пересекающуюся с LAN:
[admin@MikroTik] ># Пул адресов для VPN-клиентов /ip/pool/add name=pool-vpn-l2tp ranges=10.10.10.10-10.10.10.254
Шаг 2. PPP Profile
Создаём профиль, определяющий параметры PPP-сессии:
[admin@MikroTik] >/ppp/profile/add \ name=l2tp-profile \ local-address=10.10.10.1 \ remote-address=pool-vpn-l2tp \ dns-server=10.10.10.1 \ use-encryption=required \ use-compression=no \ change-tcp-mss=yes
Параметр local-address=10.10.10.1 — это IP-адрес MikroTik в VPN-подсети (шлюз для клиентов). dns-server можно указать как IP роутера (если на нём работает DNS) или внешний (8.8.8.8).
Шаг 3. Создание пользователей (PPP Secrets)
[admin@MikroTik] ># Пользователь для удалённого сотрудника /ppp/secret/add \ name=user1 \ password="C0mplexP@ssw0rd!" \ service=l2tp \ profile=l2tp-profile \ comment="Иванов — ноутбук" # Ещё пользователь /ppp/secret/add \ name=user2 \ password="An0therStr0ng#Key" \ service=l2tp \ profile=l2tp-profile \ comment="Петров — телефон" # Пользователь с фиксированным IP /ppp/secret/add \ name=admin-vpn \ password="Adm1nVPN!2024" \ service=l2tp \ profile=l2tp-profile \ remote-address=10.10.10.2 \ comment="Админ — фиксированный IP"
Шаг 4. Настройка IPsec
Создаём IPsec profile, proposal и peer для L2TP:
[admin@MikroTik] ># IPsec Profile (Phase 1 — IKE) /ip/ipsec/profile/add \ name=l2tp-ipsec-profile \ hash-algorithm=sha256 \ enc-algorithm=aes-256 \ dh-group=modp2048,modp1024 \ lifetime=1d \ dpd-interval=120s \ dpd-maximum-failures=5 \ nat-traversal=yes # IPsec Proposal (Phase 2 — ESP) /ip/ipsec/proposal/add \ name=l2tp-ipsec-proposal \ auth-algorithms=sha256 \ enc-algorithms=aes-256-cbc \ lifetime=8h \ pfs-group=modp2048 # IPsec Peer (принимаем подключения от любого клиента) /ip/ipsec/peer/add \ name=l2tp-peer \ exchange-mode=main \ profile=l2tp-ipsec-profile \ passive=yes \ send-initial-contact=yes # IPsec Identity (Pre-Shared Key) /ip/ipsec/identity/add \ peer=l2tp-peer \ auth-method=pre-shared-key \ secret="MyIPsecPSK!2024" \ match-by=certificate \ generate-policy=port-strict \ policy-template-group=default # Проверяем /ip/ipsec/peer/print /ip/ipsec/identity/print
Важно: secret — это Pre-Shared Key (PSK), общий ключ, который вводится на всех клиентах. Он отличается от пароля пользователя PPP. Используйте длинный и сложный PSK.
Шаг 5. Включение L2TP Server
[admin@MikroTik] >/interface/l2tp-server/server/set \ enabled=yes \ default-profile=l2tp-profile \ use-ipsec=required \ ipsec-secret="MyIPsecPSK!2024" \ caller-id-type=ip-address \ max-mtu=1400 \ max-mru=1400 \ authentication=mschap2 \ keepalive-timeout=30
Параметры:
| Параметр | Значение | Описание |
|---|---|---|
use-ipsec | required | Принимать только IPsec-зашифрованные подключения |
ipsec-secret | PSK | Тот же Pre-Shared Key, что в IPsec identity |
authentication | mschap2 | Протокол аутентификации (совместим со всеми клиентами) |
max-mtu/mru | 1400 | Уменьшенный MTU для предотвращения фрагментации |
keepalive-timeout | 30 | Таймаут keepalive в секундах |
Шаг 6. Настройка Firewall
Открываем необходимые порты:
[admin@MikroTik] ># IKE (IPsec Phase 1) /ip/firewall/filter/add \ chain=input \ protocol=udp \ dst-port=500 \ action=accept \ comment="L2TP/IPsec: IKE" \ place-before=0 # NAT-T (IPsec через NAT) /ip/firewall/filter/add \ chain=input \ protocol=udp \ dst-port=4500 \ action=accept \ comment="L2TP/IPsec: NAT-T" \ place-before=1 # L2TP /ip/firewall/filter/add \ chain=input \ protocol=udp \ dst-port=1701 \ action=accept \ comment="L2TP/IPsec: L2TP" \ place-before=2 # IPsec ESP /ip/firewall/filter/add \ chain=input \ protocol=ipsec-esp \ action=accept \ comment="L2TP/IPsec: ESP" \ place-before=3 # Разрешаем forward из VPN-подсети в LAN /ip/firewall/filter/add \ chain=forward \ src-address=10.10.10.0/24 \ dst-address=192.168.88.0/24 \ action=accept \ comment="VPN to LAN forward" # Разрешаем forward из LAN в VPN /ip/firewall/filter/add \ chain=forward \ src-address=192.168.88.0/24 \ dst-address=10.10.10.0/24 \ action=accept \ comment="LAN to VPN forward"
Если VPN-клиенты должны выходить в интернет через MikroTik, добавьте NAT:
[admin@MikroTik] ># Masquerade для 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"
Шаг 7. Обход IPsec policy для NAT
Если у вас уже есть masquerade-правило для всего трафика, IPsec-трафик может некорректно NAT-ироваться. Нужно исключить L2TP-трафик:
[admin@MikroTik] ># Проверяем существующее NAT-правило /ip/firewall/nat/print where action=masquerade # Добавляем RAW-правило для исключения IPsec из NAT # Или корректируем существующее masquerade, добавив исключение: /ip/firewall/nat/add \ chain=srcnat \ src-address=10.10.10.0/24 \ dst-address=192.168.88.0/24 \ action=accept \ comment="No NAT for VPN-to-LAN" \ place-before=0
Подключение клиентов
Windows 10/11
Никакого дополнительного ПО не нужно. Настройка через Параметры:
- Параметры > Сеть и Интернет > VPN > Добавить VPN-подключение
- Заполните:
- Поставщик VPN: Windows (встроенный)
- Имя подключения: Office VPN
- Имя или адрес сервера: vpn.example.com (или IP-адрес MikroTik)
- Тип VPN: L2TP/IPsec с предварительным ключом
- Общий ключ: MyIPsecPSK!2024 (IPsec PSK)
- Тип данных для входа: Имя пользователя и пароль
- Имя пользователя: user1
- Пароль: C0mplexP@ssw0rd!
- Нажмите Сохранить
Для Windows 10/11 за NAT (домашний роутер) может потребоваться правка реестра:
[admin@MikroTik] ># Запустите от имени администратора reg add HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 2 /f # Перезагрузите компьютер
Это включает NAT-T для Windows VPN-клиента. Без этой правки подключение через NAT может не работать.
Также через PowerShell можно настроить VPN:
powershellAdd-VpnConnection -Name "Office VPN" ` -ServerAddress "vpn.example.com" ` -TunnelType L2tp ` -L2tpPsk "MyIPsecPSK!2024" ` -AuthenticationMethod MSChapv2 ` -EncryptionLevel Required ` -Force # Для split-tunneling (только офисный трафик через VPN): Add-VpnConnectionRoute -ConnectionName "Office VPN" -DestinationPrefix "192.168.88.0/24" Set-VpnConnection -Name "Office VPN" -SplitTunneling $true
macOS
- Системные настройки > Сеть > + (добавить интерфейс)
- Интерфейс: VPN, Тип VPN: L2TP over IPSec
- Адрес сервера: vpn.example.com
- Имя учётной записи: user1
- Настройки аутентификации:
- Пароль: C0mplexP@ssw0rd!
- Shared Secret (общий ключ): MyIPsecPSK!2024
- Дополнительно > Отправлять весь трафик через VPN (если нужен full tunnel)
- Подключить
iOS / iPadOS
- Настройки > Основные > VPN и управление устройством > VPN > Добавить конфигурацию VPN
- Тип: L2TP
- Описание: Office VPN
- Сервер: vpn.example.com
- Учётная запись: user1
- Пароль: C0mplexP@ssw0rd!
- Общий ключ: MyIPsecPSK!2024
- Готово, затем включить переключатель VPN
Android
В Android 12+ Google удалил встроенный L2TP/IPsec клиент. Для новых версий Android используйте strongSwan (бесплатное приложение из Play Store) или рассмотрите IKEv2.
Для Android 11 и ниже:
- Настройки > Сеть > VPN > +
- Тип: L2TP/IPSec PSK
- Адрес сервера, имя пользователя, пароль, общий ключ (PSK) — как выше
Site-to-Site L2TP/IPsec
Для соединения двух офисов через L2TP/IPsec настройте L2TP-клиент на удалённом роутере:
На удалённом MikroTik (офис B):
[admin@MikroTik] ># L2TP клиент /interface/l2tp-client/add \ name=l2tp-to-hq \ connect-to=203.0.113.1 \ user=site-b \ password="S1teB_P@ssw0rd!" \ use-ipsec=yes \ ipsec-secret="MyIPsecPSK!2024" \ allow-fast-path=yes \ add-default-route=no \ disabled=no # Маршрут в сеть главного офиса /ip/route/add dst-address=192.168.88.0/24 gateway=l2tp-to-hq # Если нужно — masquerade для клиентов офиса B /ip/firewall/nat/add \ chain=srcnat \ src-address=192.168.20.0/24 \ dst-address=192.168.88.0/24 \ out-interface=l2tp-to-hq \ action=accept \ comment="No NAT for site-to-site"
На MikroTik главного офиса (добавляем пользователя):
[admin@MikroTik] >/ppp/secret/add \ name=site-b \ password="S1teB_P@ssw0rd!" \ service=l2tp \ profile=l2tp-profile \ remote-address=10.10.10.3 \ routes="192.168.20.0/24 10.10.10.3" \ comment="Офис B — site-to-site"
Параметр routes автоматически добавит маршрут 192.168.20.0/24 через 10.10.10.3 при подключении офиса B.
Проверка
На MikroTik (сервер)
[admin@MikroTik] ># Статус L2TP-сервера /interface/l2tp-server/server/print # Активные подключения /interface/l2tp-server/print where running=yes # Подробно — с IP, uptime, трафиком /interface/l2tp-server/print detail where running=yes # Активные IPsec SA (Security Associations) /ip/ipsec/active-peers/print /ip/ipsec/installed-sa/print # Статистика IPsec /ip/ipsec/statistics/print # Логи VPN-подключений /log/print where topics~"l2tp" /log/print where topics~"ipsec" # Пинг VPN-клиента /ping 10.10.10.10
Проверка с клиента
После подключения VPN на клиенте проверьте:
[admin@MikroTik] ># Windows ipconfig /all # Должен появиться адаптер с IP 10.10.10.x ping 10.10.10.1 # Пинг шлюза VPN ping 192.168.88.1 # Пинг LAN MikroTik (если разрешён forward) tracert 192.168.88.1 # Маршрут должен идти через 10.10.10.1
Типичные ошибки
1. Windows: "Попытка L2TP-подключения не удалась из-за ошибки на уровне безопасности"
Симптом: ошибка 789 или 809 при подключении с Windows.
Причина: клиент находится за NAT, а Windows по умолчанию не поддерживает IPsec NAT-T.
Решение: добавить ключ реестра (см. раздел Windows выше):
codereg add HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 2 /f
Перезагрузите компьютер после изменения реестра.
2. Подключение устанавливается, но нет доступа к LAN
Симптом: VPN подключён, IP получен, но ping до 192.168.88.x не проходит.
Причина: отсутствуют правила forward в firewall, или masquerade мешает.
Решение:
[admin@MikroTik] ># Проверяем правила forward /ip/firewall/filter/print where chain=forward # Добавляем разрешение VPN <-> LAN (если не добавлено) /ip/firewall/filter/add chain=forward src-address=10.10.10.0/24 dst-address=192.168.88.0/24 action=accept place-before=0 /ip/firewall/filter/add chain=forward src-address=192.168.88.0/24 dst-address=10.10.10.0/24 action=accept place-before=1 # Проверяем, что masquerade не NAT-ит VPN-трафик /ip/firewall/nat/print
3. Double NAT — клиент за NAT и сервер за NAT
Симптом: подключение зависает на этапе "Проверка имени и пароля".
Причина: MikroTik находится за другим NAT (роутер провайдера).
Решение: на внешнем роутере пробросьте порты:
- UDP 500 -> IP MikroTik
- UDP 4500 -> IP MikroTik
- UDP 1701 -> IP MikroTik (опционально)
Если проброс невозможен — переведите роутер провайдера в режим моста (bridge mode).
4. Низкая скорость — MTU/MSS проблемы
Симптом: подключение работает, но скорость значительно ниже ожидаемой, крупные файлы не скачиваются.
Причина: L2TP/IPsec добавляет значительный overhead (40–80 байт). При MTU 1500 полезная нагрузка может превышать MTU туннеля, вызывая фрагментацию.
Решение:
[admin@MikroTik] ># Уменьшаем MTU на L2TP-сервере /interface/l2tp-server/server/set max-mtu=1400 max-mru=1400 # Включаем MSS clamping в firewall /ip/firewall/mangle/add \ chain=forward \ protocol=tcp \ tcp-flags=syn \ in-interface-list=all \ action=change-mss \ new-mss=clamp-to-pmtu \ passthrough=yes \ comment="MSS clamping for VPN"
Для диагностики MTU:
[admin@MikroTik] ># С клиента (Windows) — ищем максимальный MTU без фрагментации ping 192.168.88.1 -f -l 1372 # Уменьшайте число, пока ping не заработает # Рабочий MTU = число + 28 (IP+ICMP headers)
5. IPsec Phase 1 не проходит — "no proposal chosen"
Симптом: в логах MikroTik ошибка "phase1 negotiation failed: no proposal chosen".
Причина: параметры шифрования на клиенте и сервере не совпадают.
Решение: убедитесь, что profile содержит алгоритмы, поддерживаемые клиентом:
[admin@MikroTik] ># Для максимальной совместимости: /ip/ipsec/profile/set l2tp-ipsec-profile \ hash-algorithm=sha256,sha1 \ enc-algorithm=aes-256,aes-128 \ dh-group=modp2048,modp1024 /ip/ipsec/proposal/set l2tp-ipsec-proposal \ auth-algorithms=sha256,sha1 \ enc-algorithms=aes-256-cbc,aes-128-cbc \ pfs-group=modp2048,none
Windows 10 по умолчанию поддерживает AES-256 + SHA-256 + DH Group 2 (modp1024). Для более строгих параметров может потребоваться настройка через PowerShell или GPO.
6. Не более одного подключения из одного NAT
Симптом: второй клиент из той же сети (за одним NAT) не может подключиться.
Причина: два IPsec-сессии с одного внешнего IP конфликтуют по IKE cookie.
Решение: убедитесь, что caller-id-type=ip-address установлен (по умолчанию в RouterOS 7):
[admin@MikroTik] >/interface/l2tp-server/server/set caller-id-type=ip-address
Также проверьте, что NAT-T работает (UDP 4500). Некоторые старые NAT-роутеры некорректно обрабатывают множественные IPsec-сессии.
7. macOS: подключение обрывается через 1 час
Симптом: VPN отключается ровно через 60 минут.
Причина: рассогласование IPsec lifetime между macOS и MikroTik.
Решение:
[admin@MikroTik] ># Установите lifetime Phase 1 = 24h и Phase 2 = 8h /ip/ipsec/profile/set l2tp-ipsec-profile lifetime=1d /ip/ipsec/proposal/set l2tp-ipsec-proposal lifetime=8h # Включите DPD для обнаружения разрывов /ip/ipsec/profile/set l2tp-ipsec-profile dpd-interval=120s dpd-maximum-failures=5
Безопасность
Рекомендации по усилению безопасности L2TP/IPsec:
[admin@MikroTik] ># 1. Используйте сложный PSK (не менее 20 символов) # 2. Используйте сложные пароли пользователей # 3. Ограничьте количество подключений per user /ppp/secret/set [find name=user1] limit-bytes-out=10G # 4. Логирование подключений /system/logging/add topics=l2tp,ipsec action=memory # 5. Fail2ban — блокировка при множественных неудачных попытках # (RouterOS не имеет встроенного fail2ban, но можно мониторить логи) # 6. Регулярная смена PSK и паролей # 7. Используйте RADIUS для централизованной аутентификации в крупных сетях
Итоговая конфигурация
[admin@MikroTik] ># === L2TP/IPsec Server — полная конфигурация === # Пул адресов /ip/pool/add name=pool-vpn-l2tp ranges=10.10.10.10-10.10.10.254 # PPP Profile /ppp/profile/add name=l2tp-profile local-address=10.10.10.1 remote-address=pool-vpn-l2tp dns-server=10.10.10.1 use-encryption=required change-tcp-mss=yes # Пользователи /ppp/secret/add name=user1 password="C0mplexP@ssw0rd!" service=l2tp profile=l2tp-profile /ppp/secret/add name=user2 password="An0therStr0ng#Key" service=l2tp profile=l2tp-profile # IPsec /ip/ipsec/profile/add name=l2tp-ipsec-profile hash-algorithm=sha256 enc-algorithm=aes-256 dh-group=modp2048,modp1024 lifetime=1d nat-traversal=yes /ip/ipsec/proposal/add name=l2tp-ipsec-proposal auth-algorithms=sha256 enc-algorithms=aes-256-cbc lifetime=8h pfs-group=modp2048 # L2TP Server /interface/l2tp-server/server/set enabled=yes default-profile=l2tp-profile use-ipsec=required ipsec-secret="MyIPsecPSK!2024" max-mtu=1400 max-mru=1400 authentication=mschap2 # Firewall /ip/firewall/filter/add chain=input protocol=udp dst-port=500 action=accept comment="IKE" place-before=0 /ip/firewall/filter/add chain=input protocol=udp dst-port=4500 action=accept comment="NAT-T" place-before=1 /ip/firewall/filter/add chain=input protocol=udp dst-port=1701 action=accept comment="L2TP" place-before=2 /ip/firewall/filter/add chain=input protocol=ipsec-esp action=accept comment="ESP" place-before=3 /ip/firewall/filter/add chain=forward src-address=10.10.10.0/24 dst-address=192.168.88.0/24 action=accept comment="VPN->LAN" /ip/firewall/filter/add chain=forward src-address=192.168.88.0/24 dst-address=10.10.10.0/24 action=accept comment="LAN->VPN" # NAT для VPN-клиентов (интернет) /ip/firewall/nat/add chain=srcnat src-address=10.10.10.0/24 out-interface-list=WAN action=masquerade comment="NAT VPN" # Исключение NAT для VPN<->LAN /ip/firewall/nat/add chain=srcnat src-address=10.10.10.0/24 dst-address=192.168.88.0/24 action=accept place-before=0
Эта конфигурация обеспечивает работающий L2TP/IPsec сервер, совместимый с встроенными VPN-клиентами Windows, macOS и iOS без установки дополнительного программного обеспечения.
# Пул адресов для VPN-клиентов /ip/pool/add name=pool-vpn-l2tp ranges=10.10.10.10-10.10.10.254 /ppp/profile/add \ name=l2tp-profile \ local-address=10.10.10.1 \ remote-address=pool-vpn-l2tp \ dns-server=10.10.10.1 \ use-encryption=required \ use-compression=no \ change-tcp-mss=yes # Пользователь для удалённого сотрудника /ppp/secret/add \ name=user1 \ password="C0mplexP@ssw0rd!" \ service=l2tp \ profile=l2tp-profile \ comment="Иванов — ноутбук" # Ещё пользователь /ppp/secret/add \ name=user2 \ password="An0therStr0ng#Key" \ service=l2tp \ profile=l2tp-profile \ comment="Петров — телефон" # Пользователь с фиксированным IP /ppp/secret/add \ name=admin-vpn \ password="Adm1nVPN!2024" \ service=l2tp \ profile=l2tp-profile \ remote-address=10.10.10.2 \ comment="Админ — фиксированный IP" # IPsec Profile (Phase 1 — IKE) /ip/ipsec/profile/add \ name=l2tp-ipsec-profile \ hash-algorithm=sha256 \ enc-algorithm=aes-256 \ dh-group=modp2048,modp1024 \ lifetime=1d \ dpd-interval=120s \ dpd-maximum-failures=5 \ nat-traversal=yes # IPsec Proposal (Phase 2 — ESP) /ip/ipsec/proposal/add \ name=l2tp-ipsec-proposal \ auth-algorithms=sha256 \ enc-algorithms=aes-256-cbc \ lifetime=8h \ pfs-group=modp2048 # IPsec Peer (принимаем подключения от любого клиента) /ip/ipsec/peer/add \ name=l2tp-peer \ exchange-mode=main \ profile=l2tp-ipsec-profile \ passive=yes \ send-initial-contact=yes # IPsec Identity (Pre-Shared Key) /ip/ipsec/identity/add \ peer=l2tp-peer \ auth-method=pre-shared-key \ secret="MyIPsecPSK!2024" \ match-by=certificate \ generate-policy=port-strict \ policy-template-group=default # Проверяем /ip/ipsec/peer/print /ip/ipsec/identity/print /interface/l2tp-server/server/set \ enabled=yes \ default-profile=l2tp-profile \ use-ipsec=required \ ipsec-secret="MyIPsecPSK!2024" \ caller-id-type=ip-address \ max-mtu=1400 \ max-mru=1400 \ authentication=mschap2 \ keepalive-timeout=30 # IKE (IPsec Phase 1) /ip/firewall/filter/add \ chain=input \ protocol=udp \ dst-port=500 \ action=accept \ comment="L2TP/IPsec: IKE" \ place-before=0 # NAT-T (IPsec через NAT) /ip/firewall/filter/add \ chain=input \ protocol=udp \ dst-port=4500 \ action=accept \ comment="L2TP/IPsec: NAT-T" \ place-before=1 # L2TP /ip/firewall/filter/add \ chain=input \ protocol=udp \ dst-port=1701 \ action=accept \ comment="L2TP/IPsec: L2TP" \ place-before=2 # IPsec ESP /ip/firewall/filter/add \ chain=input \ protocol=ipsec-esp \ action=accept \ comment="L2TP/IPsec: ESP" \ place-before=3 # Разрешаем forward из VPN-подсети в LAN /ip/firewall/filter/add \ chain=forward \ src-address=10.10.10.0/24 \ dst-address=192.168.88.0/24 \ action=accept \ comment="VPN to LAN forward" # Разрешаем forward из LAN в VPN /ip/firewall/filter/add \ chain=forward \ src-address=192.168.88.0/24 \ dst-address=10.10.10.0/24 \ action=accept \ comment="LAN to VPN forward" # Masquerade для 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" # Проверяем существующее NAT-правило /ip/firewall/nat/print where action=masquerade # Добавляем RAW-правило для исключения IPsec из NAT # Или корректируем существующее masquerade, добавив исключение: /ip/firewall/nat/add \ chain=srcnat \ src-address=10.10.10.0/24 \ dst-address=192.168.88.0/24 \ action=accept \ comment="No NAT for VPN-to-LAN" \ place-before=0 # Запустите от имени администратора reg add HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 2 /f # Перезагрузите компьютер #### macOS 1. **Системные настройки** > **Сеть** > **+** (добавить интерфейс) 2. Интерфейс: **VPN**, Тип VPN: **L2TP over IPSec** 3. Адрес сервера: **vpn.example.com** 4. Имя учётной записи: **user1** 5. **Настройки аутентификации**: - Пароль: **C0mplexP@ssw0rd!** - Shared Secret (общий ключ): **MyIPsecPSK!2024** 6. **Дополнительно** > **Отправлять весь трафик через VPN** (если нужен full tunnel) 7. **Подключить** #### iOS / iPadOS 1. **Настройки** > **Основные** > **VPN и управление устройством** > **VPN** > **Добавить конфигурацию VPN** 2. Тип: **L2TP** 3. Описание: **Office VPN** 4. Сервер: **vpn.example.com** 5. Учётная запись: **user1** 6. Пароль: **C0mplexP@ssw0rd!** 7. Общий ключ: **MyIPsecPSK!2024** 8. **Готово**, затем включить переключатель VPN #### Android В Android 12+ Google удалил встроенный L2TP/IPsec клиент. Для новых версий Android используйте strongSwan (бесплатное приложение из Play Store) или рассмотрите IKEv2. Для Android 11 и ниже: 1. **Настройки** > **Сеть** > **VPN** > **+** 2. Тип: **L2TP/IPSec PSK** 3. Адрес сервера, имя пользователя, пароль, общий ключ (PSK) — как выше ### Site-to-Site L2TP/IPsec Для соединения двух офисов через L2TP/IPsec настройте L2TP-клиент на удалённом роутере: **На удалённом MikroTik (офис B):** **На MikroTik главного офиса (добавляем пользователя):** Параметр `routes` автоматически добавит маршрут `192.168.20.0/24` через `10.10.10.3` при подключении офиса B. ### Проверка #### На MikroTik (сервер) #### Проверка с клиента После подключения VPN на клиенте проверьте: ### Типичные ошибки #### 1. Windows: "Попытка L2TP-подключения не удалась из-за ошибки на уровне безопасности" **Симптом**: ошибка 789 или 809 при подключении с Windows. **Причина**: клиент находится за NAT, а Windows по умолчанию не поддерживает IPsec NAT-T. **Решение**: добавить ключ реестра (см. раздел Windows выше): Перезагрузите компьютер после изменения реестра. #### 2. Подключение устанавливается, но нет доступа к LAN **Симптом**: VPN подключён, IP получен, но ping до 192.168.88.x не проходит. **Причина**: отсутствуют правила forward в firewall, или masquerade мешает. **Решение**: #### 3. Double NAT — клиент за NAT и сервер за NAT **Симптом**: подключение зависает на этапе "Проверка имени и пароля". **Причина**: MikroTik находится за другим NAT (роутер провайдера). **Решение**: на внешнем роутере пробросьте порты: - UDP 500 -> IP MikroTik - UDP 4500 -> IP MikroTik - UDP 1701 -> IP MikroTik (опционально) Если проброс невозможен — переведите роутер провайдера в режим моста (bridge mode). #### 4. Низкая скорость — MTU/MSS проблемы **Симптом**: подключение работает, но скорость значительно ниже ожидаемой, крупные файлы не скачиваются. **Причина**: L2TP/IPsec добавляет значительный overhead (40–80 байт). При MTU 1500 полезная нагрузка может превышать MTU туннеля, вызывая фрагментацию. **Решение**: Для диагностики MTU: #### 5. IPsec Phase 1 не проходит — "no proposal chosen" **Симптом**: в логах MikroTik ошибка "phase1 negotiation failed: no proposal chosen". **Причина**: параметры шифрования на клиенте и сервере не совпадают. **Решение**: убедитесь, что profile содержит алгоритмы, поддерживаемые клиентом: Windows 10 по умолчанию поддерживает AES-256 + SHA-256 + DH Group 2 (modp1024). Для более строгих параметров может потребоваться настройка через PowerShell или GPO. #### 6. Не более одного подключения из одного NAT **Симптом**: второй клиент из той же сети (за одним NAT) не может подключиться. **Причина**: два IPsec-сессии с одного внешнего IP конфликтуют по IKE cookie. **Решение**: убедитесь, что `caller-id-type=ip-address` установлен (по умолчанию в RouterOS 7): Также проверьте, что NAT-T работает (UDP 4500). Некоторые старые NAT-роутеры некорректно обрабатывают множественные IPsec-сессии. #### 7. macOS: подключение обрывается через 1 час **Симптом**: VPN отключается ровно через 60 минут. **Причина**: рассогласование IPsec lifetime между macOS и MikroTik. **Решение**: ### Безопасность Рекомендации по усилению безопасности L2TP/IPsec: ### Итоговая конфигурация