Лаптопът се свързва с офис VPN и всичко го следва, включително уеб страницата на принтер и една вътрешна мрежа, която отговаря само в локалната мрежа. Ръчно направен маршрут оправя това за час, после връзката пада, връща се и изключението изчезва. С тунела няма нищо нередно: Windows поддържа една таблица за маршрутизиране и VPN адаптерът пренаписва своя дял от нея при всяко свързване. Остава това, което живее извън собствените записи на адаптера.

Кой запис поема тунелът

Запишете таблицата два пъти — веднъж с изключен тунел и веднъж с включен — и сравнете редовете по подразбиране. Когато профилът заяви префикса по подразбиране, записът на адаптера е най-широкият ред в таблицата, така че всяко изключение трябва да е по-тясно от него. Това е аритметика за дължината на префикса, а не твърдение за доверие или политика. Тя също определя кой интерфейс трябва да назове изключението.

Запишете индекса на интерфейса и локалния шлюз, преди да продължите, защото и двете се променят, когато машината се присъедини към друга мрежа. Командите по-долу ги четат от машината, а не от паметта.

route print -4
Find-NetRoute -RemoteIPAddress 198.51.100.30

Втората команда отчита интерфейса и следващия хоп, които този един адрес би използвал в момента, което е по-добре от четене на четиридесет реда и гадаене. Изпълнете я преди и след свързване и имате двойката, която си струва да прикачите към запис за промяна. И двата изхода дават числата, използвани в останалата част от страницата.

Маршрутът до хост печели по специфичност

Съвпадението по най-дълъг префикс решава победителя, така че /32 през физическия шлюз побеждава маршрута по подразбиране през тунела, без тунелът да бъде докосван. Трафикът към този адрес излиза през локалния интерфейс, докато всичко останало запазва пътя си. Тунелът все още носи маршрута по подразбиране и просто спира да бъде единственият кандидат за тази дестинация. Дължината на префикса е единственият лост, който таблицата предлага, и за тази задача е достатъчно.

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

За всичко по-долу приемаме връзка с име Office, локален шлюз 10.0.0.1 на интерфейс 7 и дестинация 198.51.100.30. Това са заместващи, а не стойности по подразбиране, и командите по-горе дават стойностите, които вашата машина наистина използва. Пазете тази бележка за заместване заедно с промяната, за да не копира следващият читател числата.

Направете маршрута да преживее следващото пресвързване

Windows не предлага инструкция за изключване на VPN връзка, така че изключението трябва да живее на физическия интерфейс, където адаптерът няма да го пренапише. Командлетът, който изглежда като отговора, прави обратното: Add-VpnConnectionRoute премества префикс в тунела, а това е огледалният случай, в който разделен профил трябва да носи една дестинация и да остави останалото локално. Прибягването до него тук гарантира, че трафикът, който искахте да остане навън, влиза.

Ръчната форма е една команда. Слабостта ѝ е промяната на мрежата, а не пресвързването.

route -p add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7

Това преживява рестартиране благодарение на -p и изпраща един адрес през интерфейс 7, докато тунелът носи всичко останало. Преместете лаптопа в друга мрежа и шлюзът и индексът остаряват, така че записът се проваля тихо. Запишете кой го притежава и кога трябва да се премахне.

Скриптът за свързване е по-издръжливата версия, защото добавя изключението отново след всяка връзка, вместо да се надява, че записът е оцелял. Двата реда по-долу принадлежат на това, което стартира тунела, а не на скрипт за влизане.

rasdial Office
route add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7

Каквото вдига тунела, е правилното място за втория ред, и rasdial се връща само след като връзката е установена, така че маршрутът попада зад собствените записи на адаптера. Изпълнете го отново след събуждане, защото заспиването може да изпусне маршрута и да остави тунела вдигнат. Ако задачата е обратната — да вкарате един префикс в тунела, а останалото да остане локално — тогава Add-VpnConnectionRoute е правилният инструмент.

Маршрутизирането не може да избере процес

Понякога изискването е по-тясно от дестинация: една програма трябва да поеме локалния път, докато всичко останало остава в тунела. Маршрутизирането не може да изрази това, защото съпоставя адреси, а не процеси. Работещият модел изтласква проблема в стартера.

Дръжте профила далеч от маршрута по подразбиране и стартирайте тази единствена програма, вързана към адреса на локалния интерфейс, така че изключението става команда за стартиране, а тунелът запазва това, което вече е обработвал. В таблицата за маршрутизиране нищо не се променя и точно затова това преживява пресвързвания. Това също означава, че тунелът не бива да притежава маршрута по подразбиране от самото начало, така че това е различен дизайн, а не кръпка на предишния.

Слабостта му е оперативна, а не техническа. Програмата трябва винаги да стартира през обвивката и ако връзката липсва след събуждане, тя тихо поема какъвто път предложи таблицата. Това е поносимо за браузър, който отваряте нарочно, и неприемливо за всичко, което никога не бива да напуска тунела.

Връзките за отделен потребител също не решават това. Windows може да обвърже връзка с акаунт, докато таблицата за маршрутизиране остава за цялата машина, така че обвързана с акаунт връзка, държаща маршрут по подразбиране, все още пренасочва всеки процес на машината, включително други сесии. Обхватът става реален само когато обхватът на маршрута съвпадне с акаунта. Затова двама души, споделящи един лаптоп, споделят една таблица и вторият наследява какъвто тунел е стартирал първият.

Потвърдете, че изключението е преживяло пресвързване

Тествайте промяната така, както ще се провали: прекъснете, свържете отново, отворете нова програма, после поискайте един адрес, който трябва да остане локален, и един, който трябва да мине през тунела. Сравнете и двата с Find-NetRoute в свързано състояние.

Ако префиксът липсва в таблицата след пресвързване, той живее в грешен обект, а не в грешен формат. Преместете го на физическия интерфейс и повторете теста. Пазете двата изхода от командите заедно със записа за промяната, защото снимка на работещото състояние отговаря по-късно на повече въпроси от абзац обяснение. Следващият човек ще иска да знае какво е произвело свързването, а не какво сте възнамерявали да произведе.

Подобни статии