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, і це треба навмисно відтворити або прийняти як відсутнє.
Що б ви не вибрали, запишіть, якому рівню належало блокування. Пакет, який так і не покинув машину, — це результат фільтра, і жодна зміна маршрутизації не виправить фільтр.