Executeu les tasques posteriors a la VPN des del despatxador, no des d’if-up
Un antic hook d’interfície no veurà una connexió VPN. Feu coincidir vpn-up amb l’UUID del perfil, manteniu la tasca repetible i planifiqueu una desconnexió que no s’arriba a produir mai.
Un script que s’ha d’executar després que la VPN pugi necessita un esdeveniment del component que posseeix la connexió. Un fitxer deixat en un directori antic de hooks de xarxa no és una devolució de trucada per a cada VPN que NetworkManager, pppd o un procés OpenVPN independent puguin crear. Cadascun d’aquests propietaris informa d’un esdeveniment diferent amb un entorn diferent, així que cal identificar el propietari abans de triar el hook. Altrament el script és correcte i simplement no s’executa mai.
Per a una VPN gestionada per NetworkManager, el despatxador és el lloc correcte, i vpn-up és l’acció correcta.
Feu servir vpn-up, no l’esdeveniment d’interfície
El despatxador distingeix up de vpn-up. El primer informa d’una interfície activada; el segon informa d’una connexió VPN activada. Que el Wi-Fi pugi només vol dir que l’enllaç subjacent existeix; el túnel encara pot estar negociant, o pot no autenticar-se mai.
El script rep la interfície i l’acció, mentre que els detalls de la connexió arriben per l’entorn, incloent-hi l’UUID del perfil i la interfície IP de la VPN. Llegiu aquestes variables en lloc d’inferir la identitat a partir dels noms dels dispositius.
Limiteu la coincidència a una connexió
Feu coincidir per l’UUID de la connexió, o per una altra identitat que proporcioni el despatxador, en lloc d’un prefix tun o ppp0. Els noms d’interfície no són estables, hi pot haver més d’un túnel alhora, i dos perfils poden portar el mateix nom de visualització. Fer coincidir un prefix tun vol dir que el script s’acabarà executant per a una connexió que ningú no volia tocar. També es pot executar dues vegades per a un perfil quan una reconnexió reconstrueix el dispositiu.
Feu la tasca idempotent. Una devolució de trucada que afegeix una ruta a cada invocació acaba omplint la taula de duplicats, i la segona còpia és la que trenca l’encaminament.
Saber què no demostra l’activació
vpn-pre-up s’executa abans que NetworkManager informi que la VPN està completament activada, i el gestor espera aquests scripts. Feu servir una etapa blocant només quan la tasca hi pertanyi de debò, perquè una comprovació lenta endarrereix l’activació que tots els altres components esperen veure.
Que les rutes hi siguin no demostra que una aplicació estigui escoltant, que un nom privat es resolgui o que existeixi una sessió d’usuari. Comproveu-ho per separat amb un temps d’espera limitat, i informeu de quina capa ha fallat en lloc de reintentar tota la cadena.
Respecteu el context en què s’executa el script
Els scripts del despatxador s’executen com a root, fora de qualsevol sessió d’usuari. No assumiu que l’entorn de l’usuari connectat, la sessió gràfica o un clauer desbloquejat estiguin disponibles. Ningú no hauria de respondre a un context d’escriptori absent fent que cada credencial sigui llegible per a cada procés. Manteniu la feina de la sessió d’usuari en un servei d’usuari o en un auxiliar de sessió que la devolució de trucada pugui senyalar sense suplantar l’usuari.
La propietat i els permisos del script també importen. Un fitxer executat com a root que qualsevol usuari pot substituir és una via d’escalada de privilegis, i és una troballa independent de si la lògica de la VPN és correcta.
Planifiqueu la desconnexió que no s’arriba a produir mai
NetworkManager documenta que vpn-pre-down no s’emet per a desconnexions forçades com una terminació inesperada o una pèrdua de connectivitat. Per tant, una neteja construïda només al voltant d’un pre-down graciós és incompleta per construcció. Qualsevol estat compartit que el script canviï necessita un altre propietari que el pugui restaurar després d’una caiguda, i aquest camí de recuperació s’ha de provar en lloc de suposar-lo.
Proveu el hook amb una connexió normal, una reconnexió, una desconnexió intencionada i un cable estirat. Registreu l’UUID, l’acció i la interfície que s’ha activat, sense enregistrar secrets. Aquest registre és l’única prova fiable que el hook s’ha executat per a la connexió que volíeu, i és el que fa segur el canvi següent.