OpenVPN stále opakuje pokusy po chybe TLS: ako to zastaviť
Zlyhanie TLS sa predvolene opakuje, takže klient cyklí a prvá chyba sa stratí z dohľadu. tls-exit ho prinúti skončiť; skontrolujte, čo ho reštartuje.
Klient sa pripojí, zlyhá počas vyjednávania TLS, počká a skúsi ten istý server znova s rovnakým výsledkom. Pod správcom, ktorý reštartuje zlyhaný proces, sa z týchto pokusov stane nekonečná slučka v žurnáli a prvý diagnostický riadok sa vytlačí mimo dosahu. OpenVPN ponúka voľbu, ktorá tento neúspech vyjednávania zmení na viditeľný odchod namiesto ďalšieho pokusu. Je to nastavenie pre diagnostiku a dohľad, nie oprava, preto ho spojte so zásadou, ktorá procesu skutočne dovolí zostať zastavený.
Cyklus, ktorý skrýva prvú chybu
To, čo vidíte, nie je jedno zlyhanie, ale opakujúci sa blok: pokus o pripojenie, chyba TLS, pauza a potom rovnaká postupnosť. Každé opakovanie posúva pôvodný riadok vyššie v žurnáli. Ak sa jednotka pri zlyhaní reštartuje, cyklus môže pokračovať hodiny, bez toho aby niekto prečítal príčinu. Symptómom je slučka, hoci vlastnou závadou je jediný problém s vyjednávaním.
Interaktívne relácie to znášajú, pretože prechodné zlyhanie môže pri ďalšom pokuse zmiznúť. Automatizované pripojenia si nemôžu dovoliť rovnaký optimizmus: proces sa musí zastaviť, aby človek alebo monitor videl stav.
Skôr než čokoľvek zmeníte, zachyťte jeden celý cyklus. Poznamenajte si vzdialenú adresu, fázu TLS uvedenú v chybe a či proces vôbec skončí.
Mechanizmus opakovania za slučkou
Opakovanie je predvolené, pretože niekoľko nesúvisiacich časových limitov zdieľa rovnaký mechanizmus. connect-retry nastavuje interval medzi pokusmi o pripojenie, connect-retry-max môže obmedziť, ako často sa každá vzdialená položka skúša, a resolv-retry riadi opakované vyhľadávanie mien. Zlyhanie vyjednávania TLS sa do tohto mechanizmu dostane ako transportná udalosť, takže klient naplánuje ďalší pokus namiesto hlásenia. Predvolená hodnota pomáha pri nestabilnom spojení a škodí pri závade, ktorá sa nedá vyliečiť.
Voľba --tls-exit mení iba prípad vyjednávania. Manuál ju opisuje ako ukončenie pri zlyhaní vyjednávania TLS, čo je užšie ako ukončenie pri každej chybe. Časové limity, zlyhania prekladača a odmietnutia autentifikácie si zachovávajú svoje správanie.
Prinúťte klienta skončiť pri zlyhaní TLS
Vložte tls-exit do profilu, ktorý klient skutočne načítava, alebo pri spúšťaní odovzdajte --tls-exit, a spustite ho raz na popredí. Čítajte návratový kód aj posledný riadok protokolu, pretože práve na kód reaguje správca. Nenulový odchod po zlyhaní vyjednávania je zamýšľaný výsledok. Ak proces namiesto ukončenia ďalej opakuje pokusy, voľba nie je v profile, ktorý klient skutočne načítava.
Správca rozhoduje, či bude tento odchod viditeľný. Jednotka systemd s Restart=always alebo Restart=on-failure klienta znova spustí, takže slučka pokračuje a voľba vyzerá, akoby nič nerobila. Skontrolujte zásadu, skôr než obviníte klienta:
systemctl show -p Restart -p RestartSec openvpn-client@office
journalctl -u openvpn-client@office -n 40 --no-pager
Restart=no nechá proces zastavený a Restart=on-failure po nenulovom stave stále reštartuje. Ak chcete, aby zlyhanie bolo viditeľné, ale služba sa zotavila z nesúvisiacich pádov, nastavte Restart=on-failure a použite StartLimitBurst a StartLimitIntervalSec na zastavenie búrky reštartov. Potom prečítajte stav jednotky a potvrďte posledný návratový kód: systemctl status ho hlási a žurnál uchováva prvú chybu nad reštartmi.
Zapíšte rozhodnutie do jednotky alebo do poznámok profilu. Profil, ktorý pri zlyhaní TLS skončí, vyzerá pre ďalšieho človeka ako náhoda, ak dôvod nie je zaznamenaný. Uveďte, ktoré zlyhania majú proces zastaviť a ktoré sa majú opakovať.
Dokážte to pomocou dočasného koncového bodu
Aby ste správanie videli skôr, než mu uveríte, skopírujte profil a nasmerujte kópiu na koncový bod, ktorý prijme TCP spojenie, ale nikdy nehovorí OpenVPN. Stačí poslucháč, ktorý odpovie a potom stíchne. S tls-exit by mal klient skončiť, keď handshake zlyhá; bez nej by mal ten istý profil ďalej cykliť. Použite kópiu, nikdy pracovný profil.
Porovnajte oba behy podľa návratového kódu a podľa prvého chybového riadku, nie podľa toho, ako dlho ktorý trval. Kód hovorí, či sa voľba uplatnila, a prvý riadok hovorí, ktorá fáza zlyhala.
Keď skončíte, testovací profil odstráňte. Kópia s úmyselne nesprávnym koncovým bodom je pasca pre každého, kto neskôr spustí každý profil v adresári.
Fázy, na ktoré sa táto voľba nikdy nedostane
Odmietnutie autentifikácie je neskoršia fáza. Ak server účet vyhodnotí a odmietne, TLS už bolo vyjednané, takže tls-exit sa neuplatní. Nastavenia opakovania autentifikácie sú ďalšie miesto na pohľad a dôvod servera je dôležitejší než posledný riadok klienta. Nesprávne heslo a chýbajúci certifikát môžu na strane klienta vytvoriť podobné hlásenia.
Chýbajúca trasa, nesprávny prekladač alebo nedostupná brána sú tiež mimo voľby, pretože to nie sú zlyhania vyjednávania. Tichá strata paketov je najmenej zrejmý prípad: podľa toho, ako ďaleko výmena pokročila, môže klient hlásiť zlyhanie vyjednávania alebo jednoducho vyprší časový limit.
Rozdiel si v poznámkach ponechajte. Nastavenie slúži diagnostike a dohľadu, nie oprave, takže nerieši nesúlad šifry, problém s certifikátom ani nesprávny port. Najprv opravte príčinu neúspešného vyjednávania a potom rozhodnite, či okamžitý odchod nasadeniu stále vyhovuje.