Skripta koja se mora pokrenuti nakon podizanja VPN-a treba događaj od komponente koja posjeduje vezu. Datoteka stavljena u stari direktorij mrežnog hooka nije povratni poziv za svaki VPN koji NetworkManager, pppd ili samostalni proces OpenVPN mogu stvoriti. Svaki od tih vlasnika prijavljuje drugi događaj s drugim okruženjem, pa se vlasnik mora identificirati prije nego što se hook odabere. Inače je skripta ispravna i jednostavno se nikad ne pokreće.

Za VPN kojim upravlja NetworkManager, dispečer je pravo mjesto, a vpn-up je prava radnja.

Koristite vpn-up, a ne događaj sučelja

Dispečer razlikuje up od vpn-up. Prvi prijavljuje aktivirano sučelje; drugi prijavljuje aktiviranu VPN vezu. Podizanje Wi-Fi mreže znači samo da osnovni link postoji; tunel možda još pregovara ili se možda nikad ne autentificira.

Skripta prima sučelje i radnju, dok detalji veze dolaze kroz okruženje, uključujući UUID profila i VPN IP sučelje. Čitajte te varijable umjesto da identitet zaključujete iz naziva uređaja.

Ograničite podudaranje na jednu vezu

Uparite po UUID-u veze ili drugom identitetu koji dispečer daje, a ne po prefiksu tun ili ppp0. Nazivi sučelja nisu stabilni, istovremeno može postojati više od jednog tunela, a dva profila mogu nositi isti prikazani naziv. Podudaranje po prefiksu tun znači da će se skripta na kraju pokrenuti za vezu koju nitko nije namjeravao dirati. Može se pokrenuti i dvaput za jedan profil kada ponovno povezivanje ponovno izgradi uređaj.

Učinite zadatak idempotentnim. Povratni poziv koji pri svakom pozivu dodaje rutu na kraju napuni tablicu duplikatima, a druga kopija je ona koja kvari usmjeravanje.

Znajte što aktivacija ne dokazuje

vpn-pre-up se izvršava prije nego NetworkManager prijavi da je VPN potpuno aktiviran, a upravitelj čeka te skripte. Koristite blokirajuću fazu samo kada zadatak zaista pripada tamo, jer spora provjera odgađa aktivaciju koju svaka druga komponenta čeka da vidi.

Prisutnost ruta ne dokazuje da aplikacija sluša, da se privatno ime razrješava ili da korisnička sesija postoji. Provjerite to odvojeno s ograničenim vremenskim rokom i prijavite koji sloj je zakazao umjesto da ponavljate cijeli lanac.

Poštujte kontekst u kojem se skripta izvršava

Skripte dispečera rade kao root, izvan svake korisničke sesije. Ne pretpostavljajte da su okruženje prijavljenog korisnika, grafička sesija ili otključani privjesak s ključevima dostupni. Nitko ne bi trebao na nedostatak radnog okruženja odgovoriti time da svaki akreditiv učini čitljivim za svaki proces. Držite rad korisničke sesije u korisničkoj usluzi ili pomoćniku sesije kojem povratni poziv može signalizirati bez izdavanja za korisnika.

Vlasništvo i dozvole na skripti također su važni. Datoteka koju izvršava root i koju bilo koji korisnik može zamijeniti jest put za eskalaciju privilegija i nalaz neovisan od toga je li VPN logika ispravna.

Planirajte prekid koji se nikad ne dogodi

NetworkManager dokumentira da se vpn-pre-down ne emitira za prisilne prekide kao što su neočekivani prekid rada ili gubitak veze. Zato je čišćenje izgrađeno samo oko mirnog pre-down-a po konstrukciji nepotpuno. Svako dijeljeno stanje koje skripta mijenja treba drugog vlasnika koji ga može obnoviti nakon pada, a taj put oporavka mora se testirati, a ne pretpostaviti.

Testirajte hook normalnim povezivanjem, ponovnim povezivanjem, namjernim prekidom i izvučenim kabelom. Zabilježite UUID, radnju i sučelje koje se pokrenulo, bez bilježenja tajni. Taj zapis je jedini pouzdan dokaz da je hook radio za vezu koju ste namjeravali i on čini sljedeću promjenu sigurnom.

Povezani članci