Tunel beží, zavriete záložný terminál a VPN padne bez jediného stlačenia klávesy v klientovi. V klientovi AnyConnect pre Linux je hlásenou príčinou účtovanie relácií, nie smerovanie: klient zaznamená, ktoré prihlasovacie relácie existovali pri vzostupe tunela, a koniec ktorejkoľvek z nich považuje za dôvod ho zhodiť. Kontroly nižšie prebiehajú v poradí a prvá neúspešná povie, či vôbec vidíte toto správanie. V bežnom výstupe klienta nie je o termináli ani slovo, preto je prvý inštinkt, obviňovať koncentrátor, zvyčajne zbytočné úsilie.

Nezačínajte úpravou systémových súborov. Každý krok buď vysvetlí pád, alebo odstráni kandidáta, a lacné kroky idú prvé.

Oddeľte pád relácie od pádu podkladovej vrstvy

Po odpojení sa okamžite znova pripojte. Tunel, ktorý sa vráti v priebehu sekúnd, v tej istej sieti a bez nových prihlasovacích údajov, ukazuje na lokálny spúšťač, napríklad zatvorenú reláciu, a nie na mŕtvy uplink, roaming Wi-Fi alebo časový limit nečinnosti na koncentrátore. Tunel, ktorý visí na Connecting alebo zlyháva, kým nezmeníte sieť, je iný článok.

Zapíšte, čo bolo otvorené pri vzostupe tunela: terminál, z ktorého ste spustili klienta, akýkoľvek druhý shell, grafické prihlásenie a akúkoľvek SSH reláciu z iného stroja. Ten zoznam budete o chvíľu potrebovať a rekonštruovať ho z pamäti po ďalšom páde je nespoľahlivé.

Skontrolujte, čo klient zaznamenal pri pripojení

Klient neskúma rodičov procesov ani vlastníctvo terminálu. Urobí snímku množiny prihlasovacích relácií prítomných pri pripojení a neskôr ju porovná; keď člen zmizne, porovnanie zlyhá a tunel ide s ním. Preto môže byť zatvorenie okna, z ktorého ste sa pripojili, neškodné, kým zatvorenie nesúvisiaceho záložného terminálu spojenie zabije: dôležité je, či bola tá relácia v pôvodnej množine. Je to porovnanie množín, nie počítanie, preto môže byť nahradenie relácie rovnako osudné ako strata jednej.

Vypíšte, čo klient mohol vidieť, skôr než čokoľvek zmeníte:

who
w
last -n 10
sudo ls -l /run/utmp

Každý riadok z who je záznam používateľského procesu v utmp. Ak sa vaša relácia objaví dvakrát, raz pre grafické prihlásenie a raz pre terminál, oba záznamy existovali pri pripojení a oba sú kandidáti.

Odstráňte z utmp iba vlastný záznam

Zverejnené obchádzanie urobí reláciu, ktorú sa chystáte použiť, neviditeľnou v utmp pred štartom klienta. Malý program v C prejde getutent(), nájde záznam, ktorého ut_line sa rovná TTY štandardného vstupu, a ten záznam prepíše. Poradie je zámerné: setutent(), čítanie záznamu, kopírovanie jeho ut_id, nastavenie ut_type na DEAD_PROCESS, vymazanie polí používateľa a riadku, zápis späť pomocou pututline(), potom endutent().

Skompilujte ho a potom ho spustite ako root z shellu, ktorý spustí klienta:

sudo ./utmpremove && /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.edu

Dva režimy zlyhania vysvetľujú väčšinu hlásení, že nástroj nič nerobí. Pôsobí na TTY pripojený k štandardnému vstupu, takže spustenie zo skriptu alebo z úlohy cron bez terminálu nezanechá nič na porovnanie. A /run/utmp nie je zapisovateľný pre bežných používateľov, takže spustenie bez roota ticho zlyhá, ak neskontrolujete stav ukončenia.

Overte, že tunel prežije zatvorenie

Otestujte mechanizmus namiesto toho, aby ste ho predpokladali. Pripojte sa z relácie, ktorú chcete zachovať, otvorte druhý terminál, zatvorte ten druhý a potom potvrďte pomocou vpn state a pohľadom na zoznam rozhraní, že tunel stále beží. Ak tunel prežije, spúšťačom bol konkrétny typ relácie a nie každá relácia, a našli ste reláciu, ktorá musí zostať otvorená.

Ak stále padá, sledovaná relácia bola inde, najčastejšie to je grafické prihlásenie, ktoré vytvorilo váš terminál, a odstránenie jedného záznamu TTY nepomôže. Zopakujte pozorovanie s celým zoznamom z prvého kroku, namiesto pridávania ďalších zákrokov.

Keď je prepis utmp nesprávna odpoveď

utmp je zdieľané účtovníctvo, nie súkromná tabuľka. Prepis záznamu ešte živej relácie spôsobí, že who, w a niektoré audítorské nástroje ju vykazujú menej, a program, ktorý neskôr ten istý záznam zatvorí, môže úplne zlyhať. Obmedzte nástroj na svoju vlastnú reláciu, uchovajte kópiu pôvodného súboru a nerobte z neho bootovaciu službu, ktorá vymaže každý záznam.

Ak vaša organizácia zbiera účtovníctvo relácií pre súlad, toto obchádzanie je v rozpore s touto požiadavkou a podporovanou odpoveďou je verzia klienta alebo iný spôsob prístupu, nie záplatovaný utmp. Pre väčšinu ľudí je najmenej invazívnym riešením jednoducho spustiť klienta z relácie, ktorá zostane otvorená celý deň, a nechať to okno na pokoji.

Skôr než uzavriete tiket, zaznamenajte, ktorú reláciu klient sledoval pri vzostupe tunela. Ten jediný riadok mení záhadné odpojenie na reprodukovateľnú podmienku pre ďalšieho človeka pri stroji.

Súvisiace články