Tři věci se musí shodnout, než tunel Kerio začne přenášet provoz: adresa na rozhraní kvnet, hodnota, kterou klient zaznamenal do logu, a to, co očekává zásada serveru nebo DHCP. Když se neshodují, tunel se přesto autentizuje a přesto se zvedne, a právě proto je selhání matoucí. Rozhraní se vytváří pro každé připojení, takže adresa nastavená ručně patří jen té relaci a ničemu jinému. To je podoba problému a řešením je hook, nikoli konfigurační soubor. Zbytek je, kde hodnotu číst a kde ji použít.

Proč se adresa stále vrací

kvnet je virtuální adaptér, který klient vytvoří při zahájení připojení a odstraní při jeho ukončení. Ruční ip link set tedy přežije přesně tak dlouho jako relace, na kterou byl použit, a další připojení začíná tím, co klient přidělí. Na stroji, kde klient nedokáže použít očekávanou adresu, každé opětovné připojení znovu zavádí stejný nesoulad a pravidlo pronájmu nebo přístupu zařízení znovu odmítne.

Tento vzorec je sám o sobě diagnostický. Tunel, který funguje jednu relaci a u další selže, není problém přihlašovacích údajů, protože ty se mezi připojeními nemění.

Čtěte hodnotu z klienta, ne z rozhraní

Klient pro Linux zapisuje podrobnosti vyjednávání do svého ladicího logu a adresa, kterou hodlá použít, se tam objevuje jako poslední token ve tvaru adresy v sekvenci připojení. Porovnejte to s tím, co jádro skutečně drží, což je vzdáleno jeden readlink: cat /sys/class/net/kvnet/address.

Pokud se obě liší, klient správnou hodnotu znal a nedokázal ji použít, a hook, který ji použije poté, co rozhraní existuje, tuto mezeru uzavře. Pokud log neobsahuje žádnou adresu, problém je dříve a patří k verzi klienta nebo k profilu serveru, nikoli ke skriptu.

Použijte ji poté, co rozhraní existuje

Uživatelé NetworkManageru mohou vložit skript do jeho adresáře dispatcheru a jednat jen tehdy, když se rozhraní VPN zvedne. Klient spravovaný systemd vyžaduje větší péči: drop-in spouštěný při startu služby se obvykle aktivuje dříve, než adaptér existuje, takže hook musí na rozhraní počkat, místo aby je předpokládal. Adresu nastavte až tehdy, a pokud ji jádro odmítne, dokud je spojení zvednuté, stáhněte je, nastavte adresu a znovu je zvedněte. Přečtěte extrahovaný token zpět přes vzor MAC, než jej předáte do ip link, aby se neočekávaný řádek logu nemohl stát argumentem.

Cokoli, co běží jako root z logu klienta, si zaslouží úzké vlastnictví: soubor vlastněný rootem, nezapisovatelný ostatními a žádná interpolace shellu nad rámec ověřené adresy. Kontrolu vzoru držte uvnitř skriptu. Nedovolte, aby obsah logu rozhodoval, který příkaz se spustí.

Ověřujte pronájem, ne spojení

ip -4 -o addr show dev kvnet by mělo ukázat adresu v očekávaném rozsahu, ip neigh show dev kvnet by mělo ukázat bránu a jedna služba za VPN by měla odpovědět. Poté se jednou odpojte a znovu připojte; pokud se adresa vrátí, hook se spouští na špatnou událost nebo se nespouští vůbec.

Rozhraní, které se objeví se správnou adresou a nikdy nedostane pronájem, ukazuje na stranu serveru. To je jiná kontrola a obvykle jiný tým. Než hook znovu upravíte, potvrďte, že účet je povolen a že pool ještě má adresu.

Po upgradu si obejití znovu prohlédněte

Sestavení klienta, které adresu nastavuje správně, nechává váš hook používat zastaralou hodnotu, což je nová závada zavedená opravou. Nikdy také nekopírujte MAC z jiného stroje nebo z příspěvku na fóru; použijte hodnotu, kterou tento klient loguje pro tento účet, a poznamenejte datum, kdy jste ji ověřili.

Držte skript dost krátký, aby se dal přečíst na jedno posezení. Obejití, která parsují logy, jsou svou povahou dočasná. Přežijí ta, kterým budoucí čtenář porozumí bez původního vlákna.

Související články