OpenVPN ir toliau kartoja bandymus po TLS klaidos: kaip tai sustabdyti
TLS klaida kartojama pagal numatytuosius nustatymus, todėl klientas sukasi ratu, o pirmoji klaida pasprunka iš akių. tls-exit priverčia jį išeiti; patikrinkite, kas jį paleidžia iš naujo.
Klientas prisijungia, nepavyksta TLS derybų metu, palaukia ir vėl bando tą patį serverį su tuo pačiu rezultatu. Prižiūrėtojui, kuris paleidžia nepavykusį procesą iš naujo, tie bandymai tampa begaline kilpa žurnale, o pirmoji diagnostikos eilutė pasprunka iš akių. OpenVPN siūlo parinktį, kuri tą derybų nesėkmę paverčia matomu išėjimu, o ne dar vienu bandymu. Tai diagnostikos ir priežiūros nustatymas, o ne taisymas, todėl derinkite jį su politika, kuri tikrai leidžia procesui likti sustabdytam.
Ciklas, kuris slepia pirmąją klaidą
Tai, ką matote, yra pasikartojantis blokas, o ne viena nesėkmė: prisijungimo bandymas, TLS klaida, pauzė ir tada ta pati seka. Kiekvienas kartojimas stumia pradinę eilutę vis aukščiau žurnale. Jei įrenginys paleidžiamas iš naujo po nesėkmės, ciklas gali tęstis valandų valandas, kol niekas neskaito priežasties. Simptomas yra kilpa, nors pagrindinė yda yra viena derybų problema.
Interaktyvios sesijos tai pakelia, nes laikina nesėkmė gali išnykti kitą kartą bandant. Automatiniai ryšiai negali sau leisti tokio pat optimizmo: procesas turi sustoti, kad žmogus ar stebėtojas pamatytų būseną.
Prieš ką nors keisdami, užfiksuokite vieną pilną ciklą. Užsirašykite nuotolinį adresą, klaidoje nurodytą TLS etapą ir ar procesas apskritai išeina.
Kartojimo mechanizmas už kilpos
Kartojimas yra numatytasis, nes keli nesusiję skirtieji laikai naudoja tą patį mechanizmą. connect-retry nustato intervalą tarp prisijungimo bandymų, connect-retry-max gali apriboti, kaip dažnai bandomas kiekvienas nuotolinis įrašas, o resolv-retry valdo pakartotines vardų paieškas. TLS derybų nesėkmė pasiekia tą mechanizmą kaip transporto įvykis, todėl klientas vietoj pranešimo suplanuoja dar vieną bandymą. Numatytasis nustatymas padeda esant nestabiliam ryšiui ir kenkia dėl ydos, kuri negali išgyti.
Parinktis --tls-exit keičia tik derybų atvejį. Vadovas ją apibūdina kaip išėjimą, kai nepavyksta TLS derybos, o tai siauriau nei išėjimas esant bet kokiai klaidai. Skirtieji laikai, sprendėjo sutrikimai ir autentifikavimo atmetimai išlaiko savo elgesį.
Priversti klientą išeiti, kai nepavyksta TLS
Įdėkite tls-exit į profilį, kurį klientas tikrai įkelia, arba perduokite --tls-exit paleisdami, ir paleiskite jį vieną kartą priekiniame plane. Skaitykite išėjimo būseną ir paskutinę žurnalo eilutę, nes būtent į būseną reaguoja prižiūrėtojas. Ne nulinis išėjimas po derybų nesėkmės yra numatytas rezultatas. Jei procesas vietoj pabaigos toliau bando, parinkties nėra profilyje, kurį klientas tikrai įkelia.
Prižiūrėtojas sprendžia, ar tas išėjimas bus matomas. systemd įrenginys su Restart=always arba Restart=on-failure vėl paleidžia klientą, todėl kilpa tęsiasi ir parinktis atrodo nieko nedaranti. Patikrinkite politiką prieš kaltindami klientą:
systemctl show -p Restart -p RestartSec openvpn-client@office
journalctl -u openvpn-client@office -n 40 --no-pager
Restart=no leidžia procesui likti sustabdytam, o Restart=on-failure vis tiek paleidžia iš naujo po ne nulinės būsenos. Jei norite, kad nesėkmė būtų matoma, bet paslauga atsistatytų po nesusijusių lūžių, nustatykite Restart=on-failure ir naudokite StartLimitBurst bei StartLimitIntervalSec, kad sustabdytumėte paleidimų audrą. Tada perskaitykite įrenginio būseną, kad patvirtintumėte paskutinį išėjimo kodą: systemctl status jį praneša, o žurnalas saugo pirmąją klaidą virš paleidimų.
Užrašykite sprendimą įrenginyje arba profilio pastabose. Profilis, kuris išeina nepavykus TLS, kitam žmogui atrodo kaip nelaimė, nebent priežastis užfiksuota. Nurodykite, kurios nesėkmės turi sustabdyti procesą, o kurios turi būti kartojamos.
Įrodykite tai vienkartiniu galiniu tašku
Kad pamatytumėte elgesį prieš juo pasitikėdami, nukopijuokite profilį ir nukreipkite kopiją į galinį tašką, kuris priima TCP ryšį, bet niekada nekalba OpenVPN. Pakanka klausytojo, kuris atsako ir tada tyli. Su tls-exit klientas turėtų baigtis, kai nepavyksta rankos paspaudimas; be jo tas pats profilis turėtų toliau suktis. Naudokite kopiją, niekada ne veikiantį profilį.
Palyginkite abu paleidimus pagal išėjimo būseną ir pirmąją klaidos eilutę, o ne pagal tai, kiek kiekvienas truko. Būsena pasako, ar parinktis suveikė, o pirmoji eilutė pasako, kuris etapas nepavyko.
Pašalinkite bandymo profilį, kai baigsite. Kopija su sąmoningai neteisingu galiniu tašku yra spąstai kiekvienam, kuris vėliau paleidžia kiekvieną katalogo profilį.
Etapai, kurių ši parinktis niekada nepasiekia
Autentifikavimo atmetimas yra vėlesnis etapas. Jei serveris įvertina paskyrą ir ją atmeta, TLS jau suderėtas, todėl tls-exit nesuveikia. Autentifikavimo kartojimo nustatymai yra kita vieta, kur žiūrėti, o serverio priežastis svarbesnė už paskutinę kliento eilutę. Neteisingas slaptažodis ir trūkstamas sertifikatas gali sukurti panašius pranešimus kliento pusėje.
Trūkstamas maršrutas, neteisingas sprendėjas ar nepasiekiama tinklo sąsaja taip pat yra už parinkties ribų, nes tai nėra derybų nesėkmės. Tylus paketų praradimas yra mažiausiai akivaizdus atvejis: priklausomai nuo to, kiek pažengė mainai, klientas gali pranešti apie derybų nesėkmę arba tiesiog baigtis laiko skirtis.
Išlaikykite skirtumą savo pastabose. Nustatymas skirtas diagnozei ir priežiūrai, o ne taisymui, todėl jis netaiso šifro neatitikimo, sertifikato problemos ar neteisingo prievado. Pirmiausia ištaisykite nepavykusių derybų priežastį, tada nuspręskite, ar tiesioginis išėjimas dar tinka diegimui.