Samotný hook spánku VPN nevráti
Hook, ktorý skončí s nulou, dokazuje len to, že sa skript spustil. Zaraďte ho až za sieť, použite správnu identitu a overte, či je profil vôbec spôsobilý.
Dajte do hooku spánku príkaz na opätovné pripojenie a problém vyzerá vyriešený. Vyriešený je len vtedy, keď hook beží po tom, čo sieť existuje, pod identitou, ktorú klient rozpozná, cestou, ktorú klient skutočne implementuje. Väčšina zlyhaní po prebudení je jedna z tých troch a žiadne sa neprejaví ako chyba v samotnom hooku. Hook vráti úspech tak či tak.
Skript, ktorý skončí s nulou, vám nepovedal nič o tom, či sa tunel vrátil.
Hook beží, a čo ďalej?
#!/bin/sh
case "$1" in
pre)
vpn-client disconnect
;;
post)
vpn-client connect
;;
esac
Každá udalosť vyvolá hook dvakrát, pred prechodom a po ňom, a odovzdá mu fázu a názov udalosti. Beží ako root s minimálnym prostredím, takže sú potrebné absolútne cesty a nemá sa očakávať žiadna premenná z desktopovej relácie. To, že sa obe volania rýchlo vrátia, hovorí len, že sa skript spustil. Či sa profil potom zdvihol, je samostatné pozorovanie a potrebuje vlastný dôkaz v logu.
Berte argument fázy ako súčasť návrhu. Pokus o opätovné pripojenie vo fáze pre nastáva, keď stroj práve stráca všetko, a nemôže uspieť.
Root, minimálne prostredie, nesprávny používateľ
Ak klient drží prihlasovací token pre každého používateľa, beh hooku ako root mu nenechá nič na predloženie. Kontrolujte stav pod identitou, ktorú hook skutočne používa, nie pod tou, ktorú ste testovali z desktopového terminálu. Niektoré zostavenia po odpojení nechávajú aj démona, ktorý drží rozhranie, takže opätovné pripojenie skončí v zastaranom stave, a vyčistenie procesu ho najprv obnoví za cenu nečistého vypnutia. Ani jedno správanie nie je viditeľné, ak testujete len šťastnú cestu.
Píšte hook s absolútnymi cestami, držte ho vlastnený rootom a spustiteľný a logujte, čo urobil. Bez toho logu začína ďalšie vyšetrovanie od nuly.
Automatické pripojenie nie je cesta VPN
NetworkManager ponúka dva aktivačné mechanizmy: príznak automatického pripojenia v profile a sekundárne pripojenia, ktoré sa spustia, keď sa aktivuje primárny profil. Natívne typy zariadení implementujú prvý; pluginy VPN historicky implementovali len druhý, takže zaškrtnutie automatického pripojenia v profile OpenVPN nemusí mať vôbec žiadny účinok. Preskúmajte obe vlastnosti a potom pripojte VPN ako sekundárne k profilu Wi-Fi alebo Ethernet.
[Unit] PartOf=NetworkManager.service Requires=NetworkManager-wait-online.service After=NetworkManager-wait-online.service
Rozhranie WireGuard spravované jednotkou systemd potrebuje ten drop-in namiesto hooku, zoradený po tom, čo je sieť online.
Počkajte na sieť, ale s limitom
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"
Pri prebudení môže byť tunel vyžiadaný, kým sa Wi-Fi ešte znova pripája, čo robí z každého pevného spánku hádanie. Počkajte na dostupnú adresu, potom zdvihnite profil a obmedzte čakanie, aby hook nemohol držať cestu prebudenia otvorenú donekonečna. Uprednostnite názov profilu pred číselným indexom, a ak sa správny profil líši podľa siete, nech si zdravý tunel svoju voľbu vopred zapíše do súboru.
Chráňte sa aj pred búrkami reštartov, počítaním pokusov a zastavením. Strážca, ktorý reaguje na každú neúspešnú kontrolu, premení jeden výpadok na slučku.
Pozastavte systém raz, potom si v žurnáli prečítajte vlastný výstup hooku. To je jediný test, ktorý dokazuje poradie.