Klijent se povezuje, ne uspijeva tijekom TLS pregovora, čeka i ponovno pokušava isti poslužitelj s istim rezultatom. Pod nadzornikom koji ponovno pokreće neuspjeli proces, ti pokušaji postaju beskonačna petlja u dnevniku, a prva dijagnostička linija izmiče iz dosega. OpenVPN nudi opciju koja taj neuspjeh pregovora pretvara u vidljiv izlaz umjesto još jednog pokušaja. To je postavka za dijagnostiku i nadzor, a ne popravak, pa je povežite s politikom koja procesu doista dopušta da ostane ugašen.

Ciklus koji skriva prvu pogrešku

Ono što vidite nije jedan neuspjeh, nego blok koji se ponavlja: pokušaj povezivanja, TLS pogreška, stanka i zatim isti slijed. Svako ponavljanje gura izvornu liniju sve više u dnevniku. Ako se jedinica ponovno pokreće pri neuspjehu, ciklus može trajati satima a da nitko ne pročita uzrok. Simptom je petlja, iako je temeljni kvar jedan problem s pregovorima.

Interaktivne sesije to podnose jer se prolazni neuspjeh može raščistiti u sljedećem pokušaju. Automatizirane veze ne mogu si priuštiti isti optimizam: proces se mora zaustaviti da bi čovjek ili monitor vidio stanje.

Prije nego što išta promijenite, zabilježite jedan puni ciklus. Zabilježite udaljenu adresu, TLS fazu navedenu u pogrešci i izlazi li proces uopće.

Mehanizam ponovnog pokušaja iza petlje

Ponovni pokušaj je zadano jer nekoliko nepovezanih vremenskih ograničenja dijeli isti mehanizam. connect-retry postavlja razmak između pokušaja povezivanja, connect-retry-max može ograničiti koliko se često pokušava svaki udaljeni unos, a resolv-retry upravlja ponovljenim pretragama imena. Neuspjeh TLS pregovora dolazi do tog mehanizma kao transportni događaj, pa klijent zakazuje još jedan pokušaj umjesto da izvijesti. Zadano pomaže kod nestabilne veze i škodi kod kvara koji se ne može izliječiti.

Opcija --tls-exit mijenja samo slučaj pregovora. Priručnik je opisuje kao izlazak pri neuspjehu TLS pregovora, što je uže od izlaska pri svakoj pogrešci. Vremenska ograničenja, neuspjesi razrješivača i odbijanja autentifikacije zadržavaju svoje ponašanje.

Natjerajte klijent da izađe pri TLS neuspjehu

Stavite tls-exit u profil koji klijent doista učitava ili navedite --tls-exit pri pokretanju, i pokrenite ga jednom u prvom planu. Čitajte izlazni status i posljednju liniju dnevnika, jer status je ono na što nadzornik reagira. Ne-nulti izlaz nakon neuspjeha pregovora je željeni rezultat. Ako proces nastavi ponavljati umjesto da završi, opcija nije u profilu koji klijent doista učitava.

Nadzornik odlučuje hoće li taj izlaz biti vidljiv. systemd jedinica s Restart=always ili Restart=on-failure ponovno pokreće klijent, pa se petlja nastavlja i opcija izgleda kao da ne radi ništa. Provjerite politiku prije nego optužite klijent:

systemctl show -p Restart -p RestartSec openvpn-client@office
journalctl -u openvpn-client@office -n 40 --no-pager

Restart=no dopušta procesu da ostane ugašen, a Restart=on-failure ga ipak ponovno pokreće nakon ne-nultog statusa. Ako želite da neuspjeh bude vidljiv, ali da se usluga oporavi od nepovezanih padova, postavite Restart=on-failure i upotrijebite StartLimitBurst i StartLimitIntervalSec da zaustavite oluju ponovnih pokretanja. Zatim pročitajte status jedinice da potvrdite posljednji izlazni kod: systemctl status ga izvješćuje, a dnevnik čuva prvu pogrešku iznad ponovnih pokretanja.

Zapišite odluku u jedinicu ili u bilješke profila. Profil koji izlazi pri TLS neuspjehu izgleda kao slučajnost sljedećoj osobi, osim ako razlog nije zabilježen. Navedite koje pogreške trebaju zaustaviti proces, a koje treba ponoviti.

Dokažite to privremenom krajnjom točkom

Da biste vidjeli ponašanje prije nego mu povjerujete, kopirajte profil i usmjerite kopiju na krajnju točku koja prihvaća TCP vezu, ali nikada ne govori OpenVPN. Dovoljan je slušatelj koji odgovori i zatim ušuti. S tls-exit klijent bi trebao završiti kad rukovanje ne uspije; bez toga isti profil treba nastaviti kružiti. Koristite kopiju, nikada radni profil.

Usporedite dva pokretanja po izlaznom statusu i po prvoj liniji pogreške, a ne po tome koliko je koje trajalo. Status kaže je li opcija reagirala, a prva linija kaže koja faza nije uspjela.

Uklonite testni profil kad završite. Kopija s namjerno pogrešnom krajnjom točkom zamka je za svakoga tko kasnije pokrene svaki profil u direktoriju.

Faze do kojih ova opcija nikada ne stiže

Odbijanje autentifikacije je kasnija faza. Ako poslužitelj procijeni račun i odbije ga, TLS je već pregovaran, pa tls-exit ne reagira. Postavke ponavljanja autentifikacije sljedeće su mjesto za provjeru, a poslužiteljev razlog važniji je od posljednje linije klijenta. Pogrešna zaporka i nedostajući certifikat mogu proizvesti slične poruke na strani klijenta.

Nedostajuća ruta, pogrešan razrješivač ili nedostupna pristupna točka također su izvan opcije, jer nisu neuspjesi pregovora. Tihi gubitak paketa najmanje je očigledan slučaj: ovisno o tome koliko je razmjena odmakla, klijent može izvijestiti o neuspjehu pregovora ili jednostavno isteći.

Zadržite razliku u bilješkama. Postavka je za dijagnostiku i nadzor, a ne za popravak, pa ne ispravlja neslaganje šifre, problem s certifikatom ili pogrešan port. Prvo popravite uzrok neuspjelih pregovora, zatim odlučite odgovara li trenutni izlazak još uvijek primjeni.

Povezani članci