Arrêter le service supprime l’interface même avec persist-tun défini. C’est l’option qui fonctionne comme documenté, pas une panne. L’option décrit un chemin de redémarrage au sein d’un processus en cours, et systemctl stop n’est pas ce chemin.

Lisez les deux noms ensemble et la conception devient claire. L’un conserve un descripteur, l’autre conserve le matériel de clé, et les deux existent à cause de ce qui se passe après l’abandon des privilèges.

Les deux ressources et le redémarrage auquel elles appartiennent

OpenVPN signale son propre redémarrage dans deux situations ordinaires. Un SIGUSR1 explicite le fait, et un ping-restart déclenché par un pair mort fait de même. Les deux laissent le processus vivant et réexécutent la configuration de la connexion, et c’est là que les options gagnent leur place.

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

Seule la ligne du redémarrage logiciel est ce que ces deux options changent, et le travail qu’elles évitent est la partie coûteuse sur un lien chargé. Rouvrir un périphérique démonte les adresses et les routes qui y sont attachées, et les reconstruire peut perdre des paquets qui étaient en vol au début du redémarrage. Un arrêt détruit les mêmes objets sans aucune option pour les préserver.

Pourquoi ces options existent-elles

Un serveur OpenVPN durci démarre généralement en root, ouvre ses clés et son périphérique, puis passe à un utilisateur non privilégié. Après ce passage, certaines opérations ont tout simplement disparu. Lire un fichier de clé en mode 0600, créer une interface réseau ou modifier des routes peuvent tous être refusés.

Sans les options persist, un pair qui reste silencieux assez longtemps pour déclencher ping-restart forcerait exactement ces opérations. La reconnexion échouerait alors même que rien dans la configuration n’avait changé. Le processus semblerait mourir sans raison, et le journal afficherait une erreur de permission plutôt qu’une erreur réseau.

Avec elles, le redémarrage logiciel réutilise ce que la phase privilégiée a déjà obtenu. Aucune magie n’est en jeu et le processus ne survit à rien. L’acquisition des ressources est simplement différée.

Lisez la première erreur, pas la dernière

Quand un redémarrage échoue, lisez la première erreur plutôt que la dernière. Une clé protégée, un fichier auth, un ioctl d’interface et un hook externe sont quatre ressources différentes. En conserver une ne dit rien sur l’accès aux autres. Un hook qui appelle un outil de pare-feu a toujours besoin des privilèges que cet outil exige.

Les hooks ont leur propre interrupteur. Le manuel d’OpenVPN associe les options persist à up-restart, qui décide si les scripts up et down sont réexécutés après un redémarrage. Une interface restée active ne vous dit donc rien sur le rafraîchissement de votre intégration de résolution.

# 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

Cette paire de commandes sépare les deux modes de défaillance en quelques secondes. Une interface présente avec des routes manquantes est un problème de hook ou de route. Une interface qui a disparu signifie que le processus a réellement pris fin.

Une interface conservée n’est pas un kill switch

Si l’exigence est que le trafic ne quitte jamais le tunnel, un périphérique conservé ne le fournit pas. Les routes de l’autre famille d’adresses, une seconde route par défaut et le cas où le processus se termine complètement restent tous hors du champ de l’option.

Traitez les deux exigences séparément. Conserver l’objet tunnel à travers les reconnexions est une commodité pour le démon. Bloquer la sortie lorsque le tunnel est en panne est une politique de pare-feu avec ses propres règles et son propre test. Les confondre produit une configuration qui semble défensive et se comporte comme une reconnexion au mieux.

Nommez l’événement avant de le diagnostiquer. Un redémarrage logiciel, une tentative de connexion échouée et un arrêt de service sont trois événements avec trois comportements, et seul le premier est ce que ces options décrivent.

Articles similaires