Как устроен VPN IPSec и почему он может не работать
IPSec — это набор протоколов для защиты IP-трафика, который используется в VPN-подключениях L2TP/IPSec и IKEv2. Понимание базовой архитектуры помогает быстрее находить причину сбоя.
Когда вы инициируете подключение L2TP/IPSec, происходит двухэтапный процесс. Сначала клиент отправляет L2TP-пакет на сервер, что запускает согласование IPSec — обмен ключами и установку ассоциаций безопасности (SA). Этот этап может занять от нескольких секунд до двух минут в зависимости от скорости соединения и настроек. Только после успешного согласования IPSec запускается сам сеанс L2TP, и появляется запрос имени пользователя и пароля.
Если сбой происходит до запроса учетных данных, проблема почти всегда связана с IPSec: неверный предварительный ключ, сертификат, блокировка портов или несовместимость NAT. Если запрос пароля появился, но подключение все равно не удается, вероятнее всего, проблема в аутентификации PPP или настройках сервера.
IPSec использует несколько протоколов и портов: UDP 500 для IKE (обмен ключами), UDP 4500 для NAT-T (обход NAT), ESP (протокол 50) для шифрования данных и UDP 1701 для L2TP. Любой из этих элементов может быть заблокирован файрволом или неправильно настроен, что приводит к ошибкам подключения.
Основные ошибки VPN IPSec: коды 789, 809, 800 и другие
При неудачном подключении L2TP/IPSec Windows выводит код ошибки, который помогает сузить круг поиска. Рассмотрим самые распространенные.
Ошибка 789 — "Попытка L2TP-подключения не удалась из-за ошибки, произошедшей на уровне безопасности во время согласований с удаленным компьютером". Эта ошибка часто появляется при неверном предварительном ключе, неподдерживаемом алгоритме шифрования или проблемах с IPSec. Также она возникает, когда несколько Windows-компьютеров в одной локальной сети пытаются одновременно подключиться к одному L2TP/IPSec серверу через общий внешний IP-адрес.
Ошибка 809 — "Не удалось установить связь между компьютером и VPN-сервером". Обычно указывает на проблему с NAT-T: сервер или клиент находится за NAT, и UDP-инкапсуляция не настроена. В этом случае помогает изменение параметра реестра AssumeUDPEncapsulationContextOnSendRule.
Ошибка 800 — "Не удается установить соединение с VPN-сервером". Причины могут быть разными: сервер недоступен, порты закрыты, неверный тип VPN или проблемы с IPSec.
Ошибка 721 — "Удаленный компьютер не отвечает". Хотя эта ошибка чаще связана с PPTP, она также может появляться при проблемах с GRE-протоколом (IP 47) или TCP-портом 1723, если вы используете PPTP. Для L2TP/IPSec эта ошибка менее характерна.
Если вы видите сообщение "Не удалось установить связь по сети между компьютером и VPN-сервером, так как удаленный сервер не отвечает", проверьте доступность сервера, открытые порты и правильность адреса.
Проблемы с NAT и NAT-T: почему L2TP/IPSec не работает за маршрутизатором
Одна из самых частых причин, почему VPN IPSec не работает, — это наличие NAT (трансляции сетевых адресов) между клиентом и сервером. IPSec изначально не поддерживает NAT, поскольку ESP-протокол шифрует содержимое пакета, и изменение IP-адреса при трансляции нарушает целостность.
Для решения этой проблемы был разработан NAT-T (Network Address Translation Traversal), который инкапсулирует IPSec-пакеты в UDP-дейтаграммы на порту 4500. NAT-T включен по умолчанию в большинстве операционных систем, включая iOS, Android и Linux, но в Windows его поддержка для L2TP/IPSec может требовать дополнительной настройки.
Если ваш VPN-сервер находится за NAT, а клиент — в другой сети, вам нужно изменить параметр реестра AssumeUDPEncapsulationContextOnSendRule. Он находится в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent (для Windows 7/10/11 и Server 2008R2/2012R2/2016/2019/2022).
Возможные значения:
- 0 — сервер подключен к интернету без NAT (по умолчанию)
- 1 — сервер находится за NAT
- 2 — и сервер, и клиент находятся за NAT
После изменения параметра необходимо перезагрузить компьютер. Если и сервер, и клиент находятся за NAT, параметр нужно установить на обоих устройствах.
Важно: при использовании NAT-T порт 1701 UDP пробрасывать на сервер не нужно, так как L2TP-трафик инкапсулируется внутри IPSec. Достаточно открыть UDP 500 и UDP 4500.
Настройка реестра для исправления ошибок L2TP/IPSec
Помимо параметра AssumeUDPEncapsulationContextOnSendRule, существуют другие ключи реестра, которые могут помочь, если VPN IPSec не работает.
Параметры для нескольких одновременных подключений
Если несколько Windows-компьютеров в одной локальной сети пытаются подключиться к одному L2TP/IPSec серверу через общий внешний IP, возникает ошибка 789 или 809. Это известный баг Windows-клиента, который не исправлен уже много лет. На Linux, macOS и Android таких проблем нет.
Для решения нужно изменить два параметра в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters:
- AllowL2TPWeakCrypto — установите значение 1 (это разрешает использование слабых алгоритмов MD5 и DES, что необходимо для совместимости)
- ProhibitIPSec — установите значение 0 (это включает IPSec, который может быть отключен сторонними VPN-клиентами)
После изменения перезагрузите компьютер. Эти параметры работают на всех версиях Windows, от XP до Windows 11.
Отключение IPSec для L2TP
В некоторых случаях, когда IPSec не удается согласовать, можно попробовать отключить IPSec и использовать только L2TP. Для этого установите параметр ProhibitIpSec в значение 1 в той же ветке RasMan\Parameters. Однако это снижает безопасность, поэтому используйте только как временное решение для диагностики.
Команды для изменения реестра
Вы можете выполнить изменения через командную строку с правами администратора:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v AllowL2TPWeakCrypto /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v ProhibitIpSec /t REG_DWORD /d 0 /fДля параметра AssumeUDPEncapsulationContextOnSendRule используйте PowerShell:
Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 -ForceПроверка служб Windows, отвечающих за IPSec
Если VPN IPSec не работает, убедитесь, что необходимые службы Windows запущены и работают автоматически. Основные службы:
- IPsec Policy Agent — отвечает за применение политик IPSec, загрузку правил из реестра или Active Directory, управление ключами и фильтрацию трафика.
- IKE and AuthIP IPsec Keying Modules (IKEEXT) — обеспечивает обмен ключами IKE и AuthIP для установления ассоциаций безопасности.
Чтобы проверить их состояние, откройте services.msc (Win+R, введите services.msc) и найдите эти службы. Если они остановлены, запустите их и установите тип запуска "Автоматически".
Для IPsec Policy Agent можно использовать команды:
net start PolicyAgent
sc config PolicyAgent start= autoДля IKEEXT аналогично:
net start IKEEXT
sc config IKEEXT start= autoТакже можно проверить состояние через PowerShell:
Get-Service | Where-Object { $_.Name -match "PolicyAgent|IKEEXT" }Если службы не запускаются, проверьте журнал событий Windows на наличие ошибок, связанных с IPSec или IKE.
Порты и файрвол: что должно быть открыто для L2TP/IPSec и IKEv2
Неправильная конфигурация файрвола — частая причина, почему VPN IPSec не работает. Убедитесь, что на сервере и на маршрутизаторе открыты следующие порты:
- UDP 500 — для IKE (Internet Key Exchange), обмена ключами
- UDP 4500 — для NAT-T (IPSec NAT Traversal), если сервер или клиент за NAT
- UDP 1701 — для L2TP (Layer 2 Tunneling Protocol)
- ESP (IP protocol 50) — для шифрованных данных IPSec
Если вы используете IKEv2, также нужны UDP 500 и UDP 4500, но порт 1701 не требуется.
На стороне Windows Server необходимо создать правила входящих подключений в брандмауэре Windows Defender для этих портов. На сторонних файрволах и роутерах также нужно разрешить соответствующий трафик.
Для PPTP (если вы его используете) нужны TCP 1723 и GRE (IP protocol 47). Ошибка 721 часто связана именно с блокировкой GRE.
Проверить доступность портов можно с помощью утилиты PortQry или командой Test-NetConnection в PowerShell:
Test-NetConnection -ComputerName <IP-адрес> -Port 500 -UdpОбратите внимание, что UDP-проверка может быть неточной, но если порт закрыт, вы получите сообщение об ошибке.
Настройка VPN-подключения L2TP/IPSec в Windows 10 и 11
Если вы создаете новое подключение L2TP/IPSec, важно правильно указать все параметры. Вот пошаговая инструкция.
- Откройте Параметры (Win+I) → Сеть и Интернет → VPN.
- Нажмите "Добавить VPN-подключение".
- Заполните поля:
- Поставщик VPN: "Встроенный в Windows"
- Имя подключения: любое, например "VPN IPSec"
- Имя сервера или адрес: IP-адрес или доменное имя VPN-сервера
- Тип VPN: "L2TP/IPsec с предварительно заданным ключом" (или "L2TP/IPsec с сертификатом", если используется PKI)
- Ключ предварительной аутентификации: общий секретный ключ (PSK)
- Тип данных для входа: "Имя пользователя и пароль"
- Введите имя пользователя и пароль, если они требуются.
- Нажмите "Сохранить".
После создания подключения рекомендуется дополнительно настроить параметры безопасности:
- Откройте "Изменение параметров адаптера" (ncpa.cpl), найдите ваше VPN-подключение, откройте его свойства.
- На вкладке "Безопасность" выберите тип VPN "L2TP/IPSec", нажмите "Дополнительно" и введите предварительный ключ.
- Убедитесь, что шифрование данных установлено как "Требуется (зашифрованное соединение)".
- В разделе аутентификации выберите "MS-CHAP v2" (обычно это единственный протокол, который нужен).
- На вкладке "Сеть" убедитесь, что включен IPv4. Если вы не хотите, чтобы весь трафик шел через VPN, отключите "Использовать основной шлюз в удаленной сети" в свойствах TCP/IPv4 → Дополнительно.
После сохранения настроек попробуйте подключиться. Если появляется ошибка, проверьте журналы и настройки, описанные в других разделах.
Диагностика с помощью команд и журналов
Для точной диагностики проблем с IPSec используйте встроенные инструменты Windows.
Проверка активных ассоциаций безопасности
Выполните в командной строке от имени администратора:
netsh ipsec dynamic show allЭта команда покажет все активные политики IPSec, фильтры и ассоциации безопасности. Если вы видите ошибки или отсутствие SA, это указывает на проблему с согласованием.
Для просмотра быстрых режимов (quick mode) используйте:
netsh ipsec monitor show mmsasПроверка сетевых адаптеров
После подключения VPN проверьте, появился ли новый адаптер и получил ли он IP-адрес:
ipconfig /allЖурналы IPSec и PPP
Windows может вести журналы IPSec и PPP, которые помогут найти причину. Включить их можно в свойствах VPN-подключения или через оснастку "Удаленный доступ".
- Журнал IPSec (Isakmp.log) создается в папке C:\Program Files\Microsoft IPSec VPN
- Журнал PPP (Ppplog.txt) создается в C:\Windows\Ppplog.txt
Эти журналы содержат подробную информацию о процессе согласования и могут быть отправлены администратору сети для анализа.
Проверка доступности сервера
Пинг сервера:
ping <IP-адрес>Если пинг не проходит, проверьте сетевые настройки и файрвол.
Дополнительные советы и типичные ошибки
Вот еще несколько моментов, которые стоит проверить, если VPN IPSec не работает.
Проверьте протоколы аутентификации
В свойствах VPN-подключения на вкладке "Безопасность" убедитесь, что разрешен протокол, поддерживаемый сервером. Обычно достаточно MS-CHAP v2. Если сервер требует другой протокол, например EAP, настройте его соответствующим образом.
Включите LCP Extension
На вкладке "Параметры" → "Параметры PPP" установите флажок "Включить расширение LCP". Это может помочь при проблемах с согласованием.
Переустановите виртуальные адаптеры WAN Miniport
Иногда проблема связана с поврежденными драйверами виртуальных адаптеров. Откройте Диспетчер устройств, найдите раздел "Сетевые адаптеры", удалите WAN Miniport (L2TP) и WAN Miniport (IKEv2), затем перезагрузите компьютер. Windows автоматически переустановит их с настройками по умолчанию.
Проверьте, не блокирует ли антивирус
Некоторые антивирусные программы и файрволы могут блокировать IPSec-трафик. Попробуйте временно отключить их и повторить подключение.
Используйте IKEv2 вместо L2TP
Если L2TP/IPSec не работает, попробуйте использовать IKEv2. Он более современный, лучше работает через NAT и не требует дополнительных настроек реестра. В Windows выберите тип VPN "IKEv2" при создании подключения.
Проверьте настройки сервера
Убедитесь, что VPN-сервер настроен правильно: разрешены нужные протоколы, указан правильный предварительный ключ, открыты порты. Если сервер находится за NAT, на нем также должен быть включен NAT-T.
Вопросы и ответы
Что делать, если при подключении L2TP/IPSec появляется ошибка 789?
Ошибка 789 указывает на проблему с согласованием безопасности IPSec. Проверьте правильность предварительного ключа (PSK) и тип VPN. Если несколько Windows-компьютеров в одной сети подключаются к одному серверу, измените параметры реестра AllowL2TPWeakCrypto=1 и ProhibitIPSec=0 в ветке HKLM\SYSTEM\CurrentControlSet\Services\RasMan\Parameters, затем перезагрузите компьютер.
Почему VPN IPSec не работает, если сервер находится за NAT?
IPSec не поддерживает NAT напрямую, поэтому используется NAT-T (UDP 4500). В Windows необходимо вручную включить поддержку NAT-T, установив параметр AssumeUDPEncapsulationContextOnSendRule в значение 1 или 2 в ветке реестра HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent. Значение 1 — если сервер за NAT, 2 — если и сервер, и клиент за NAT. После изменения перезагрузите компьютер.
Какие порты нужно открыть для L2TP/IPSec VPN?
Для L2TP/IPSec необходимо открыть UDP 500 (IKE), UDP 4500 (NAT-T), UDP 1701 (L2TP) и протокол ESP (IP 50). Если используется IKEv2, достаточно UDP 500 и UDP 4500. Убедитесь, что эти порты открыты на сервере, маршрутизаторе и в брандмауэре Windows.
Как включить службу IPsec Policy Agent в Windows?
Откройте services.msc, найдите службу IPsec Policy Agent, нажмите правой кнопкой мыши → Свойства, установите тип запуска "Автоматически" и нажмите "Запустить". Также можно использовать команды: net start PolicyAgent и sc config PolicyAgent start= auto. Убедитесь, что служба IKEEXT также запущена.
Почему не работает VPN после подключения к интернету?
Убедитесь, что интернет-соединение активно до запуска VPN. Если VPN-подключение настроено на использование шлюза по умолчанию в удаленной сети, весь трафик будет идти через VPN, что может блокировать доступ к локальным ресурсам. Отключите опцию "Использовать основной шлюз в удаленной сети" в свойствах TCP/IPv4, если это не требуется.
Что делать, если ошибка 809 появляется при подключении к L2TP/IPSec?
Ошибка 809 обычно связана с проблемами NAT-T. Установите параметр AssumeUDPEncapsulationContextOnSendRule в значение 2 в ветке HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent, перезагрузите компьютер. Также проверьте, что на сервере и маршрутизаторе открыты UDP 500 и UDP 4500.
Как проверить, работает ли IPSec после настройки?
Используйте команды netsh ipsec dynamic show all и netsh ipsec monitor show mmsas в командной строке от имени администратора. Они покажут активные политики и ассоциации безопасности. Также проверьте наличие VPN-адаптера и IP-адреса командой ipconfig /all.