Vstavite ukaz za ponovno povezavo v hook spanja in težava je videti rešena. Rešena je le, če se hook izvede po tem, ko omrežje obstaja, kot identiteta, ki jo odjemalec prepozna, po poti, ki jo odjemalec resnično izvede. Večina napak po prebuditvi je ena od teh treh, in nobena se ne pojavi kot napaka v samem hooku. Hook vseeno vrne uspeh.

Skript, ki se konča z ničlo, vam ni povedal nič o tem, ali se je tunel vrnil.

Hook se izvede, in potem?

#!/bin/sh
case "$1" in
  pre)
    vpn-client disconnect
    ;;
  post)
    vpn-client connect
    ;;
esac

Vsak dogodek pokliče hook dvakrat, pred prehodom in po njem, in mu preda fazo ter ime dogodka. Izvaja se kot root v minimalnem okolju, zato so potrebne absolutne poti in ne smemo pričakovati nobene spremenljivke namizne seje. Hitra vrnitev obeh klicev pove le, da se je skript izvedel. Ali se je profil nato dvignil, je ločeno opažanje in potrebuje svoj dokaz v dnevniku.

Argument faze obravnavajte kot del zasnove. Poskus ponovne povezave v fazi pre se zgodi, ko bo stroj pravkar izgubil vse, in ne more uspeti.

Root, minimalno okolje, napačen uporabnik

Če odjemalec hrani prijavni žeton za vsakega uporabnika, izvajanje hooka kot root ne pusti ničesar za predstavitev. Preverite stanje pod identiteto, ki jo hook dejansko uporablja, ne pod tisto, ki ste jo preizkusili iz namiznega terminala. Nekatere gradnje po prekinitvi pustijo tudi demona, ki drži vmesnik, zato ponovna povezava pristane v zastarelem stanju, čiščenje procesa pa ga najprej obnovi za ceno nečistega izklopa. Nobeno od obeh vedenj ni vidno, če preizkušate le srečno pot.

Pišite hook z absolutnimi potmi, ohranite ga v lasti roota in izvedljivega, in beležite, kaj je storil. Brez tega dnevnika se naslednja preiskava začne od ničle.

Samodejna povezava ni pot VPN-a

NetworkManager ponuja dva mehanizma aktivacije: zastavico samodejne povezave v profilu in sekundarne povezave, ki se začnejo, ko se aktivira primarni profil. Izvorne vrste naprav izvajajo prvo; vtičniki VPN so v preteklosti izvajali le drugo, zato označevanje samodejne povezave v profilu OpenVPN morda sploh nima učinka. Preglejte obe lastnosti in nato pripnite VPN kot sekundarno povezavo k profilu Wi-Fi ali Ethernet.

[Unit]
PartOf=NetworkManager.service
Requires=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service

Vmesnik WireGuard, ki ga upravlja enota systemd, potrebuje to dodatno datoteko namesto hooka, razvrščeno po tem, ko je omrežje povezano.

Počakajte na omrežje, z zgornjo mejo

timer=1
while ! ping -c1 -n -w1 203.0.113.1 >/dev/null; do
  sleep 1; timer=$((timer+1))
  [ $timer -ge 300 ] && exit 0
done
nmcli connection up "work-vpn"

Ob prebuditvi se lahko tunel zahteva, medtem ko se Wi-Fi še ponovno povezuje, zaradi česar je vsak fiksni spanec ugibanje. Počakajte na dosegljiv naslov, nato dvignite profil in omejite čakanje, da hook ne more držati poti prebujanja odprte v nedogled. Prednost dajte imenu profila pred številskim kazalom, in če se pravi profil razlikuje glede na omrežje, naj zdravi tunel svojo izbiro vnaprej zapiše v datoteko.

Zaščitite se tudi pred nevihtami ponovnega zagona, s štetjem poskusov in ustavitvijo. Čuvaj, ki se odzove na vsako neuspešno preverjanje, en izpad spremeni v zanko.

Enkrat suspendirajte sistem, nato v dnevniku preberite lasten izhod hooka. To je edini test, ki dokaže vrstni red.

Sorodni članki