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 филтриране, и то трябва да бъде възпроизведено умишлено или прието като отсъстващо.
Каквото и да изберете, запишете кой слой е бил собственик на блокирането. Пакет, който така и не е напуснал машината, е резултат от филтър и никаква промяна в маршрутизацията не може да поправи филтър.