Connectar un servei dependent a tun0.device sembla subscriure's al túnel, i no ho és. Una unitat de dispositiu reflecteix que la interfície existeix, cosa que pot continuar sent certa durant una connexió fallida i la reconnexió posterior. Llavors el servei actua en el moment equivocat, o mai, segons si la interfície va desaparèixer mentrestant. El ganxo que descriu l'esdeveniment que realment us importa és el que crida OpenVPN, no el que infereix systemd.

Decidiu quina condició necessita el servei abans de triar el disparador, perquè els tres candidats no són intercanviables.

Què segueix realment la unitat de dispositiu

systemd crea una unitat de dispositiu a partir de la visió del nucli d'una interfície de xarxa, així que tun0.device esdevé actiu quan la interfície apareix i inactiu quan s'elimina. Amb persist-tun, un reinici suau manté la interfície al lloc, així que la unitat no oscil·la mai i res que hi estigui lligat no es dispara. Fins i tot sense persistència, la unitat no diu res sobre rutes, DNS ni si l'extrem remot respon.

Això la converteix en un mal substitut de 'la VPN està a punt'. Un oient que només necessita l'adreça local pot quedar satisfet amb l'existència de la interfície, mentre que un servei que crida una aplicació a la xarxa remota necessita rutes i accessibilitat, que la unitat de dispositiu no pot expressar.

up, route-up i up-restart volen dir coses diferents

up s'executa després d'obrir el dispositiu TUN/TAP i configurar la interfície, que és el moment adequat per a un oient que lliga l'adreça assignada. route-up s'executa després d'instal·lar les rutes, subjecte a qualsevol retard de ruta configurat, i s'adequa a la feina que necessita l'etapa de rutes completada. Cap dels dos demostra que l'aplicació remota respongui. Triar entre ells és una qüestió de què necessita el servei, no de quin ganxo sona més acabat.

Amb persist-tun, els reinicis reutilitzen el dispositiu, així que up no s'executa de nou tret que up-restart estigui establert. Aquesta opció habilita el script up per al cicle de vida de reinici documentat, i el seu entorn és reduït en comparació amb una primera arrencada. Un script que assumeix l'entorn complet funciona a la primera connexió i falla a la següent.

Envieu l'acció sense esperar-la

Un ganxo que crida systemctl restart de manera síncrona pot quedar bloquejat davant d'una unitat l'ordenació de la qual espera el túnel. systemctl --no-block try-restart vpn-dependent.service encua la tasca i torna, cosa que impedeix que el ganxo bloquegi la connexió a la qual estava reaccionant. try-restart actua només sobre una unitat en execució, mentre que restart també inicia una d'inactiva; trieu deliberadament, no per costum.

Encuar no és verificar. El ganxo retorna èxit tan bon punt la tasca s'accepta, així que la comprovació ha de fer-se al registre de la unitat destinatària o en el seu estat real d'oient.

La política de reinici viu a la unitat, no al ganxo

Una unitat oneshot amb RemainAfterExit=yes roman activa després que la seva ordre surti, i una segona petició d'inici no fa res perquè systemd la considera ja iniciada. Això és una propietat amb què s'ha de dissenyar, no un defecte que s'hagi d'evitar amb crides d'inici repetides. Si l'acció ha de córrer per connexió, la unitat necessita una forma que ho permeti.

After= ordena unitats, i BindsTo= lliga vides, però cap de les dues significa 'reinicia això sempre que la VPN es reconecti'. Una unitat lligada al túnel s'atura quan el túnel s'atura; no es reinicia sola quan el túnel torna tret que alguna cosa la torni a iniciar.

Proveu tres reconnexions, no una

L'arrencada en fred, un reinici complet del client i una reconnexió suau exerceixen cadascun un camí diferent. La reconnexió suau és la que exposa un up-restart que falta, un entorn reduït o una unitat de dispositiu que mai no es va tornar inactiva. Executeu les tres i confirmeu les dues direccions: el servei actua quan el túnel puja, i no es reinicia en canvis d'enllaç no relacionats com un roaming Wi-Fi.

Manteniu un camí de recuperació independent quan el servei dependent porta el vostre propi accés administratiu. Un ganxo que reinicia allò a través del qual esteu connectats és un canvi que us pot deixar fora.

Articles relacionats