Suspendujte mašinu, vratite je iz suspenzije, pa provjerite tri stvari ovim redom prije nego što dirnete bilo koju konfiguraciju: da li tun0 još postoji, da li ruta do interne adrese još uvijek bira njega i da li server još uvijek navodi ovaj peer. Uređaj koji preživi spavanje dok ruta pokazuje negdje drugdje je ostatak, a ne tunel. Kada je ruta ispravna, a saobraćaj ipak umre, kvar je iznad tunela i restart klijenta to neće promijeniti. Automatizacija restarta ima smisla tek nakon što ručni test pokaže koji od ta tri slučaja imate.

ip -br address show tun0
ip route get 10.20.0.10
journalctl -u openvpn-client@office -b --no-pager | tail -30

Reprodukujte buđenje prije nego što ga automatizujete

Suspenzija češće završava šifrovanu sesiju nego što uklanja uređaj. UDP tok koji je držao tunel živim prestaje, server može odbaciti peer, a klijent ili to primijeti i ponovo se poveže ili zadrži interfejs bez ičega iza njega. Provjera interfejsa sama po sebi malo dokazuje, jer zastario uređaj izgleda isto kao ispravan sve dok paketi ne moraju proći kroz njega. Pokrenite traženje rute i jedan stvarni zahtjev kroz tunel, pa pročitajte dnevnik oko trenutka buđenja.

Ako se klijent sam vrati, hook dodaje nemir umjesto pouzdanosti. Ako se nikad ne oporavi, automatizacija je iskren popravak.

Gdje systemd sleep hook zapravo živi

Mnogi stariji vodiči pokazuju na /etc/pm/sleep.d, direktorij koji posjeduje pm-utils i koji suspenzija zasnovana na systemd nikad ne konsultuje. systemd čita hookove iz /usr/lib/systemd/system-sleep/ i /etc/systemd/system-sleep/, predajući prvo fazu, a drugo operaciju, pa su pre i post jedine vrijednosti na koje se hook grana. Držite lokalnu kopiju pod /etc umjesto da uređujete zapakovanu datoteku i zapamtite da skripta radi kao root usred tranzicije, pa se mora brzo vratiti.

#!/bin/sh
case "$1" in
  post)
    systemctl --no-block try-restart [email protected]
    ;;
esac
exit 0

try-restart dira jedinicu samo kada je već aktivna, pa tunel koji ste namjerno isključili ostaje isključen i kroz buđenje. --no-block sprječava hook da čeka dok klijent pregovara, što je važno kada mreža još nije podignuta. Zajedno dva flag-a znače hook koji tiho ne uspijeva umjesto da zadrži cijeli slijed buđenja. Kada je jedinica već zaustavljena, ne događa se baš ništa, a to je upravo ishod koji tamo želite.

Oporavite servis, ostavite tun0 na miru

Ručno spuštanje tun0 ostavlja daemon da nadgleda interfejs koji više ne posjeduje, a sljedeća promjena stanja stvara zbunjujuće greške. Ciljajte servis ili njegov profil veze, a ne interfejs; prvo provjerite tačan naziv jedinice, jer distribucijski paketi, OpenVPN 3 i NetworkManager biraju različite. NetworkManager profil se vraća kada se ta veza reciklira, pa systemd jedinica tamo nije meta. Koji god mehanizam bio, to bi trebala biti ista radnja koju ste ručno provjerili.

Restart ponovo instalira rute koje je klijent gurnuo pri povezivanju. Većina buđenja to želi. Mašina u kojoj ste dodali vlastite putanje ne, pa provjerite te ponovo umjesto da pretpostavite da ih je oporavak vratio, i zapišite ih gdje ih sljedeće buđenje može naći.

Nosite se s tajmingom koji ne možete kontrolisati

Bežična asocijacija i DHCP često završe nakon što je hook pokrenut, pa restart može ne uspjeti dok put do servera još ne postoji. Kratko sačekajte tu adresu, pokušajte još jednom i zabilježite rezultat.

Razrješavanje imena je zasebna trka, jer desktop mrežni stek može obnoviti DNS nakon što je tunel već gore. Testirajte pretrage zasebno s resolvectl query internal.example umjesto da ih zaključujete iz ispravne rute. Tunel koji ispravno rutira, a ništa ne razrješava, DNS je problem, ne problem hooka.

Držite odluku hooka vidljivom upisivanjem faze, naziva jedinice i rezultata u dnevnik. Zabilježite u bilješkama mašine koji ste test buđenja pokrenuli, da se ispravan oporavak može razlikovati od sretnog. Odaberite najmanje ometajuću radnju koja vraća servis i pustite klijent koji se sam oporavlja da to učini. Potpuni restart odbacuje sesije u toku, što je stvarna cijena na laptopu koji se budi nekoliko puta dnevno.

Povezani članci