Tunel radi, zatvorite jedan dodatni terminal i VPN padne bez ijednog pritiska tipke u klijentu. Kod Linuxovog klijenta AnyConnecta prijavljeni uzrok je obračun sesija, a ne usmjeravanje: klijent bilježi koje su prijavne sesije postojale kad je tunel podignut i kraj bilo koje od njih tretira kao razlog da ga sruši. Provjere u nastavku idu po redu, a prva koja ne uspije pokazuje gledate li uopće ovo ponašanje. Ništa u uobičajenom izlazu klijenta ne spominje terminal, zbog čega je prva pomisao, okriviti koncentrator, obično uzaludan trud.

Ne počinjite uređivanjem sistemskih datoteka. Svaki korak ili objašnjava pad ili uklanja kandidata, a jeftini koraci dolaze prvi.

Odvojite pad sesije od pada donjeg sloja mreže

Ponovno se povežite odmah nakon prekida. Tunel koji se vrati u roku od nekoliko sekundi, na istoj mreži, bez novih vjerodajnica, upućuje na lokalni okidač poput zatvorene sesije, a ne na mrtav uzlazni kanal, Wi-Fi roam ili vremensko ograničenje mirovanja na koncentratoru. Tunel koji visi na Connecting ili ne uspijeva dok ne promijenite mrežu drugi je članak.

Zapišite što je bilo otvoreno kad je tunel podignut: terminal iz kojeg ste pokrenuli klijent, bilo koji drugi shell, grafičku prijavu i bilo koju SSH sesiju s drugog računala. Taj popis trebat će vam za koji trenutak, a rekonstrukcija po sjećanju nakon sljedećeg pada nije pouzdana.

Provjerite što je klijent zabilježio pri povezivanju

Klijent ne pregledava roditelje procesa ni vlasništvo nad terminalom. Snima skup prijavnih sesija prisutnih pri povezivanju i kasnije uspoređuje taj skup; kad član nestane, usporedba ne uspije i tunel ide s njim. Zato zatvaranje prozora iz kojeg ste se povezali može biti bezazleno, dok zatvaranje nepovezanog dodatnog terminala ubija vezu: važno je je li ta sesija bila u izvornom skupu. Provjera je usporedba skupova, a ne brojanje, zbog čega zamjena sesije može biti jednako kobna kao gubitak jedne.

Popišite što je klijent mogao vidjeti prije nego što bilo što promijenite:

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

Svaki redak iz who zapis je korisničkog procesa u utmp. Ako se vaša sesija pojavljuje dvaput, jednom za grafičku prijavu i jednom za terminal, oba zapisa su postojala pri povezivanju i oba su kandidati.

Uklonite samo vlastiti zapis iz utmp

Objavljeni zaobilazni postupak čini sesiju koju ćete upotrijebiti nevidljivom u utmp prije nego što se klijent pokrene. Mali program u C-u prolazi kroz getutent(), pronalazi zapis čiji ut_line odgovara TTY-u standardnog ulaza, a zatim taj zapis prepisuje. Redoslijed je namjeran: setutent(), pročitajte zapis, kopirajte njegov ut_id, postavite ut_type na DEAD_PROCESS, obrišite polja korisnika i retka, zapišite ga natrag pomoću pututline(), a zatim endutent().

Kompilirajte ga, a zatim ga pokrenite kao root iz ljuske koja će pokrenuti klijent:

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

Dva načina neuspjeha objašnjavaju većinu izvješća da alat ništa ne radi. Djeluje na TTY vezan uz standardni ulaz, pa pokretanje iz skripte ili cron zadatka bez terminala ne ostavlja mu ništa za uparivanje. I /run/utmp nije upisiv običnim korisnicima, pa pokretanje bez roota tiho ne uspijeva ako ne provjerite izlazni status.

Potvrdite da tunel preživljava zatvaranje

Testirajte mehanizam umjesto da ga pretpostavljate. Povežite se iz sesije koju namjeravate zadržati, otvorite drugi terminal, zatvorite drugi, a zatim potvrdite da je tunel još uvijek podignut pomoću vpn state i pogleda na popis sučelja. Ako tunel preživi, okidač je bio određeni tip sesije, a ne svaka sesija, i pronašli ste sesiju koja mora ostati otvorena.

Ako i dalje pada, praćena sesija bila je negdje drugdje, najčešće grafička prijava koja je stvorila vaš terminal, i uklanjanje jednog TTY zapisa neće pomoći. Ponovite promatranje s punim popisom iz prvog koraka umjesto da dodajete još kirurgije.

Kada je prepisivanje utmp pogrešan odgovor

utmp je zajedničko obračunavanje, a ne privatna tablica. Prepisivanje zapisa sesije koja je još živa čini da je who, w i neki revizijski alati prikazuju manje no što jest, a program koji kasnije zatvori isti zapis može posve pasti. Držite alat ograničen na vlastitu sesiju, sačuvajte kopiju izvorne datoteke i ne pretvarajte ga u uslugu pri podizanju koja briše svaki zapis.

Ako vaša lokacija prikuplja obračun sesija zbog usklađenosti, zaobilazni postupak je u sukobu s tim zahtjevom i podržani odgovor je druga verzija klijenta ili drugi način pristupa, a ne zakrpani utmp. Za većinu ljudi najmanje invazivno rješenje je jednostavno pokrenuti klijent iz sesije koja će ostati otvorena cijeli dan i ostaviti taj prozor na miru.

Prije nego što zatvorite tiket, zabilježite koju je sesiju klijent pratio kad je tunel podignut. Upravo taj jedan redak pretvara tajanstveni prekid u uvjet koji se može ponoviti za sljedeću osobu za računalom.

Povezani članci