Skript, mis peab käivituma pärast VPN-i ülestõusmist, vajab sündmust komponendilt, mis ühendust omab. Vanasse võrgukonksude kataloogi asetatud fail ei ole tagasikutse iga VPN-i jaoks, mille võib luua NetworkManager, pppd või eraldiseisev OpenVPN protsess. Kõik need omanikud teatavad erinevast sündmusest erineva keskkonnaga, seega tuleb omanik tuvastada enne konksu valimist. Muidu on skript korrektne ja lihtsalt ei käivitu kunagi.

NetworkManageri hallatava VPN-i jaoks on dispetšer õige koht ja vpn-up on õige tegevus.

Kasutage vpn-upi, mitte liidese sündmust

Dispetšer eristab up ja vpn-up. Esimene teatab aktiveeritud liidesest; teine teatab aktiveeritud VPN-ühendusest. Wi-Fi ülestõusmine tähendab ainult, et aluslink on olemas; tunnel võib veel läbirääkimisi pidada või ei pruugi kunagi autentida.

Skript saab liidese ja tegevuse, samas kui ühenduse üksikasjad saabuvad keskkonna kaudu, sealhulgas profiili UUID ja VPN-i IP-liides. Lugege neid muutujaid, selle asemel et tuletada identiteeti seadmenimedest.

Piirake sobivus ühe ühendusega

Sobitage ühenduse UUID või muu identiteedi järgi, mille dispetšer annab, mitte tun eesliite või ppp0 järgi. Liidesenimed ei ole stabiilsed, korraga võib eksisteerida rohkem kui üks tunnel, ja kaks profiili võivad kanda sama kuvatavat nime. tun-i eesliite sobivus tähendab, et skript vallandub lõpuks ühenduse jaoks, mida keegi ei kavatsenud puutuda. See võib ühe profiili jaoks vallanduda ka kaks korda, kui taasühendus seadme uuesti ehitab.

Muutke toiming idempotentseks. Tagasikutse, mis lisab igal väljakutsel marsruudi, täidab lõpuks tabeli duplikaatidega ja just teine koopia rikub marsruutimise.

Tea, mida aktiveerimine ei tõesta

vpn-pre-up käivitub enne, kui NetworkManager teatab VPN-i täielikust aktiveerimisest, ja haldur ootab neid skripte. Kasutage blokeerivat etappi ainult siis, kui toiming sinna tõesti kuulub, sest aeglane kontroll viivitab aktiveerimist, mida kõik teised komponendid ootavad.

Marsruutide olemasolu ei tõesta, et rakendus kuulab, privaatne nimi laheneb või kasutajaseanss on olemas. Kontrollige neid eraldi piiratud ajalõpuga ja teatage, milline kiht ebaõnnestus, selle asemel et kogu ketti uuesti proovida.

Austage keskkonda, milles skript töötab

Dispetšeri skriptid töötavad root-ina, väljaspool ükskõik millist kasutajaseanssi. Ärge eeldage, et sisseloginud kasutaja keskkond, graafiline seanss või avatud võtmehoidla on saadaval. Keegi ei peaks puuduva töölauakeskkonna peale vastama nii, et teeb iga volituse igale protsessile loetavaks. Hoidke kasutajaseansi tööd kasutajateenuses või seansiabilises, millele tagasikutse saab signaali saata ilma kasutajat jäljendamata.

Skripti omand ja õigused loevad samuti. Root-ina käivitatav fail, mille iga kasutaja saab asendada, on privileegide eskaleerimise tee, ja see on leid, mis ei sõltu sellest, kas VPN-i loogika on korrektne.

Arvestage katkestusega, mida kunagi ei vallandata

NetworkManager dokumenteerib, et vpn-pre-down ei saadeta sunnitud katkestuste puhul, nagu ootamatu lõpetamine või ühenduvuse kadu. Seega on ainult sujuvale pre-down-ile ehitatud koristus konstruktsiooni poolest puudulik. Iga jagatud olek, mida skript muudab, vajab teist omanikku, kes suudab selle pärast krahhi taastada, ja seda taastetee tuleb testida, mitte eeldada.

Katsetage konksu tavalise ühenduse, taasühenduse, tahtliku katkestuse ja väljatõmmatud kaabliga. Registreerige UUID, tegevus ja liides, mis vallandus, ilma saladusi logimata. See kirje on ainus usaldusväärne tõend, et konks töötas teie kavatsetud ühenduse jaoks, ja just see teeb järgmise muudatuse turvaliseks.

Seotud artiklid