Что такое L2TP/IPSec и зачем он нужен
L2TP (Layer 2 Tunneling Protocol) — это протокол туннелирования, который сам по себе не обеспечивает шифрование. Он работает в паре с IPSec (Internet Protocol Security), который отвечает за аутентификацию и шифрование данных. Такая связка называется L2TP/IPSec и является одним из стандартных способов организации удалённого доступа к корпоративной сети.
В отличие от более современных протоколов, таких как WireGuard или IKEv2, L2TP/IPSec поддерживается практически всеми операционными системами, включая Windows, macOS, Linux, Android и iOS. Это делает его удобным выбором для организаций, где используются разнородные устройства. В Windows клиент L2TP/IPSec встроен в систему, поэтому для подключения не требуется устанавливать сторонние программы.
Однако у L2TP/IPSec есть особенности, которые могут вызывать проблемы при подключении, особенно если клиент или сервер находятся за NAT (Network Address Translation). Понимание этих особенностей поможет быстро диагностировать и исправить ошибки.
Подготовка к настройке: что нужно знать заранее
Перед созданием VPN-подключения необходимо собрать следующие данные:
- Адрес сервера — IP-адрес или доменное имя L2TP/IPSec VPN-сервера.
- Общий ключ (PSK) — предварительный общий ключ, используемый для аутентификации IPSec. Он задаётся на сервере отдельно от логина и пароля.
- Логин и пароль — учётные данные, созданные специально для VPN-подключения. Это не пароль от учётной записи Windows и не root-пароль сервера.
- Открытые порты — на сервере и на сетевом пути должны быть открыты UDP-порт 500 (IKE), UDP-порт 4500 (NAT-T) и протокол ESP (IP-протокол 50). Если сервер находится за NAT, порт 1701 (L2TP) пробрасывать не нужно, так как при использовании NAT-T весь трафик инкапсулируется в UDP 4500.
Эти данные обычно предоставляет администратор VPN-сервера. Если вы настраиваете сервер самостоятельно, убедитесь, что на нём правильно сконфигурированы параметры IPSec и L2TP.
Перед созданием подключения можно проверить доступность портов с помощью PowerShell:
Test-NetConnection -ComputerName vpn.example.com -Port 500
Test-NetConnection -ComputerName vpn.example.com -Port 4500Эти команды не дают полной гарантии, что UDP-порты открыты, но помогают выявить грубые проблемы, такие как блокировка провайдером или неверный адрес.
Настройка L2TP/IPSec в Windows 10 и Windows 11
В Windows 10 и Windows 11 настройка выполняется через графический интерфейс:
- Откройте Параметры → Сеть и Интернет → VPN.
- Нажмите Добавить VPN-подключение.
- В поле Поставщик VPN-услуг выберите Windows (встроенные).
- В поле Имя подключения укажите любое понятное название, например, "Office L2TP".
- В поле Имя или адрес сервера введите IP-адрес или домен VPN-сервера.
- В поле Тип VPN выберите L2TP/IPsec с предварительным ключом.
- В поле Предварительный ключ введите PSK.
- В поле Тип данных для входа выберите Имя пользователя и пароль.
- Введите логин и пароль, при необходимости установите флажок Запомнить данные для входа.
- Нажмите Сохранить.
После сохранения подключение появится в списке VPN. Чтобы подключиться, нажмите на него и выберите Подключить.
Обратите внимание, что мастер не показывает все параметры. Для доступа к дополнительным настройкам (например, к выбору протокола аутентификации) нужно открыть Панель управления → Сеть и Интернет → Сетевые подключения, найти созданное подключение, кликнуть правой кнопкой мыши и выбрать Свойства. На вкладке Безопасность можно настроить тип VPN, шифрование и протоколы аутентификации.
Настройка в Windows 7 и Windows 8.1
В более старых версиях Windows процесс настройки немного отличается, но принцип тот же.
- Нажмите Win + R, введите
controlи нажмите Enter, чтобы открыть Панель управления. - Перейдите в Центр управления сетями и общим доступом → Создание и настройка нового подключения или сети.
- Выберите Подключение к рабочему месту и нажмите Далее.
- Выберите Использовать моё подключение к Интернету (VPN).
- В поле Адрес в Интернете введите IP-адрес или домен VPN-сервера.
- В поле Имя объекта назначения введите название подключения.
- Нажмите Создать.
После создания откройте свойства подключения (правый клик → Свойства). На вкладке Безопасность:
- Установите Тип VPN — Протокол L2TP с IPsec (L2TP/IPsec).
- Установите Шифрование данных — обязательное.
- В разделе Допустимые протоколы отметьте Протокол Microsoft CHAP версии 2 (MS-CHAP v2).
- Нажмите Дополнительные параметры и установите флажок Для проверки подлинности использовать общий ключ, затем введите PSK.
После этого можно подключаться к VPN, выбрав созданное подключение в области уведомлений.
Проблема NAT-T: почему L2TP/IPSec не работает из-за роутера
Одна из самых частых причин, по которой L2TP/IPSec не работает на Windows-клиентах, — это нахождение клиента или сервера за NAT. Протокол IPSec изначально не поддерживает NAT, поскольку ESP-пакеты не проходят через трансляцию адресов. Для решения этой проблемы был разработан механизм NAT-T (NAT Traversal), который инкапсулирует ESP-трафик в UDP-пакеты на порту 4500.
В большинстве операционных систем (Linux, macOS, Android) NAT-T включён по умолчанию. Однако в Windows, начиная с XP и заканчивая Windows 11, по умолчанию NAT-T работает только в том случае, если сервер имеет публичный IP-адрес. Если и клиент, и сервер находятся за NAT, Windows блокирует установление IPsec-соединения.
Для исправления этой проблемы необходимо изменить параметр реестра AssumeUDPEncapsulationContextOnSendRule в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent. Значение параметра:
0— по умолчанию, предполагается, что сервер не за NAT.1— сервер находится за NAT.2— и клиент, и сервер находятся за NAT.
Для большинства домашних и офисных сценариев рекомендуется установить значение 2. Это можно сделать через редактор реестра (regedit) или с помощью PowerShell:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 -ForceПосле изменения необходимо перезагрузить компьютер. Если VPN-сервер также работает на Windows и находится за NAT, аналогичный параметр нужно установить и на сервере.
Типичные ошибки подключения и их устранение
При подключении L2TP/IPSec в Windows могут возникать различные ошибки. Рассмотрим наиболее распространённые.
Ошибка 809 — «Соединение не было установлено...». Эта ошибка обычно указывает на проблемы с NAT-T или блокировку портов UDP 500 и 4500. Проверьте, что на сервере открыты нужные порты, и что на клиенте установлен параметр AssumeUDPEncapsulationContextOnSendRule = 2. Также стоит проверить настройки роутера: некоторые модели имеют функцию VPN-passthrough или ALG, которая может мешать работе L2TP/IPSec. Попробуйте отключить её.
Ошибка 789 — «Попытка L2TP-подключения не удалась...». Эта ошибка возникает при несовпадении параметров IPSec, например, из-за неверного PSK или несовпадения алгоритмов шифрования. Убедитесь, что ключ введён без лишних пробелов, и что на сервере и клиенте настроены одинаковые алгоритмы (например, AES-256, SHA-256).
Ошибка 691 — «Не удалось проверить имя пользователя и пароль». Это означает, что введённые учётные данные неверны или учётная запись не имеет прав на VPN-подключение. Проверьте логин и пароль, а также убедитесь, что на сервере разрешены подключения для этой учётной записи.
Ошибка 619 — «Соединение закрыто удалённой стороной». Причина может быть в том, что сервер отклоняет подключение из-за неподдерживаемого протокола аутентификации или из-за ограничения на количество одновременных подключений. Проверьте настройки сервера и логи.
Ошибка 720 — «Не удалось установить PPP-соединение». Эта ошибка часто связана с проблемами MTU. Попробуйте уменьшить MTU на VPN-адаптере с помощью команды netsh interface ipv4 set subinterface.
Дополнительные настройки и советы по стабильной работе
Помимо основных настроек, есть несколько дополнительных параметров, которые могут повлиять на стабильность и безопасность L2TP/IPSec подключения.
Протоколы аутентификации. По умолчанию Windows использует MS-CHAP v2. Это достаточно безопасный протокол, и его рекомендуется оставить. Если сервер требует другой протокол (например, PAP), его можно включить на вкладке Безопасность в свойствах подключения, но это снижает безопасность и не рекомендуется для продакшена.
Шлюз в удалённой сети. Если вам не нужно, чтобы весь трафик с компьютера шёл через VPN, можно отключить использование основного шлюза в удалённой сети. Для этого в свойствах подключения на вкладке Сеть выберите IP версии 4 (TCP/IPv4), нажмите Свойства → Дополнительно и снимите флажок Использовать основной шлюз в удалённой сети.
Проверка служб. Убедитесь, что на клиенте запущены службы IKEEXT (IKE and AuthIP IPsec Keying Modules) и PolicyAgent (IPsec Policy Agent). Если они остановлены, VPN-подключение не будет работать.
Виртуальные адаптеры. Иногда проблемы с L2TP возникают из-за повреждённых виртуальных адаптеров WAN Miniport. В диспетчере устройств можно удалить адаптеры WAN Miniport (L2TP) и WAN Miniport (IKEv2), после чего перезагрузить компьютер — Windows восстановит их автоматически.
Несколько одновременных подключений. Известная проблема Windows: если несколько компьютеров в одной локальной сети пытаются подключиться к одному и тому же L2TP/IPSec серверу через общий внешний IP, второе подключение может не установиться. Это связано с особенностями реализации клиента в Windows. Для решения можно изменить параметры реестра AllowL2TPWeakCrypto и ProhibitIPSec в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters, но это снижает уровень шифрования и не рекомендуется без необходимости.
Автоматизация подключения через PowerShell
Если вам нужно настроить L2TP/IPSec на нескольких компьютерах или пересоздать подключение после переустановки Windows, можно использовать PowerShell-скрипты.
Для создания VPN-подключения выполните:
Add-VpnConnection -Name "Office L2TP" `
-ServerAddress "vpn.example.com" `
-TunnelType L2tp `
-L2tpPsk "ваш-preshared-key" `
-AuthenticationMethod MSChapv2 `
-EncryptionLevel Required `
-RememberCredential `
-ForceЗатем можно настроить параметры IPSec:
Set-VpnConnectionIPsecConfiguration -ConnectionName "Office L2TP" `
-AuthenticationTransformConstants SHA256128 `
-CipherTransformConstants AES256 `
-EncryptionMethod AES256 `
-IntegrityCheckMethod SHA256 `
-PfsGroup PFS2048 `
-ForceВажно, чтобы алгоритмы шифрования и целостности совпадали с настройками сервера, иначе подключение не установится.
Для автоматического подключения при старте системы можно использовать планировщик задач с командой rasdial. Однако при этом пароль придётся передавать в скрипте, что небезопасно. Лучше использовать защищённое хранилище, например, Get-Credential и Export-Clixml.
Сравнение L2TP/IPSec с другими протоколами
L2TP/IPSec — не единственный протокол VPN, и у него есть как преимущества, так и недостатки.
Преимущества:
- Встроенная поддержка в Windows и других ОС, не требует установки дополнительного ПО.
- Хорошая совместимость с различными серверными решениями (Windows RRAS, Linux Libreswan, strongSwan и др.).
- Подходит для корпоративных сетей, где важна совместимость.
Недостатки:
- Сложность настройки из-за необходимости согласования множества параметров IPSec.
- Проблемы с NAT-T, особенно на Windows-клиентах.
- Более низкая производительность по сравнению с WireGuard или IKEv2.
- Устаревшие алгоритмы шифрования (например, MD5 и DES) могут использоваться, если не настроить современные.
Альтернативы:
- IKEv2 — более современный протокол, лучше работает с NAT и мобильными сетями, поддерживается Windows.
- WireGuard — очень быстрый и простой в настройке, но требует установки стороннего клиента.
- OpenVPN — гибкий и безопасный, но также требует установки ПО.
Выбор протокола зависит от конкретных требований: если нужна максимальная совместимость с Windows и другими ОС без установки дополнительного ПО, L2TP/IPSec остаётся рабочим вариантом. Если важна производительность и устойчивость к NAT, лучше рассмотреть IKEv2 или WireGuard.
Вопросы и ответы
Почему L2TP/IPSec не работает из-за NAT и как это исправить?
Протокол IPSec не поддерживает NAT напрямую, поэтому используется механизм NAT-T, который инкапсулирует ESP-пакеты в UDP-порт 4500. В Windows по умолчанию NAT-T работает только если сервер имеет публичный IP. Если и клиент, и сервер находятся за NAT, необходимо в реестре в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent создать параметр AssumeUDPEncapsulationContextOnSendRule со значением 2 и перезагрузить компьютер. Это разрешает NAT-T при двойном NAT.
Какие порты нужно открыть для L2TP/IPSec?
Для L2TP/IPSec необходимы UDP-порт 500 (IKE), UDP-порт 4500 (NAT-T) и протокол ESP (IP-протокол 50). Если используется NAT-T, порт 1701 (L2TP) пробрасывать не нужно, так как весь трафик инкапсулируется в UDP 4500. Убедитесь, что эти порты открыты на сервере и не блокируются межсетевым экраном или роутером.
Что делать, если появляется ошибка 789 при подключении L2TP/IPSec?
Ошибка 789 обычно указывает на несовпадение параметров IPSec: неверный предварительный ключ (PSK), несовпадение алгоритмов шифрования или целостности. Проверьте, что PSK введён без лишних пробелов, и что на клиенте и сервере настроены одинаковые алгоритмы (например, AES-256, SHA-256). Также убедитесь, что тип VPN выбран как L2TP/IPsec.
Можно ли использовать встроенный клиент Windows без PSK, только на сертификатах?
Да, L2TP/IPSec может использовать сертификаты для аутентификации вместо PSK. В этом случае на клиенте и сервере должны быть установлены сертификаты, выпущенные доверенным центром сертификации. В настройках VPN-подключения в Windows нужно выбрать тип аутентификации «Сертификат» и указать соответствующий сертификат. Это более безопасный, но и более сложный в настройке вариант.
Почему VPN работает из дома, но не работает с мобильного интернета?
Мобильные операторы часто используют carrier-grade NAT (CGNAT), который более агрессивно фильтрует UDP-трафик. Это может блокировать порты 500 и 4500, необходимые для L2TP/IPSec. Для мобильных сетей лучше использовать протоколы, устойчивые к CGNAT, например, IKEv2 или WireGuard.
Как автоматически подключаться к L2TP/IPSec VPN при запуске Windows?
Можно использовать планировщик задач Windows. Создайте задачу, которая запускается при входе пользователя, и в качестве действия укажите команду rasdial "Имя подключения" логин пароль. Однако хранить пароль в открытом виде в задаче небезопасно. Лучше использовать скрипт PowerShell с защищённым хранилищем паролей (например, Export-Clixml).
Влияет ли значение AssumeUDPEncapsulationContextOnSendRule=2 на безопасность?
Само по себе значение 2 не снижает криптографическую стойкость соединения. Оно лишь разрешает использование NAT-T, что необходимо для работы через NAT. Безопасность соединения определяется алгоритмами шифрования и аутентификации, которые настроены на сервере и клиенте.