Что такое L2TP/IPsec и зачем он нужен
L2TP/IPsec — это связка из двух протоколов: Layer 2 Tunneling Protocol (L2TP) и IPsec. L2TP отвечает за создание туннеля, а IPsec — за шифрование и аутентификацию. Такая комбинация обеспечивает безопасное соединение между клиентом и сервером, что делает её популярной для корпоративных VPN-сетей и удалённого доступа.
В отличие от более современных протоколов, таких как WireGuard или IKEv2, L2TP/IPsec поддерживается практически всеми операционными системами, включая Windows, macOS, Linux, Android и iOS. Это делает его универсальным решением для организаций, где используются разные устройства. Однако у него есть особенности: он чувствителен к NAT и требует дополнительных настроек, особенно на Windows-клиентах.
В этой статье мы рассмотрим, как настроить L2TP/IPsec VPN на Windows 10 и 11, какие данные нужны для подключения, как исправить типичные ошибки и как автоматизировать процесс с помощью PowerShell.
Подготовка: что нужно знать перед настройкой
Перед тем как приступить к настройке, соберите необходимые данные. Без них подключение не создастся или упадёт на первой попытке. Вот минимальный набор:
- Адрес сервера — IP-адрес или доменное имя VPN-сервера (например, vpn.example.com).
- Общий ключ (PSK) — предварительный ключ IPsec, который задаётся на сервере отдельно от логина и пароля.
- Логин и пароль — учётная запись, созданная специально для VPN-подключения. Это не пароль от Windows и не root-пароль на сервере.
- Открытые порты — на сервере и на пути к нему должны быть открыты UDP 500 (IKE), UDP 4500 (NAT-T) и протокол ESP (IP-протокол 50). Если сервер находится за NAT, ESP инкапсулируется в UDP 4500.
Если вы администрируете сервер самостоятельно, убедитесь, что эти порты доступны. Проверить их с клиента можно с помощью PowerShell:
Test-NetConnection -ComputerName vpn.example.com -Port 500
Test-NetConnection -ComputerName vpn.example.com -Port 4500Обе команды должны вернуть TcpTestSucceeded : True. Это не гарантирует, что UDP-порты открыты, но отсекает грубые проблемы, такие как блокировка провайдером или неверный адрес.
Настройка L2TP/IPsec VPN в Windows 10 и 11
В Windows 10 и 11 встроенный мастер VPN позволяет создать подключение за несколько кликов. Вот пошаговая инструкция:
- Откройте Параметры → Сеть и Интернет → VPN.
- Нажмите Добавить VPN-подключение.
- В поле Поставщик VPN-услуг выберите Windows (встроенные).
- В поле Имя подключения введите любое понятное название, например, "Office L2TP".
- В поле Имя или адрес сервера укажите IP-адрес или домен вашего VPN-сервера.
- В поле Тип VPN выберите L2TP/IPsec с предварительным ключом.
- В поле Предварительный ключ введите PSK, который выдал сервер.
- В поле Тип данных для входа выберите Имя пользователя и пароль.
- Введите логин и пароль учётной записи VPN. Если не хотите вводить их каждый раз, поставьте галочку Запомнить данные для входа.
- Нажмите Сохранить.
После сохранения подключение появится в списке. Чтобы подключиться, нажмите на него и выберите Подключить. Если всё настроено правильно, статус изменится на "Подключено" в течение нескольких секунд.
Обратите внимание: мастер не показывает все параметры. Дополнительные настройки доступны через Панель управления → Сеть и Интернет → Сетевые подключения. Найдите созданное подключение, кликните правой кнопкой мыши и выберите Свойства. На вкладке Безопасность можно изменить тип VPN, шифрование и протоколы аутентификации.
Настройка L2TP/IPsec VPN в Windows 7 и 8.1
В более старых версиях Windows процесс настройки немного отличается, но принцип тот же. Вот инструкция для Windows 7 и 8.1:
- Нажмите Win + R, введите
controlи нажмите Enter, чтобы открыть Панель управления. - Перейдите в Центр управления сетями и общим доступом → Создание и настройка нового подключения или сети.
- Выберите Подключение к рабочему месту и нажмите Далее.
- Выберите Использовать моё подключение к Интернету (VPN).
- В поле Адрес в Интернете введите IP-адрес или домен VPN-сервера.
- В поле Имя объекта назначения введите любое название подключения.
- Нажмите Создать.
После создания подключения откройте его свойства. На вкладке Безопасность нажмите Дополнительные параметры и отметьте пункт Для проверки подлинности использовать общий ключ. Введите PSK в поле Ключ.
Затем настройте следующие параметры:
- Тип VPN — выберите Протокол L2TP с IPsec (L2TP/IPsec).
- Шифрование данных — выберите Обязательное шифрование (отключиться, если нет шифрования).
- Разрешить следующие протоколы — отметьте Протокол Microsoft CHAP версии 2 (MS-CHAP v2).
После этого подключение готово к использованию. Нажмите на значок сети в трее, выберите созданное подключение и нажмите Подключить.
Проблемы с NAT: как включить NAT-T через реестр
Одна из самых частых проблем с L2TP/IPsec на Windows — невозможность подключиться, если клиент или сервер находятся за NAT. Протокол IPsec изначально не поддерживает NAT, поэтому используется NAT-T (NAT Traversal), который инкапсулирует ESP-пакеты в UDP 4500. Однако Windows по умолчанию не включает NAT-T, если и клиент, и сервер находятся за NAT.
Чтобы исправить это, нужно изменить параметр реестра AssumeUDPEncapsulationContextOnSendRule. Вот как это сделать:
- Откройте regedit (Win + R, введите
regedit, нажмите Enter). - Перейдите в ветку
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent. - Создайте параметр DWORD (32 бита) с именем
AssumeUDPEncapsulationContextOnSendRule. - Установите значение
2.
Значение 2 означает, что и клиент, и сервер находятся за NAT. Если только сервер за NAT, можно использовать 1, но для большинства случаев подходит 2.
После изменения реестра обязательно перезагрузите компьютер. Параметр не подхватывается на лету, перезапуска службы IKEEXT недостаточно.
Альтернативный способ — выполнить команду в PowerShell от имени администратора:
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Value 2 -PropertyType DWORD -ForceЕсли VPN-сервер также работает на Windows и находится за NAT, этот параметр нужно выставить и на сервере. Для Linux-серверов (Libreswan, strongSwan) такая проблема не характерна — они изначально поддерживают NAT-T.
Типичные ошибки подключения и их решение
При подключении к L2TP/IPsec VPN пользователи часто сталкиваются с ошибками. Вот самые распространённые коды и способы их устранения:
- Ошибка 809: "Соединение не может быть установлено". Обычно означает, что UDP 500 или 4500 заблокированы файрволом, или NAT-T не включён. Проверьте настройки реестра, как описано выше, и убедитесь, что порты открыты.
- Ошибка 789: "Попытка L2TP-подключения не удалась из-за ошибки на уровне безопасности". Причина — неверный PSK или несовпадение параметров IKE. Проверьте, что ключ введён без пробелов, и что клиент и сервер используют одинаковые алгоритмы шифрования.
- Ошибка 691: "Неверное имя пользователя или пароль". Убедитесь, что вы используете учётную запись, созданную именно для VPN, а не системного пользователя.
- Ошибка 619: "Соединение закрыто удалённой стороной". Проверьте логи на сервере, возможно, превышен лимит одновременных подключений.
- Ошибка 720: "Не удалось согласовать PPP-соединение". Часто связана с проблемами MTU. Попробуйте уменьшить MTU на VPN-интерфейсе.
Если ошибка 809 появляется после правки реестра, проблема может быть в роутере. Некоторые бытовые роутеры с включённым SPI Firewall или устаревшей прошивкой режут UDP 4500. Попробуйте отключить встроенный VPN-passthrough или ALG для IPsec в настройках роутера.
Дополнительные настройки: шлюз, протоколы аутентификации и службы
Иногда после создания подключения требуется дополнительная настройка. Например, если вы не хотите, чтобы весь трафик шёл через VPN, можно отключить шлюз в удалённой сети. Для этого:
- Откройте Панель управления → Сетевые подключения.
- Кликните правой кнопкой мыши по VPN-подключению и выберите Свойства.
- Перейдите на вкладку Сеть, выделите IP версии 4 (TCP/IPv4) и нажмите Свойства.
- Нажмите Дополнительно и снимите галочку Использовать основной шлюз в удалённой сети.
Также проверьте, что на вкладке Безопасность разрешены только нужные протоколы аутентификации. По умолчанию Windows использует MS-CHAP v2, что безопасно. Если сервер требует другой протокол, например PAP, его нужно включить, но это не рекомендуется из-за низкой безопасности.
Убедитесь, что службы IKE and AuthIP IPsec Keying Modules и IPsec Policy Agent запущены. Проверить можно командой:
Get-Service IKEEXT, PolicyAgentЕсли службы остановлены, запустите их. В редких случаях помогает удаление виртуальных адаптеров WAN Miniport (L2TP) и WAN Miniport (IKEv2) в диспетчере устройств и перезагрузка — Windows восстановит их с настройками по умолчанию.
Автоматизация подключения через PowerShell
Если вам нужно настроить VPN на нескольких компьютерах или пересоздать подключение после переустановки Windows, удобно использовать PowerShell. Вот пример скрипта, который создаёт подключение L2TP/IPsec:
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Эти параметры должны совпадать с настройками сервера, иначе клиент получит ошибку 789. Если сервер настроен на дефолтные параметры Libreswan или strongSwan, сверьтесь с его конфигом.
Логин и пароль в скрипт включать не рекомендуется, чтобы не хранить их в открытом виде. Пользователь может ввести их при первом подключении через rasdial или диалог Windows:
rasdial "Office L2TP" username passwordДля автоматического запуска VPN при старте системы можно использовать планировщик задач, но пароль всё равно придётся передавать. В этом случае лучше использовать защищённое хранилище через Get-Credential и Export-Clixml.
Проверка работоспособности туннеля и диагностика
После подключения важно убедиться, что туннель действительно работает, а не просто "висит подключённым". Вот несколько способов проверки:
- Выполните
ipconfig /allи найдите виртуальный адаптер PPP. У него должен быть IP-адрес из диапазона, который выдаёт сервер. - Используйте
Get-NetIPConfiguration | Where-Object InterfaceAlias -like "*VPN*", чтобы увидеть шлюз и DNS, полученные по VPN. - Проверьте маршрут до внешнего IP через туннель:
tracert 8.8.8.8. Если первым хопом идёт адрес из подсети VPN-сервера, весь трафик идёт через туннель.
Если DNS остался локальным (от домашнего роутера), это не влияет на работу туннеля, но может вызвать утечки DNS. Для решения этой проблемы настройте DNS на VPN-интерфейсе вручную.
Если подключение не устанавливается, проверьте логи на сервере. Для Linux-серверов это journalctl -u ipsec, для Windows Server — журнал RRAS. Также обратите внимание на лимит одновременных подключений: на некоторых серверах он ограничен.
Частые вопросы о L2TP/IPsec в Windows
Можно ли использовать L2TP/IPsec без PSK, только на сертификатах?
Да, но тогда это будет L2TP/IPsec на машинных сертификатах. Сертификаты клиента и сервера должны быть выданы одним доверенным центром сертификации. Это более безопасный вариант, но настройка сложнее.
Почему подключение работает из дома, но не работает с телефона в мобильной сети?
Операторы сотовой связи часто используют carrier-grade NAT (CGNAT) с агрессивной фильтрацией UDP. Из-за этого L2TP/IPsec на мобильных сетях менее надёжен. Для мобильных сценариев лучше подходит WireGuard или IKEv2.
Нужно ли открывать порт 1701 (L2TP)?
Нет, если используется NAT-T. Весь L2TP-трафик (включая порт 1701) инкапсулируется в UDP 4500. Порт 1701 нужен только для прямого L2TP без IPsec, что небезопасно.
Безопасно ли значение AssumeUDPEncapsulationContextOnSendRule = 2?
Само по себе значение не снижает криптографическую стойкость. Оно лишь разрешает NAT-T, что необходимо для работы за NAT. Однако если вы находитесь в доверенной сети, можно оставить значение 0.
Вопросы и ответы
Какие порты нужно открыть для L2TP/IPsec VPN?
Для L2TP/IPsec необходимо открыть UDP 500 (IKE), UDP 4500 (NAT-T) и протокол ESP (IP-протокол 50). Если сервер за NAT, ESP инкапсулируется в UDP 4500, поэтому порт 1701 (L2TP) открывать не нужно — он используется только для прямого L2TP без IPsec.
Почему возникает ошибка 809 при подключении к L2TP/IPsec?
Ошибка 809 обычно означает, что UDP 500 или 4500 заблокированы файрволом, или NAT-T не включён. Проверьте, что порты открыты, и установите параметр реестра AssumeUDPEncapsulationContextOnSendRule = 2, затем перезагрузите компьютер. Также проверьте настройки роутера — некоторые модели режут UDP 4500.
Как включить NAT-T в Windows для L2TP/IPsec?
Откройте regedit, перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent, создайте DWORD-параметр AssumeUDPEncapsulationContextOnSendRule и установите значение 2. После этого перезагрузите компьютер. Альтернативно можно выполнить команду PowerShell: New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Value 2 -PropertyType DWORD -Force
Что делать, если L2TP/IPsec работает только с одного компьютера в локальной сети?
Это известная проблема Windows: если несколько компьютеров в одной локальной сети пытаются подключиться к одному L2TP/IPsec-серверу через общий внешний IP, возникает ошибка 789 или 809. Исправление: в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters установите AllowL2TPWeakCrypto = 1 и ProhibitIPSec = 0, затем перезагрузите компьютер.
Как настроить L2TP/IPsec VPN в Windows 10 через PowerShell?
Используйте командлет Add-VpnConnection с параметрами -TunnelType L2tp и -L2tpPsk. Например: Add-VpnConnection -Name "Office L2TP" -ServerAddress "vpn.example.com" -TunnelType L2tp -L2tpPsk "ваш-ключ" -AuthenticationMethod MSChapv2 -EncryptionLevel Required -RememberCredential -Force. Затем настройте IPsec через Set-VpnConnectionIPsecConfiguration.
Почему L2TP/IPsec не работает на Windows, но работает на Linux или Android?
Windows по умолчанию не поддерживает NAT-T, если и клиент, и сервер находятся за NAT. Это связано с параметром AssumeUDPEncapsulationContextOnSendRule, который по умолчанию равен 0. Linux и Android автоматически включают NAT-T, поэтому проблем нет. Исправление — установить значение 2 в реестре Windows.
Как проверить, что VPN-туннель действительно работает?
Выполните ipconfig /all и найдите виртуальный адаптер PPP с IP-адресом из подсети VPN-сервера. Затем проверьте маршрут: tracert 8.8.8.8. Если первый хоп — адрес из VPN-подсети, трафик идёт через туннель. Также можно использовать Get-NetIPConfiguration для проверки DNS и шлюза.