OpenVPN ponavlja pokušaje nakon TLS greške: kako to zaustaviti
TLS greška se po defaultu ponavlja, pa klijent kruži i prva greška izmiče iz vidokruga. tls-exit ga tjera da izađe; provjerite šta ga ponovo pokreće.
Klijent se povezuje, ne uspijeva tokom TLS pregovora, čeka i ponovo pokušava isti server s istim rezultatom. Pod nadzornikom koji restartuje 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 popravka, pa je uparite s politikom koja procesu zaista dopušta da ostane ugašen.
Ciklus koji skriva prvu grešku
Ono što vidite nije jedan neuspjeh, nego blok koji se ponavlja: pokušaj povezivanja, TLS greška, pauza i zatim isti slijed. Svako ponavljanje gura izvornu liniju sve više u dnevniku. Ako se jedinica restartuje pri neuspjehu, ciklus može trajati satima a da nitko ne pročita uzrok. Simptom je petlja, iako je osnovni 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 priuštiti isti optimizam: proces se mora zaustaviti da bi čovjek ili monitor vidio status.
Prije nego što išta promijenite, zabilježite jedan puni ciklus. Zabilježite udaljenu adresu, TLS fazu navedenu u grešci i izlazi li proces uopće.
Mehanizam ponavljanja iza petlje
Ponavljanje je zadano jer nekoliko nepovezanih tajm-auta 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 grešci. Tajm-auti, 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 zaista 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 reaguje. Ne-nulti izlaz nakon neuspjeha pregovora je željeni rezultat. Ako proces nastavi ponavljati umjesto da završi, opcija nije u profilu koji klijent zaista učitava.
Nadzornik odlučuje hoće li taj izlaz biti vidljiv. systemd jedinica s Restart=always ili Restart=on-failure ponovo 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 restartuje 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 restarta. Zatim pročitajte status jedinice da potvrdite posljednji izlazni kod: systemctl status ga izvještava, a dnevnik čuva prvu grešku iznad restarta.
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 greš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šalac 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.
Uporedite dva pokretanja po izlaznom statusu i po prvoj liniji greške, a ne po tome koliko je koje trajalo. Status kaže je li opcija reagovala, 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 ko kasnije pokrene svaki profil u direktoriju.
Faze do kojih ova opcija nikada ne stiže
Odbijanje autentifikacije je kasnija faza. Ako server procijeni račun i odbije ga, TLS je već pregovaran, pa tls-exit ne reaguje. Postavke ponavljanja autentifikacije su sljedeće mjesto za provjeru, a serverov razlog važniji je od posljednje linije klijenta. Pogrešna lozinka 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 popravku, 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.