Skript, ki se mora izvesti po dvigu VPN, potrebuje dogodek od komponente, ki ima povezavo. Datoteka, vržena v staro mapo omrežnih kljuk, ni povratni klic za vsak VPN, ki ga lahko ustvarijo NetworkManager, pppd ali samostojen proces OpenVPN. Vsak od teh lastnikov poroča o drugem dogodku z drugim okoljem, zato je treba lastnika določiti, preden se kljuka izbere. Sicer je skript pravilen in se preprosto nikoli ne zažene.

Za VPN, ki ga upravlja NetworkManager, je dispečer pravo mesto, vpn-up pa pravo dejanje.

Uporabite vpn-up, ne dogodka vmesnika

Dispečer razlikuje up od vpn-up. Prvi poroča o aktiviranem vmesniku; drugi poroča o aktivirani povezavi VPN. Dvig Wi-Fi pomeni le, da osnovna povezava obstaja; tunel se morda še pogaja ali pa se nikoli ne overi.

Skript prejme vmesnik in dejanje, podrobnosti povezave pa pridejo skozi okolje, vključno z UUID profila in IP vmesnikom VPN. Berite te spremenljivke, namesto da bi identiteto sklepali iz imen naprav.

Omejite ujemanje na eno povezavo

Ujemite po UUID povezave ali po drugi identiteti, ki jo zagotovi dispečer, ne po predponi tun ali ppp0. Imena vmesnikov niso stabilna, hkrati lahko obstaja več kot en tunel, in dva profila lahko nosita isto prikazno ime. Ujemanje predpone tun pomeni, da se bo skript prej ali slej sprožil za povezavo, ki se je nihče ni nameraval dotakniti. Lahko se sproži tudi dvakrat za en profil, ko ponovna povezava znova zgradi napravo.

Naredite opravilo idempotentno. Povratni klic, ki ob vsakem klicu doda pot, na koncu napolni tabelo z dvojniki, in prav druga kopija pokvari usmerjanje.

Vedite, česa aktivacija ne dokazuje

vpn-pre-up se izvede, preden NetworkManager poroča o popolnoma aktiviranem VPN, in upravitelj čaka na te skripte. Uporabite blokirno stopnjo le, ko opravilo res spada tja, ker počasno preverjanje zakasni aktivacijo, na katero čakajo vse druge komponente.

Obstoj poti ne dokazuje, da aplikacija posluša, da se zasebno ime razreši ali da obstaja uporabniška seja. To preverite ločeno z omejenim časom in poročajte, katera plast je odpovedala, namesto da ponavljate celotno verigo.

Spoštujte kontekst, v katerem se skript izvaja

Skripti dispečerja se izvajajo kot root, zunaj vsake uporabniške seje. Ne predpostavljajte, da so na voljo okolje prijavljenega uporabnika, njegova grafična seja ali odkljenjen obesek za ključe. Nihče ne bi smel na manjkajoči kontekst namizja odgovoriti tako, da vsako poverilnico naredi berljivo vsakemu procesu. Delo uporabniške seje imejte v uporabniški storitvi ali pomočniku seje, ki mu povratni klic lahko pošlje signal, ne da bi se pretvarjal za uporabnika.

Tudi lastništvo in dovoljenja skripta sta pomembna. Datoteka, ki se izvaja kot root in jo lahko zamenja vsak uporabnik, je pot za povišanje pravic, in to je ugotovitev, neodvisna od tega, ali je logika VPN pravilna.

Načrtujte prekinitev, ki se nikoli ne sproži

NetworkManager dokumentira, da se vpn-pre-down ne odda pri prisilnih prekinitvah, kot je nepričakovana ustavitev ali izguba povezljivosti. Zato je čiščenje, zgrajeno le okrog mehkega pre-down, po zgradbi nepopolno. Vsako skupno stanje, ki ga skript spremeni, potrebuje drugega lastnika, ki ga lahko obnovi po sesutju, in to pot obnavljanja je treba preizkusiti, ne pa predpostaviti.

Preizkusite kljuko z običajno povezavo, ponovno povezavo, namerno prekinitvijo in izvlečenim kablom. Zabeležite UUID, dejanje in vmesnik, ki se je sprožil, brez beleženja skrivnosti. Ta zapis je edini zanesljiv dokaz, da je kljuka delovala za povezavo, ki ste jo nameravali, in prav on naredi naslednjo spremembo varno.

Sorodni članki