Kerio na Linuxe: dať kvnetu MAC, ktorý server očakáva
kvnet sa pri každom pripojení vytvára nanovo, takže jednorazová zmena adresy sa stratí. Prečítajte hodnotu, ktorú klient zaznamenal, a aplikujte ju z háku po pripojení.
Tri veci sa musia zhodovať, kým tunel Kerio prenesie prevádzku: adresa na rozhraní kvnet, hodnota, ktorú klient zaznamenal, a to, čo očakáva serverová politika alebo DHCP. Keď sa nezhodujú, tunel sa napriek tomu autentifikuje a napriek tomu sa zdvihne, a práve preto je zlyhanie mätúce. Rozhranie sa vytvára pri každom pripojení, takže adresa nastavená ručne patrí len tejto relácii a ničomu inému. To je podoba problému a riešením je hák, nie konfiguračný súbor. Zvyšok je, kde hodnotu čítať a kde ju použiť.
Prečo sa adresa stále vracia
kvnet je virtuálny adaptér, ktorý klient vytvorí pri začatí pripojenia a odstráni pri jeho ukončení. Ručný ip link set preto prežije presne tak dlho ako relácia, na ktorú bol použitý, a ďalšie pripojenie začína tým, čo klient pridelí. Na stroji, kde klient nedokáže použiť očakávanú adresu, každé opätovné pripojenie znova zavádza ten istý nesúlad a pravidlo prenájmu alebo prístupu zariadenie opäť odmietne.
Tento vzor je sám o sebe diagnostický. Tunel, ktorý funguje jednu reláciu a zlyhá v ďalšej, nie je problém prihlasovacích údajov, pretože tie sa medzi pripojeniami nemenia.
Čítajte hodnotu z klienta, nie z rozhrania
Klient pre Linux zapisuje podrobnosti rokovania do svojho ladiacého logu a adresa, ktorú hodlá použiť, sa tam objavuje ako posledný token v tvare adresy v sekvencii pripojenia. Porovnajte to s tým, čo jadro skutočne drží, a to je vzdialené jeden readlink: cat /sys/class/net/kvnet/address.
Ak sa obe líšia, klient poznal správnu hodnotu a nedokázal ju použiť, a hák, ktorý ju použije po tom, čo rozhranie existuje, túto medzeru uzavrie. Ak log neobsahuje žiadnu adresu, problém je skorší a patrí k verzii klienta alebo k profilu servera, nie k skriptu.
Použite ju po tom, čo rozhranie existuje
Používatelia NetworkManageru môžu vložiť skript do jeho adresára dispečera a konať len vtedy, keď sa rozhranie VPN zdvihne. Klient spravovaný systemd vyžaduje viac starostlivosti: drop-in spúšťaný pri štarte služby sa zvyčajne aktivuje skôr, než adaptér existuje, takže hák musí na rozhranie počkať, namiesto toho, aby ho predpokladal. Nastavte adresu až vtedy, a ak ju jadro odmietne, kým je spojenie zdvihnuté, stiahnite ho, nastavte adresu a znova ho zdvihnite. Prečítajte extrahovaný token späť cez vzor MAC, než ho odovzdáte do ip link, aby sa neočakávaný riadok logu nemohol stať argumentom.
Čokoľvek, čo beží ako root z logu klienta, si zaslúži úzke vlastníctvo: súbor vlastnený rootom, ostatnými nezapisovateľný a žiadna interpolácia shellu nad rámec overenej adresy. Kontrolu vzoru držte vnútri skriptu. Nedovoľte, aby obsah logu rozhodoval, ktorý príkaz sa spustí.
Overujte prenájom, nie spojenie
ip -4 -o addr show dev kvnet by malo ukázať adresu v očakávanom rozsahu, ip neigh show dev kvnet by malo ukázať bránu, a jedna služba za VPN by mala odpovedať. Potom sa raz odpojte a znova pripojte; ak sa adresa vráti, hák sa spúšťa na nesprávnu udalosť alebo sa nespúšťa vôbec.
Rozhranie, ktoré sa objaví so správnou adresou a nikdy nezíska prenájom, ukazuje na stranu servera. To je iná kontrola a zvyčajne iný tím. Pred ďalšou úpravou háku potvrďte, že účet je povolený a že fond ešte má adresu.
Po aktualizácii si obchádzku znova preverte
Zostavenie klienta, ktoré nastavuje adresu správne, necháva váš hák používať zastaranú hodnotu, čo je nová chyba zavedená opravou. Nikdy tiež nekopírujte MAC z iného stroja ani z príspevku na fóre; použite hodnotu, ktorú tento klient zaznamenáva pre tento účet, a poznamenajte dátum, kedy ste ju overili.
Držte skript dosť krátky na prečítanie na jedno posedenie. Obchádzky, ktoré parsujú logy, sú svojou povahou dočasné. Prežijú tie, ktorým budúci čitateľ porozumie bez pôvodného vlákna.