Klient se připojí, selže během vyjednávání TLS, počká a zkusí stejný server znovu se stejným výsledkem. Pod dohledem správce, který restartuje selhaný proces, se z těchto pokusů stane nekonečná smyčka v žurnálu a první diagnostický řádek se vysune mimo dosah. OpenVPN nabízí volbu, která tento neúspěch vyjednávání přemění na viditelný odchod místo dalšího pokusu. Je to nastavení pro diagnostiku a dohled, nikoli oprava, proto je spojte se zásadou, která procesu skutečně dovolí zůstat zastavený.

Cyklus, který skrývá první chybu

To, co vidíte, není jedno selhání, ale opakující se blok: pokus o připojení, chyba TLS, pauza a pak stejná posloupnost. Každé opakování posouvá původní řádek v žurnálu výš. Pokud se jednotka při selhání restartuje, může cyklus pokračovat hodiny, aniž by někdo přečetl příčinu. Symptomem je smyčka, i když vlastní závadou je jediný problém s vyjednáváním.

Interaktivní relace to snášejí, protože přechodné selhání může při dalším pokusu zmizet. Automatizovaná připojení si nemohou dovolit stejný optimismus: proces se musí zastavit, aby člověk nebo monitor viděl stav.

Než cokoli změníte, zachyťte jeden celý cyklus. Poznamenejte si vzdálenou adresu, fázi TLS uvedenou v chybě a zda proces vůbec skončí.

Mechanismus opakování za smyčkou

Opakování je výchozí, protože několik nesouvisejících časových limitů sdílí stejný mechanismus. connect-retry nastavuje mezeru mezi pokusy o připojení, connect-retry-max může omezit, jak často se každá vzdálená položka zkouší, a resolv-retry řídí opakované vyhledávání jmen. Selhání vyjednávání TLS se do tohoto mechanismu dostane jako přenosová událost, takže klient naplánuje další pokus místo hlášení. Výchozí hodnota pomáhá u nestabilního spoje a škodí u závady, která se nemůže vyléčit.

Volba --tls-exit mění pouze případ vyjednávání. Manuál ji popisuje jako ukončení při selhání vyjednávání TLS, což je užší než ukončení při každé chybě. Časové limity, selhání překladače a odmítnutí autentizace si zachovávají své chování.

Přimět klienta skončit při selhání TLS

Vložte tls-exit do profilu, který klient skutečně načítá, nebo při spuštění předejte --tls-exit, a spusťte ho jednou na popředí. Čtěte návratový kód i poslední řádek protokolu, protože právě na kód reaguje správce. Nenulový odchod po selhání vyjednávání je zamýšlený výsledek. Pokud proces místo ukončení dál opakuje pokusy, volba není v profilu, který klient skutečně načítá.

Správce rozhoduje, zda bude tento odchod viditelný. Jednotka systemd s Restart=always nebo Restart=on-failure klienta znovu spustí, takže smyčka pokračuje a volba vypadá, že nic nedělá. Zkontrolujte zásadu, 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 nenulovém stavu stále restartuje. Pokud chcete, aby selhání bylo viditelné, ale služba se zotavila z nesouvisejících pádů, nastavte Restart=on-failure a použijte StartLimitBurst a StartLimitIntervalSec k zastavení bouře restartů. Potom přečtěte stav jednotky a potvrďte poslední návratový kód: systemctl status ho hlásí a žurnál uchovává první chybu nad restarty.

Zapište rozhodnutí do jednotky nebo do poznámek profilu. Profil, který při selhání TLS skončí, vypadá pro dalšího člověka jako náhoda, pokud důvod není zaznamenán. Uveďte, která selhání mají proces zastavit a která se mají opakovat.

Dokažte to pomocí dočasného koncového bodu

Chcete-li chování vidět dřív, než mu uvěříte, zkopírujte profil a nasměrujte kopii na koncový bod, který přijme TCP spojení, ale nikdy nemluví OpenVPN. Stačí posluchač, který odpoví a pak ztichne. S tls-exit by měl klient skončit, když handshake selže; bez něj by měl stejný profil dál cyklovat. Použijte kopii, nikdy pracovní profil.

Porovnejte oba běhy podle návratového kódu a podle prvního chybového řádku, ne podle toho, jak dlouho který trval. Kód říká, zda se volba uplatnila, a první řádek říká, která fáze selhala.

Až skončíte, testovací profil odstraňte. Kopie s úmyslně špatným koncovým bodem je past pro každého, kdo později spustí každý profil v adresáři.

Fáze, kam se tato volba nikdy nedostane

Odmítnutí autentizace je pozdější fáze. Pokud server účet vyhodnotí a odmítne, TLS už bylo vyjednáno, takže tls-exit se neuplatní. Nastavení opakování autentizace je další místo, kam se podívat, a důvod serveru je důležitější než poslední řádek klienta. Špatné heslo a chybějící certifikát mohou na straně klienta vytvořit podobné zprávy.

Chybějící trasa, špatný překladač nebo nedostupná brána jsou také mimo volbu, protože to nejsou selhání vyjednávání. Tichá ztráta paketů je nejméně zřejmý případ: podle toho, jak daleko výměna pokročila, může klient hlásit selhání vyjednávání, nebo prostě vyprší časový limit.

Rozdíl si v poznámkách ponechte. Nastavení slouží k diagnostice a dohledu, nikoli k opravě, takže neřeší nesoulad šifry, problém s certifikátem ani špatný port. Nejprve opravte příčinu neúspěšného vyjednávání a pak rozhodněte, zda okamžitý odchod nasazení stále vyhovuje.

Související články