Kasvalandinis OpenVPN nutrūkimas: pakartotinės derybos ar tikras prisijungimas iš naujo?
Nutrūkimas įtartinai apvaliu intervalu paprastai yra raktų atnaujinimas, o ne negyva jungtis. Perskaitykite galiojantį laikmatį ir žurnalo eilutę prieš ką nors išjungdami.
Šešiasdešimt minučių, arba trisdešimt, arba šimtas dvidešimt: nutrūkimas, kuris patenka į apvalų intervalą, beveik niekada nėra tinklas. OpenVPN pagal laikmatį atnaujina raktų medžiagą, kuri saugo duomenų kanalą, ir trumpesnis nei tikėjotės laikmatis atrodo lygiai kaip nuolat nepavykstanti jungtis. Naudotojai praneša apie nutrūkusį ryšį, o žurnalas praneša apie sėkmingą raktų mainą. Toliau pateiktas vadovas atskiria tą atnaujinimą nuo tikro paleidimo iš naujo, nuskaito tikrąją galiojančią reikšmę ir keičia ją tik tada, kai kaina jau ant stalo.
Atlikite veiksmus iš eilės, nes pirmasis nusprendžia, ar likusi puslapio dalis jums apskritai taikoma. Jei peršoksite į priekį, praleisite vakarą derindami laikmatį dėl gedimo, kuris su juo nieko bendra neturi.
Atskirkite švelnų atstatymą nuo paleidimo iš naujo
Žurnalo eilutė yra visa diagnostika. Pakartotinės derybos įrašo švelnų atstatymą ir tada naują raktų mainą tame pačiame tunelyje: sąsaja išlaiko savo adresą, maršrutai vėl nepridedami, o nustatytos TCP sesijos paprastai išgyvena su pauze. Tikras paleidimas iš naujo perplėšia sesiją, atkuria sąsają, gali išduoti kitą kliento adresą ir nužudo kiekvieną ilgalaikį ryšį. Abu įvykiai įprasti; tik vienas jų paaiškina nutrūkusį skambutį.
journalctl -u openvpn-client@office -b --no-pager | grep -nE 'soft reset|Connection reset|reneg|TLS Error'
openvpn --version | head -n 1
Versijos eilutė svarbi, nes žurnalo formuluotės keičiasi tarp leidimų, o pranešimas, kurį prisimenate iš 2.3, 2.6 gali būti suformuluotas kitaip. Skaitykite savo žurnalą, o ne kito žmogaus forumo ištrauką. Kai prašote pagalbos, cituokite tikslią eilutę, nes perfrazavimas praranda detalę, kuri identifikuoja įvykį. Jei sąsajos adresas įvykio metu nepakito ir sesijų sąrašas išliko, matote atnaujinimą, o likę skyriai taikomi.
Skaitykite galiojantį laikmatį, o ne savo failą
reneg-sec yra sekundžių skaičius tarp duomenų kanalo pakartotinių derybų, o numatytoji reikšmė yra 3600. Kiekviena pusė turi savo reikšmę, ir būtent mažesnė iš dviejų iš tikrųjų sukelia atnaujinimą. Ši viena taisyklė paaiškina daugumą pranešimų: kliento profilis, nustatantis didelį skaičių, vis tiek atstatomas kas valandą, kol serveris laiko numatytąją reikšmę.
grep -Rn --include='*.conf' -E 'reneg-sec|reneg-bytes' /etc/openvpn
# server side, including included files
grep -Rn -E '^reneg-sec' /etc/openvpn/server/
Perskaitykite ir galiojančią serverio konfigūraciją, įskaitant viską, ką jis stumia, prieš darydami išvadą iš kliento failo. Tada padidinkite išsamumą ir stebėkite vieną intervalą nuo pradžios iki pabaigos: 3 lygis jau rodo pakartotinių derybų eilutes, o laiko žymos pasako, ar įvykis kartojasi kas 3600 sekundžių, ar seka veiklą.
Keiskite ten, kur tai iš tikrųjų stumiama
Cirkuliuojantis vaistas yra viena eilutė kliento profilyje, ir maždaug pusę laiko tai netinkama vieta. Kadangi laimi mažesnė pusės reikšmė, klientas, nustatęs laikmatį į nulį, vis tiek gali būti pakartotinai deramasi serverio, kuris nepasikeitė.
# on both ends, or on the side that owns the pushed configuration
reneg-sec 0
Kai profiliai generuojami centralizuotai, redaguokite šabloną, o ne įdiegtą kopiją, kitaip kitas parengimo paleidimas atkurs ką tik pašalintą reikšmę. Patikrinkite stebėdami du intervalus, o ne vieną: viena tyli valanda dera ir su laikmačiu, nustatytu į 7200.
Taip pat nuspręskite, kas nutinka mišriame diegime. Jei pakeitimą pirmiausia išskleisite klientams, lieka langas, kuriame serveris vis dar sukelia atnaujinimą; tai nekenksminga, bet klaidina, jei stebite žurnalus patvirtinimui. Pirmiausia pakeiskite tą pusę, kurios reikšmė mažesnė, ir simptomas išnyks ten, kur tikitiesi.
Ko atsisakote išjungdami pakartotines derybas
Reguliarios pakartotinės derybos riboja, kiek ilgai vienas duomenų kanalo raktų rinkinys saugo srautą. Laikmačio išjungimas nesugadina tunelio, o namų maršrutizatoriuje ar mažo biuro šliuze praktinė ekspozicija nedidelė. Tai vis tiek mainai, ir mainus verta įvardyti prieš juos atliekant. Keičiasi tai, kiek ilgai vienas raktų rinkinys saugo sesiją, o ne tai, ar tunelis apskritai veikia.
Pagrįstas atvejis išjungti yra atstatymas, kuris sugadina tai, ko negalima tęsti: nutrūkstantis skambutis, iš naujo nustatoma nuotolinio darbalaukio sesija, nuo pradžių prasidedantis atsarginis kopijavimas. Jei pauzė naudotojams nematoma, numatytosios reikšmės palikimas nieko nekainuoja ir išsaugo jums duotą raktų rotaciją.
Pirmenybę teikite priežasties taisymui, kai modelis tai leidžia. Atnaujinimas, kuris nepavyksta pusiaukelėje, nors pirmasis rankos paspaudimas pavyko, rodo kelią, o ne laikmatį: ieškokite paketo dydžio problemos didesniame valdymo kanalo mainuose, būsenos ugniasienės, kuri numeta srautą, arba pasiūlymo, kuris pavyksta tik pirmuoju bandymu. Kiekvienas jų palieka pėdsaką tame pačiame žurnale, kurį ką tik skaitėte. Laikmačio išjungimas paslepia tuos įrodymus.
Kai intervalas rodo kitur
Du kaimynai konfigūracijoje sukuria panašius simptomus ir skirtingus pataisymus. ping-restart paleidžia tunelį iš naujo, kai per nustatytą laikotarpį nieko neateina, o ping-exit visiškai išjungia klientą. Nutrūkimas neveikloje be jokių pakartotinių derybų žurnale priklauso šiems arba NAT įrenginiui, kuris UDP susiejimą leido pasibaigti pagal savo grafiką.
Vartotojų maršrutizatoriai, mobilieji hotspotai ir operatoriaus lygio NAT leidžia neveikioms UDP sesijoms pasibaigti niekam nepranešdami. Tas gedimas seka neveiklumą, o ne laikrodį, ir tai yra požymis: sesija, kuri nutrūksta po dešimties tylių minučių ir išgyvena valandą tolygaus srauto, nesidera iš naujo.
Užrašykite tris dalykus prieš keisdami ketvirtą: išmatuotą intervalą, rastą galiojančią reikšmę ir komandą, kuri ją parodė. Jei intervalas juda, kai juda laikmatis, mechanizmas nustatytas, o pataisymas yra sprendimas dėl aukščiau nurodytų mainų. Jei jis nejuda, grąžinkite nustatymą ir toliau stebėkite keepalive, NAT būseną ir paketų nuostolius.