General failure при ping к адресу LAN с включённым клиентом VPN
Windows сообщает, что вообще не может достучаться ни до одного адаптера, хотя таблица маршрутизации выглядит правильно. Определите, что блокирует: маршрутизация, фильтрация или клиент.
Один маршрут к хосту, один адрес, и ping сразу завершается ошибкой General failure, а не истечением времени ожидания. Именно это различие и есть весь диагноз. Истечение времени означает, что пакет ушёл и что-то его проигнорировало. General failure означает, что Windows вообще не смог передать пакет ни одному интерфейсу.
Поэтому, когда таблица маршрутизации выглядит безупречно, а ошибка по-прежнему General failure, блокировка происходит ниже решения о маршрутизации, и клиент провайдера — то, что работает там.
Прочитайте ошибку до таблицы маршрутизации
Windows возвращает эту ошибку, когда не находит интерфейс для отправки, и ничего не говорит о том, что сделал бы с пакетом получатель. Доступность, межсетевые экраны на дальнем конце и доступность службы — всё это последующие вопросы, до которых вы ещё не дошли.
Классическая конфигурация для этого случая — маршрут к хосту, направляющий один адрес LAN на физический шлюз, чтобы он обходил туннель. route add его принимает, route print его показывает, а ping всё равно не проходит, потому что драйвер фильтра уже решил, что пакету выходить нельзя.
Прежде чем принять это объяснение, убедитесь, что маршрут действительно выбирается: проверьте индекс интерфейса и метрику и удостоверьтесь, что запись не устарела после переподключения. Маршрут, указывающий на интерфейс, которого больше нет, даёт похожую ошибку по гораздо менее интересной причине.
Три уровня, три разных владельца
Побеждает тот уровень, который срабатывает последним, и эти три идут не в том порядке, который предполагает большинство.
| Layer | What it decides |
|---|---|
| Routing table | Which interface and next hop should carry the packet |
| Client filter driver | Whether this packet is permitted to leave outside the tunnel at all |
| Client feature | Whether a named feature, such as LAN blocking, is active right now |
Средний уровень — причина того, что маршрут может быть одновременно правильным и бесполезным. Клиенты провайдеров устанавливают фильтр и правила межсетевого экрана, чтобы трафик вне туннеля отбрасывался, и это тот же механизм, который реализует их kill switch. Ничто в таблице маршрутизации в этом решении не участвует.
Третий уровень объясняет странный отчёт, который приходит регулярно: локальная подсеть недоступна даже после отключения клиента. Служба всё ещё работает, а фильтр всё ещё установлен, поэтому «не подключён» — не то же самое, что «не фильтрует». Выйдите из клиента, а не просто отключите его, прежде чем делать какие-либо выводы.
Что пробовать, по порядку
Начните с удаления функций, которые дёшево удалить и легко восстановить. Обнаружение в LAN, иногда называемое невидимостью в LAN, блокирует трафик к диапазонам частных адресов, чтобы машина оставалась скрытой от соседей. Принтеры, локальные файловые серверы и сам маршрутизатор исчезают за этим переключателем. Функции защиты от угроз, фильтрующие DNS, устанавливают собственные перехватчики, и сообщается, что они ломают локальную доступность почти так же.
Отключите обе, полностью закройте клиент и только затем проверьте адрес. Эта последовательность отделяет функцию, блокирующую трафик, от туннеля, который маршрутизирует его неправильно, и занимает две минуты вместо целого дня со статическими маршрутами.
ping 192.168.1.50
tracert -d 192.168.1.50
route print -4
Если адрес отвечает после отключения функций, у вас решение политики, а не неисправность: выберите между тем, чтобы оставить функцию выключенной, добавить исключение или принять, что машина останется невидимой в локальной сети.
Используйте исключение клиента, узко
Когда функцию нужно оставить включённой, поддерживаемый выход — собственное раздельное туннелирование клиента. Держите исключение настолько узким, насколько позволяет требование, что обычно означает один адрес хоста для одного сервера или один префикс для одного сегмента. Правило, охватывающее весь частный диапазон, — это постоянная дыра, которую никто не вспомнит, что добавлял, и которую никто не отважится удалить.
Затем проверяйте сначала по адресу, а потом по имени. Если адрес отвечает с первым переходом на физическом шлюзе, исключение работает. Если имя по-прежнему не разрешается, вы перешли к DNS, потому что резолвер туннеля не знает локальной зоны, и никакое изменение маршрутизации его этому не научит.
Оставьте маршрут или исключение, но не то и другое, плюс заметку о том, что из них выполняет работу. Два перекрывающихся механизма скрывают друг друга, и следующий человек, который будет отлаживать эту машину, удалит один из них и не увидит никаких изменений.
Когда препятствие — сам клиент
Некоторые сборки фильтруют трафик так, что ни статический маршрут, ни исключение клиента этого не преодолеют. Когда вывод именно такой, честные варианты — дождаться функции обхода или подключиться обычным клиентом OpenVPN с собственным профилем провайдера, что и рекомендовал ответ поддержки производителя в исходном отчёте.
Поймите компромисс, прежде чем делать такую замену. Обычный профиль ведёт себя как любой обычный туннель: он устанавливает свои маршруты и не перестраивает остальной стек, поэтому узкий маршрут к хосту по-прежнему ведёт себя так, как вы ожидаете. Вы теряете всё, что брендовый клиент реализовал вокруг туннеля, включая kill switch и фильтрацию DNS, и это нужно намеренно воспроизвести или принять как отсутствующее.
Что бы вы ни выбрали, запишите, какому уровню принадлежала блокировка. Пакет, который так и не покинул машину, — это результат фильтра, и никакое изменение маршрутизации не исправит фильтр.