Tunel radi, zatvorite jedan dodatni terminal i VPN padne bez ijednog pritiska tipke u klijentu. Kod Linux klijenta AnyConnecta prijavljeni uzrok je obračun sesija, a ne rutiranje: klijent bilježi koje su prijavne sesije postojale kada je tunel podignut i tretira kraj bilo koje od njih kao razlog da ga sruši. Provjere ispod idu po redu, a prva koja ne uspije kaže vam da li uopšte gledate ovo ponašanje. Ništa u uobičajenom izlazu klijenta ne spominje terminal, zbog čega je prvi poriv, okrivljavanje koncentratora, 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

Ponovo se povežite odmah nakon prekida. Tunel koji se vrati u roku od nekoliko sekundi, na istoj mreži, bez novih akreditiva, ukazuje na lokalni okidač kao što je zatvorena sesija, a ne na mrtav uplink, Wi-Fi roaming ili vremensko ograničenje mirovanja na koncentratoru. Tunel koji visi na Connecting ili ne uspijeva dok ne promijenite mrežu je drugi članak.

Zapišite šta je bilo otvoreno kada je tunel podignut: terminal iz kojeg ste pokrenuli klijent, bilo koji drugi shell, grafičku prijavu i bilo koju SSH sesiju sa druge mašine. Taj spisak će vam trebati za koji trenutak, a rekonstrukcija po sjećanju nakon sljedećeg pada nije pouzdana.

Provjerite šta je klijent zabilježio pri povezivanju

Klijent ne pregleda roditelje procesa ni vlasništvo nad terminalom. On snimi skup prijavnih sesija prisutnih pri povezivanju i kasnije uporedi taj skup; kada član nestane, poređenje ne uspije i tunel ode s njim. Zato zatvaranje prozora iz kojeg ste se povezali može biti bezazleno, dok zatvaranje nepovezanog dodatnog terminala ubija vezu: bitno je da li je ta sesija bila u originalnom skupu. Provjera je poređenje skupova, a ne brojanje, zbog čega zamjena sesije može biti jednako kobna kao gubitak jedne.

Navedite šta je klijent mogao vidjeti prije nego što bilo šta promijenite:

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

Svaki red iz who je zapis 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 workaround čini sesiju koju ćete upotrijebiti nevidljivom u utmp prije nego što se klijent pokrene. Mali program u C 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 linije, zapišite ga natrag pomoću pututline(), a zatim endutent().

Kompajlirajte ga, a zatim ga pokrenite kao root iz shella koji će pokrenuti klijent:

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

Dva načina neuspjeha objašnjavaju većinu izvještaja da alat ništa ne radi. Djeluje na TTY vezan za 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živi 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 listu interfejsa. 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 je bila negdje drugdje, najčešće grafička prijava koja je stvorila vaš terminal, i uklanjanje jednog TTY zapisa neće pomoći. Ponovite posmatranje sa punim spiskom iz prvog koraka umjesto da dodajete još hirurgije.

Kada je prepisivanje utmp pogrešan odgovor

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

Ako vaša lokacija prikuplja obračun sesija zbog usklađenosti, workaround je u sukobu s tim zahtjevom i podržani odgovor je druga verzija klijenta ili drugi način pristupa, a ne zakrpljeni utmp. Za većinu ljudi je najmanje invazivno rješenje 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 kada je tunel podignut. Upravo taj jedan red pretvara tajanstveni prekid u uvjet koji se može ponoviti za sljedeću osobu za mašinom.

Povezani članci