La VPN de la vostra xarxa domèstica no té res a fer quan l'ordinador portàtil ja és en aquesta xarxa. La drecera temptadora és una ordre de preparació que surt amb un codi diferent de zero; això fa fallar la unitat i fa que tots els taulers semblin espatllats. systemd té una directiva per a exactament aquest tipus de decisió, i separa una omissió deliberada d'una fallada real. Fer-ho bé consisteix sobretot a escriure què significa cada codi de sortida.

Per què una precondició fallida és la forma equivocada

ExecStartPre tracta una sortida diferent de zero com una fallada d'inici, cosa correcta per a una ordre que prepara el servei. Fer-la servir com a condició fa que una decisió de política sigui indistingible d'una dependència espatllada. ExecCondition existeix perquè una unitat pugui negar-se a iniciar-se sense quedar marcada com a fallida.

Aquesta distinció importa a les tres de la matinada, quan ningú no vol classificar una unitat vermella que es comportava tal com estava dissenyada. Una unitat fallida també amaga les fallades reals entre les intencionades.

Primer escriviu el contracte dels codis de sortida

Escriviu el contracte abans del script. La sortida zero significa continuar, la sortida u significa ometre la resta d'ordres d'inici, i la sortida 255 significa que la condició mateixa no s'ha pogut executar. Els codis entre dos i 254 normalment també signifiquen ometre, cosa fàcil d'oblidar quan l'ajudant retorna un codi d'error aleatori. El fitxer drop-in de sota adjunta l'ajudant al nom real de la unitat.

[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpn

Reviseu la unitat efectiva per si té valors heretats de SuccessExitStatus o stop-post abans de suposar la semàntica per defecte. Després proveu cadascun dels tres resultats de manera deliberada.

Una pista de xarxa no és prova d'ubicació

Una adreça de router accessible o una MAC coneguda poden suggerir la xarxa correcta, i cap de les dues no ho demostra. Una altra xarxa pot reutilitzar la mateixa adreça, les dades ARP poden ser obsoletes i els identificadors es poden imitar. Tracteu la sonda com una optimització coherent amb la política, no com un resultat d'autenticació.

Decidiu per endavant què significa la incertesa. Iniciar la VPN quan no esteu segurs és segur per a un client que simplement no es podria connectar; ometre-la quan no esteu segurs no ho és. Feu que la sonda estigui limitada i llegiu la interfície activa en lloc de suposar la primera de la llista. Una sonda que es penja és pitjor que una que respon que no, perquè la unitat l'espera.

Anoteu aquestes suposicions al costat del fitxer de la unitat perquè la propera persona sàpiga què creu l'ajudant. Un comentari a l'inici del script és el lloc més barat per conservar-les.

Gestioneu el moviment entre xarxes

La condició s'executa quan arrenca el servei i no es torna a avaluar després. Una unitat omesa continua omesa després que l'ordinador es traslladi a una cafeteria, i un túnel actiu continua aixecat després que l'ordinador torni a casa. Connecteu el cicle de vida del canvi de xarxa amb la decisió d'inici i aturada mitjançant un mecanisme a part.

systemctl cat home-vpn.service

Proveu quatre casos: inici a casa, inici fora de casa, una sonda que no pot executar-se i un moviment entre xarxes mentre la unitat és activa. Mantingueu el motiu de l'omissió visible al registre perquè una decisió intencionada no sembli mai una fallada d'autenticació. La referència del servei documenta la semàntica de sortida i la versió mínima.

Articles relacionats