Palaižiet uzdevumus pēc VPN no dispečera, nevis no if-up
Vecs saskarnes āķis neredzēs VPN savienojumu. Saskaņojiet vpn-up ar profila UUID, saglabājiet uzdevumu atkārtojamu un plānojiet atvienošanos, kas nekad neiestāsies.
Skriptam, kas jāpalaiž pēc VPN pacelšanas, nepieciešams notikums no komponentes, kurai pieder savienojums. Fails, kas ievietots vecā tīkla āķu direktorijā, nav atzvanīšana katram VPN, ko var izveidot NetworkManager, pppd vai atsevišķs OpenVPN process. Katrs no šiem īpašniekiem ziņo par citu notikumu ar citu vidi, tāpēc īpašnieks ir jānosaka pirms āķa izvēles. Citādi skripts ir pareizs un vienkārši nekad nepalaižas.
VPN, ko pārvalda NetworkManager, pareizā vieta ir dispečers, un vpn-up ir pareizā darbība.
Izmantojiet vpn-up, nevis saskarnes notikumu
Dispečers atšķir up no vpn-up. Pirmais ziņo par aktivizētu saskarni; otrais ziņo par aktivizētu VPN savienojumu. Wi-Fi pacelšanās nozīmē tikai to, ka pastāv pamata saite; tunelis var vēl sarunāties vai arī nekad nenotikt autentifikācija.
Skripts saņem saskarni un darbību, bet savienojuma detaļas nāk caur vidi, tostarp profila UUID un VPN IP saskarne. Lasiet šos mainīgos, nevis seciniet identitāti no ierīču nosaukumiem.
Ierobežojiet atbilstību vienam savienojumam
Saskaņojiet pēc savienojuma UUID vai citas identitātes, ko nodrošina dispečers, nevis pēc tun prefiksa vai ppp0. Saskarnes nosaukumi nav stabili, vienlaikus var pastāvēt vairāk nekā viens tunelis, un divi profili var nēsāt vienu un to pašu parādāmo nosaukumu. Saskaņošana pēc tun prefiksa nozīmē, ka skripts galu galā palaižas savienojumam, kuru neviens negrasījās aiztikt. Tas var palaisties arī divas reizes vienam profilam, kad atkārtota savienošanās pārbūvē ierīci.
Padariet uzdevumu idempotentu. Atzvanīšana, kas katrā izsaukumā pievieno maršrutu, galu galā piepilda tabulu ar dublikātiem, un tieši otrā kopija sabojā maršrutēšanu.
Ziniet, ko aktivizācija nepierāda
vpn-pre-up darbojas pirms NetworkManager ziņo par pilnīgu VPN aktivizāciju, un pārvaldnieks gaida šos skriptus. Bloķējošu posmu izmantojiet tikai tad, kad uzdevums patiešām tur pieder, jo lēna pārbaude aizkavē aktivizāciju, kuru gaida visas citas komponentes.
Maršrutu esamība nepierāda, ka lietojumprogramma klausās, ka privāts nosaukums tiek atrisināts vai ka pastāv lietotāja sesija. Pārbaudiet to atsevišķi ar ierobežotu laiku un ziņojiet, kurš slānis neizdevās, nevis atkārtojiet visu ķēdi.
Cieniet kontekstu, kurā skripts darbojas
Dispečera skripti darbojas kā root, ārpus jebkuras lietotāja sesijas. Nepieņemiet, ka ir pieejama pieteikušā lietotāja vide, grafiskā sesija vai atslēgtā atslēgu pakaramā. Nevienam nevajadzētu reaģēt uz trūkstošu darbvirsmas kontekstu, padarot katru akreditācijas datu vienumu lasāmu katram procesam. Turiet lietotāja sesijas darbu lietotāja servisā vai sesijas palīgā, kuram atzvanīšana var dot signālu, neatveidojot lietotāju.
Skripta īpašumtiesības un atļaujas arī ir svarīgas. Fails, kas tiek izpildīts kā root un ko jebkurš lietotājs var aizstāt, ir privilēģiju paaugstināšanas ceļš, un tas ir atradums, kas nav atkarīgs no tā, vai VPN loģika ir pareiza.
Plānojiet atvienošanos, kas nekad neiestāsies
NetworkManager dokumentē, ka vpn-pre-down netiek izdots piespiedu atvienošanās gadījumos, piemēram, negaidītas pārtraukšanas vai savienojuma zuduma laikā. Tāpēc tīrīšana, kas veidota tikai ap maigu pre-down, pēc uzbūves ir nepilnīga. Jebkuram koplietotam stāvoklim, ko skripts maina, nepieciešams cits īpašnieks, kas to var atjaunot pēc avārijas, un šis atjaunošanas ceļš ir jāpārbauda, nevis jāpieņem.
Izmēģiniet āķi ar parastu savienojumu, atkārtotu savienošanos, tīšu atvienošanos un izvilktu kabeli. Reģistrējiet UUID, darbību un saskarni, kas palaidās, bez noslēpumu reģistrēšanas. Šis ieraksts ir vienīgais ticamais pierādījums, ka āķis darbojās jūsu paredzētajam savienojumam, un tas padara nākamo izmaiņu drošu.