Aturar el servei elimina la interfície fins i tot amb persist-tun definit. Aquesta és l’opció funcionant tal com està documentada, no un error. L’opció descriu un camí de reinici dins d’un procés en execució, i systemctl stop no és aquest camí.

Llegiu els dos noms junts i el disseny es fa clar. Un conserva un descriptor, l’altre conserva material de clau, i tots dos existeixen pel que passa després de deixar anar els privilegis.

Els dos recursos i el reinici al qual pertanyen

OpenVPN senyalitza el seu propi reinici en dues situacions habituals. Un SIGUSR1 explícit ho fa, i un ping-restart provocat per un company mort fa el mateix. Tots dos deixen el procés viu i tornen a executar la configuració de la connexió, i aquí és on les opcions guanyen el seu lloc.

EventTUN/TAP deviceKey and auth filesAddresses and routesup/down hooks
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itselfsurvives only with persist-tunsurvive only with persist-keysurvive with the device, otherwise rebuiltrun again only when restart hooks are enabled
Configuration reload, SIGHUPrecreatedre-read from diskrebuilt once the device returnsrun again
Service stoplostre-read at the next startremovedrun at the next start

Només la fila del reinici suau és el que canvien aquestes dues opcions, i la feina que s’estalvien és la part cara en un enllaç ocupat. Reobrir un dispositiu destrueix les adreces i rutes que hi estan lligades, i reconstruir-les pot deixar caure paquets que estaven en vol quan va començar el reinici. Una aturada destrueix els mateixos objectes sense cap opció per conservar-los.

Per què existeixen les opcions, al capdavall

Un servidor OpenVPN endurit normalment arrenca com a root, obre les seves claus i el seu dispositiu i després passa a un usuari sense privilegis. Després d’aquest pas, algunes operacions simplement desapareixen. Llegir un fitxer de clau amb mode 0600, crear una interfície de xarxa o canviar rutes poden ser rebutjats.

Sense les opcions persist, un company que calli prou estona per desencadenar ping-restart forçaria exactament aquestes operacions. La reconnexió fallaria tot i que res de la configuració no havia canviat. El procés semblaria morir sense motiu, i el registre mostraria un error de permisos en lloc d’un error de xarxa.

Amb elles, el reinici suau reutilitza el que la fase privilegiada ja havia obtingut. No hi ha màgia i el procés no sobreviu a res. L’adquisició de recursos simplement s’ajorna.

Llegiu el primer error, no l’últim

Quan un reinici falla, llegiu el primer error en lloc de l’últim. Una clau protegida, un fitxer auth, un ioctl d’interfície i un hook extern són quatre recursos diferents. Conservar-ne un no diu res sobre l’accés als altres. Un hook que crida una eina de firewall encara necessita els privilegis que aquesta eina exigeix.

Els hooks tenen el seu propi commutador. El manual d’OpenVPN aparella les opcions persist amb up-restart, que decideix si els scripts up i down es tornen a executar després d’un reinici. Per tant, una interfície que ha quedat aixecada no us diu res sobre si la vostra integració de resolució s’ha refrescat.

# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'

# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0

Aquest parell d’ordres separa els dos modes de fallada en segons. Una interfície present amb rutes que falten és un problema de hook o de ruta. Una interfície que ha desaparegut vol dir que el procés realment ha acabat.

Una interfície conservada no és un kill switch

Si el requisit és que el trànsit no surti mai fora del túnel, un dispositiu conservat no ho lliura. Les rutes per a l’altra família d’adreces, una segona ruta per defecte i el cas en què el procés surt del tot queden fora de l’abast de l’opció.

Tracteu els dos requisits per separat. Conservar l’objecte del túnel entre reconnexions és una comoditat per al dimoni. Bloquejar la sortida quan el túnel està caigut és una política de firewall amb les seves pròpies regles i la seva pròpia prova. Confondre’ls produeix una configuració que sembla defensiva i es comporta com una reconnexió de millor esforç.

Nomeni l’esdeveniment abans de diagnosticar-lo. Un reinici suau, un intent de connexió fallit i una aturada del servei són tres esdeveniments amb tres comportaments, i només el primer és el que descriuen aquestes opcions.

Articles relacionats