OpenVPN po napaki TLS znova in znova poskuša: kako to ustaviti
Napaka TLS se privzeto ponovi, zato klient kroži in prva napaka izgine iz pogleda. tls-exit ga prisili, da se konča; preverite, kaj ga znova zažene.
Odjemalec se poveže, med pogajanji TLS spodleti, počaka in znova poskusi isti strežnik z enakim rezultatom. Pod nadzornikom, ki znova zažene neuspeli proces, ti poskusi postanejo neskončna zanka v dnevniku, prva diagnostična vrstica pa izgine iz dosega. OpenVPN ponuja možnost, ki to neuspešno pogajanje spremeni v vidni izhod namesto v še en poskus. To je nastavitev za diagnostiko in nadzor, ne popravilo, zato jo povežite s politiko, ki procesu resnično dovoli, da ostane ustavljen.
Cikel, ki skriva prvo napako
To, kar vidite, ni ena okvara, ampak ponavljajoč se blok: poskus povezave, napaka TLS, premor in nato isto zaporedje. Vsaka ponovitev potisne prvotno vrstico višje v dnevniku. Če se enota ob napaki znova zažene, lahko cikel traja ure, ne da bi kdo prebral vzrok. Simptom je zanka, čeprav je osnovna napaka ena sama težava s pogajanji.
Interaktivne seje to prenesejo, ker lahko prehodna napaka pri naslednjem poskusu izgine. Avtomatizirane povezave si ne morejo privoščiti enakega optimizma: proces se mora ustaviti, da človek ali monitor vidi stanje.
Preden kar koli spremenite, zajemite en cel cikel. Zabeležite oddaljeni naslov, stopnjo TLS, navedeno v napaki, in ali se proces sploh konča.
Mehanizem ponovnih poskusov za zanko
Ponovni poskus je privzet, ker si več nepovezanih časovnih omejitev deli isti mehanizem. connect-retry določa razmik med poskusi povezave, connect-retry-max lahko omeji, kako pogosto se preizkusi vsak oddaljeni vnos, resolv-retry pa upravlja ponovljena iskanja imen. Neuspeh pogajanj TLS doseže ta mehanizem kot transportni dogodek, zato odjemalec načrtuje nov poskus, namesto da bi poročal. Privzeta vrednost pomaga pri nestabilni povezavi in škoduje pri napaki, ki se ne more pozdraviti.
Možnost --tls-exit spremeni samo primer pogajanj. Priročnik jo opisuje kot izhod ob neuspehu pogajanj TLS, kar je ožje od izhoda ob vsaki napaki. Časovne omejitve, napake razreševalnika in zavrnitve overjanja ohranijo svoje vedenje.
Prisiliti odjemalca, da se ob napaki TLS konča
Vstavite tls-exit v profil, ki ga odjemalec dejansko naloži, ali ob zagonu podajte --tls-exit, in ga zaženite enkrat v ospredju. Preberite izhodni status in zadnjo vrstico dnevnika, ker je status tisto, na kar nadzornik reagira. Izhod, ki ni nič, po neuspehu pogajanj je predvideni rezultat. Če proces namesto končanja še naprej poskuša, možnosti ni v profilu, ki ga odjemalec dejansko naloži.
Nadzornik odloči, ali bo ta izhod viden. Enota systemd z Restart=always ali Restart=on-failure znova zažene odjemalca, zato se zanka nadaljuje in možnost izgleda, kot da ne naredi ničesar. Preverite politiko, preden obtožite odjemalca:
systemctl show -p Restart -p RestartSec openvpn-client@office
journalctl -u openvpn-client@office -n 40 --no-pager
Restart=no pusti proces ustavljen, Restart=on-failure pa ga po stanju, ki ni nič, vseeno znova zažene. Če želite, da je napaka vidna, storitev pa si opomore od nepovezanih sesutij, nastavite Restart=on-failure in uporabite StartLimitBurst ter StartLimitIntervalSec za ustavitev nevihte ponovnih zagonov. Nato preberite stanje enote in potrdite zadnjo izhodno kodo: systemctl status jo poroča, dnevnik pa hrani prvo napako nad ponovnimi zagoni.
Zapišite odločitev v enoto ali v opombe profila. Profil, ki se ob napaki TLS konča, se naslednji osebi zdi kot nesreča, razen če je razlog zabeležen. Navedite, katere napake naj ustavijo proces in katere naj se ponovijo.
Dokažite to z začasno končno točko
Da bi vedenje videli, preden mu zaupate, kopirajte profil in kopijo usmerite na končno točko, ki sprejme povezavo TCP, a nikoli ne govori OpenVPN. Dovolj je poslušalec, ki odgovori in nato utihne. Z tls-exit bi se moral odjemalec končati, ko rokovanje spodleti; brez te možnosti bi moral isti profil še naprej krožiti. Uporabite kopijo, nikoli delujočega profila.
Primerjajte oba zagona po izhodnem statusu in po prvi vrstici napake, ne po tem, kako dolgo je kateri trajal. Status pove, ali se je možnost sprožila, prva vrstica pa, katera stopnja je spodletela.
Odstranite testni profil, ko končate. Kopija z namerno napačno končno točko je past za vsakogar, ki pozneje zažene vsak profil v mapi.
Stopnje, do katerih ta možnost nikoli ne pride
Zavrnitev overjanja je poznejša stopnja. Če strežnik oceni račun in ga zavrne, so pogajanja TLS že opravljena, zato se tls-exit ne sproži. Nastavitve ponovnega poskusa overjanja so naslednje mesto za ogled, razlog strežnika pa je pomembnejši od zadnje vrstice odjemalca. Napačno geslo in manjkajoče potrdilo lahko na strani odjemalca ustvarita podobna sporočila.
Manjkajoča pot, napačen razreševalnik ali nedosegljiv prehod so prav tako zunaj možnosti, ker niso neuspehi pogajanj. Tiho izgubljanje paketov je najmanj očiten primer: glede na to, kako daleč je izmenjava prišla, lahko odjemalec poroča o neuspehu pogajanj ali preprosto poteče čas.
Razliko ohranite v svojih opombah. Nastavitev je za diagnostiko in nadzor, ne za popravilo, zato ne odpravi neujemanja šifre, težave s potrdilom ali napačnih vrat. Najprej popravite vzrok neuspešnih pogajanj, nato presodite, ali neposreden izhod še ustreza uvajanju.