Откройте диалог VPN в Windows после сбоя, и он даст вам номер и предложение, причём предложение обычно менее полезная половина. Номер указывает, на каком этапе соединения произошёл сбой, а этап определяет, какой журнал, какую настройку и какую команду смотреть дальше. Последовательный проход по этапам занимает около десяти минут и предотвращает знакомую последовательность: переустановку адаптеров, смену протоколов и сброс стека, чтобы починить учётную запись, которой никогда не разрешали дозваниваться.

Читайте номер как этап

Собственное соединение проходит четыре вехи. Оно доходит до сервера и устанавливает канал, согласует безопасность, аутентифицирует пользователя и применяет адресацию с маршрутизацией. Сбой на каждой из них оставляет разные доказательства, а код, относящийся к одному этапу, ничего полезного не говорит об остальных.

Ошибка, которой нужно избегать, — считать код степенью серьёзности. Сбой канала и сбой авторизации оба читаются как "не удалось подключиться", и больше ничего общего у них нет. Серьёзность говорит, насколько это срочно; этап говорит, что открывать.

Code familyStageWhere the evidence lives
829, 703Link or dial completionClient event log, remote listener reachability
720PPP negotiation and miniport bindingAdapter state, bindings, client log detail
691, 649, 812Identity and authorizationGateway or authentication server decision
Connected, no trafficAddressing, routing and resolutionRoute table and resolver configuration

Первый этап: канал и попытка дозвона

829 означает, что нижележащий канал оборвался. Код не говорит, перестала ли отвечать удалённая сторона, промежуточное устройство убило сеанс или политика на клиенте закрыла его. Код завершения дозвона вроде 703 ещё раньше: попытка так и не дошла до канала, что обычно указывает на профиль, состояние службы или локальную политику.

Get-VpnConnection -Name 'Corp' | Select-Object Name,ServerAddress,TunnelType,AuthenticationMethod,ConnectionStatus
Test-NetConnection -ComputerName vpn.example.net -Port 443
Get-WinEvent -LogName Application -MaxEvents 200 | Where-Object ProviderName -match 'RasClient' | Select-Object -First 15 TimeCreated,Id,Message

Запрос событий — та часть, которую люди пропускают. Клиентская запись с отметкой времени и именем интерфейса ценнее диалога, потому что она говорит, покидала ли попытка машину вообще. Нет записи и нет ответа слушателя — это проблема доступности, и никакое редактирование клиента её не меняет.

Если тот же профиль работает в другой сети, остановитесь здесь. Код описывает состояние пути, а не ошибку конфигурации, и следующее полезное сравнение — два снимка, а не ещё одна переустановка.

Второй этап: PPP и привязка минипорта

720 находится между каналом и пользователем. Туннель поднялся, и затем уровень PPP не смог согласовать адрес или протокол управления, что часто является проблемой привязки на клиенте, а не отклонёнными учётными данными. Это различие — вся ценность кода: он говорит, что учётные данные так и не были достигнуты, поэтому учётная запись не подозреваемая.

Get-NetAdapter -IncludeHidden | Where-Object InterfaceDescription -match 'WAN Miniport' | Select-Object Name,Status,ifIndex
Get-NetAdapterBinding | Where-Object ComponentID -match 'ms_pptp|ms_l2tp|ms_sstp|ms_agile' | Select-Object Name,ComponentID,Enabled

Читать эти два вывода информативнее, чем сбрасывать что угодно. Минипорт, который есть, но не запущен, или привязка протокола, отключённая другим программным обеспечением, дают ровно сбой этого этапа. И то и другое исправляется без вмешательства в остальной стек. Полный сброс, напротив, удаляет адресацию и состояние фильтрации, не имевшие отношения к неисправности.

Третий этап: идентичность и авторизация

691 означает, что учётные данные отклонены. 649 означает, что учётной записи не разрешён дозвон, а 812 означает, что политика удалённого доступа отклонила подключение. Это решения, а не транспортные сбои, и клиент может только сообщить о них.

Доказательства на другой стороне. Попросите оператора шлюза о попытке с этой отметкой времени и о политике, которая совпала; спросите владельца каталога, есть ли у учётной записи разрешение на дозвон и входит ли она в группу, которую требует политика. Смена типа туннеля или переустановка клиента не могут изменить решение, принятое относительно идентичности.

Полезная привычка на этом этапе — записать в заявку точную строку учётной записи, включая любой префикс домена. Удивительно много случаев 691 — это сохранённые учётные данные для неправильного домена, и это видно в строке учётной записи, а не в настройках протокола.

Четвёртый этап: подключено, и ничего не работает

Соединение может завершиться и всё равно быть бесполезным. У него есть адрес, клиент сообщает об успехе, а каждый запрос приложения заканчивается тайм-аутом. В диалоге это никак не отражено, и кода для проверки нет. В этот момент диалог закончен, а полезные доказательства находятся в другом месте.

Get-NetRoute -DestinationPrefix 10.24.0.0/16 | Select-Object DestinationPrefix,NextHop,InterfaceAlias
Resolve-DnsName files.corp.example.internal
Test-NetConnection -ComputerName 10.24.6.15 -Port 445

Если маршрута нет, сервер его не протолкнул или клиент его отбросил. Если маршрут есть, а имя не разрешается, проблема в разрешении имён. Если работает и то и другое, а приложение всё равно падает, вы уже за туннелем и в собственной конфигурации приложения.

Держите изменения на одном слое на тест. Каждая правка перед следующей попыткой становится частью контекста следующего кода, а код, описывающий вашу последнюю правку, хуже, чем отсутствие кода.

Одна попытка, одно изменение, одна запись

Каким бы ни был этап, запись должна содержать код, сообщение, имя профиля, отметку времени и сеть, в которой вы находились. Пять полей, и каждое из них уже перед вами в диалоге или в журнале клиента. Этот набор достаточно мал, чтобы вставить его в заявку, и достаточно конкретен, чтобы другой человек смог воспроизвести.

Затем положите эту отметку времени рядом с записью на другой стороне. Таблица в верхней части этой страницы говорит, какому этапу принадлежит каждое расхождение. Без второй записи код лишь сужает поиск; с ней этап решён. Именно сравнение превращает номер в диагноз, а не в догадку.

Эта привычка охватывает почти любую собственную неисправность VPN в Windows, и ни одна из ветвей не требует переустановки чего-либо. Диалог всегда говорил, какая из них у вас; работа в том, чтобы отказываться считать их все одной проблемой.

Похожие статьи