Три неща трябва да съвпаднат, преди тунел на Kerio да пренася трафик: адресът на интерфейса kvnet, стойността, която клиентът е записал в дневника, и това, което очаква сървърната политика или DHCP. Когато не съвпадат, тунелът все пак се удостоверява и все пак се вдига, и точно това прави повредата объркваща. Интерфейсът се създава при всяка връзка, така че адрес, зададен на ръка, принадлежи на тази сесия и на нищо друго. Това е формата на проблема, а решението е кука, а не конфигурационен файл. Останалото е откъде да се чете стойността и къде да се приложи.

Защо адресът постоянно се връща

kvnet е виртуален адаптер, който клиентът създава при започване на връзка и премахва при нейния край. Затова ръчната команда ip link set оцелява точно колкото сесията, към която е приложена, а следващата връзка започва с каквото клиентът зададе. На машина, където клиентът не приложи очаквания адрес, всяко повторно свързване връща същото несъответствие и правилото за наем или достъп отново отхвърля устройството.

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

Четете стойността от клиента, не от интерфейса

Клиентът за Linux записва подробностите за договарянето в своя дневник за отстраняване на грешки и адресът, който възнамерява да използва, се появява там като последният токен с форма на адрес от последователността на връзката. Сравнете го с това, което ядрото действително държи, а то е на един readlink разстояние: cat /sys/class/net/kvnet/address.

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

Приложете го след съществуването на интерфейса

Потребителите на NetworkManager могат да поставят скрипт в неговата директория за диспечер и да действат само когато интерфейсът на VPN се вдигне. Клиент, управляван от systemd, изисква повече внимание: drop-in, който се изпълнява при стартиране на услугата, обикновено се задейства преди адаптерът да съществува, така че куката трябва да изчака интерфейса, вместо да го предполага. Задайте адреса тогава и ако ядрото откаже, докато връзката е вдигната, я спуснете, задайте адреса и я вдигнете отново. Прочетете извлечения токен обратно през шаблон за MAC, преди да го подадете на ip link, за да не може неочакван ред от дневника да стане аргумент.

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

Проверявайте наема, а не връзката

ip -4 -o addr show dev kvnet трябва да покаже адрес в очаквания диапазон, ip neigh show dev kvnet трябва да покаже шлюза, а една услуга зад VPN трябва да отговори. След това прекъснете и се свържете отново веднъж; ако адресът се върне, куката се задейства на грешно събитие или изобщо не се задейства.

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

Преразгледайте заобиколното решение след надграждане

Издание на клиента, което задава адреса правилно, оставя вашата кука да прилага остаряла стойност, което е нова повреда, внесена от поправка. Никога не копирайте MAC от друга машина или от публикация във форум; използвайте стойността, която този клиент записва за този акаунт, и запишете датата, на която сте я проверили.

Дръжте скрипта достатъчно кратък, за да се прочете наведнъж. Заобиколните решения, които разбират дневници, са временни по своята същност. Оцеляват тези, които бъдещ читател може да разбере без първоначалната тема.

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