Le script du hook se déclenche, lit ppp0 et applique des routes à l’interface qui porte ce nom à cet instant. Parfois c’est le tunnel que vous visiez ; parfois c’est une session connectée une minute plus tôt. La reconnexion suivante déplace le numéro, et le même script configure silencieusement la mauvaise liaison. La correction consiste à prendre l’interface de l’invocation qui vient de s’exécuter et à transporter le profil visé à côté d’elle.

Suivre une session des options jusqu’au hook

Commencez là où la session est créée. xl2tpd lance pppd avec le fichier d’options nommé par le pppoptfile de ce tunnel, si bien que le plugin, le numéro d’unité et tout marqueur de profil se décident là et non dans un fichier global. Un gestionnaire de connexions peut générer ses propres options, ce qui signifie que modifier /etc/ppp/options ne prouve pas que le tunnel qui vous intéresse a changé. Lorsque la liaison monte, pppd exécute les scripts de notification du répartiteur de la distribution. Ces scripts reçoivent le nom de l’interface comme premier argument et le marqueur de profil comme sixième.

L’environnement porte les mêmes faits sous des noms comme IFNAME et PPP_IPPARAM, mais leur disponibilité dépend du répartiteur installé. Lisez le répartiteur avant de vous fier à une variable : certaines distributions conservent l’ordre des arguments d’origine, d’autres filtrent l’environnement avant d’appeler votre script. Un script qui n’utilise que $1 et le sixième argument fonctionne dans les deux cas.

Lire l’interface depuis l’invocation

Le hook traditionnel reçoit l’interface en premier. Cette valeur positionnelle est l’identifiant d’interface qui décrit la session ayant déclenché le script. Enregistrez-la dans une variable en haut, puis utilisez cette variable pour les routes, les règles de pare-feu et le démontage.

ipparam office-vpn

Attachez un marqueur de profil là où les options sont définies, pas dans le script. Avec cette ligne dans le fichier d’options du tunnel, chaque session créée depuis ce fichier porte office-vpn comme sixième argument. Le script peut brancher sur le marqueur tout en agissant sur la véritable interface. Gardez les deux séparés dans le code, car le marqueur est stable et l’interface est allouée par session.

Ne demander un nom que si le refus est correct

Un nom fixe paraît plus simple que lire des arguments, mais il change le comportement en cas d’échec. L’option unit demande un numéro pour une connexion sortante, et pppd se rabat sur une allocation dynamique lorsque cette unité est déjà occupée. Rien dans ce résultat ne réserve ppp0 pour votre profil.

ifname ppp-office

L’option ifname se comporte différemment : si le nom demandé est déjà utilisé ou ne peut pas être attribué, pppd quitte au lieu d’en choisir un autre. C’est un choix de politique, pas un renommage cosmétique. Utilisez-la lorsqu’une seconde instance concurrente du même profil doit être refusée, et confirmez que le pppd installé et votre gestionnaire de connexions transmettent l’option.

Quoi qu’il en soit, le nom que le script voit est celui sur lequel il faut agir. Un nom configuré ne supprime pas le besoin de lire l’invocation, car une session redémarrée peut encore présenter un nom différent du précédent.

Faire correspondre le démontage à la session configurée

Les routes et les règles de pare-feu survivent au script qui les a créées, donc le démontage doit retirer exactement les objets que la session possède. Marquez les règles avec le marqueur de profil ainsi qu’avec l’interface, et supprimez selon cette marque. Si deux tunnels peuvent être actifs, supprimer tout ce qui mentionne ppp est la façon dont une déconnexion casse l’autre connexion.

Testez le cas qui expose le bogue : montez la seconde session PPP pendant que la première est encore connectée, puis reconnectez la première et observez quelle interface le hook rapporte. Une exécution réussie avec une seule session ne prouve rien sur l’attribution des noms. Répétez avec le VPN arrêté pour confirmer que le démontage ne laisse pas de route obsolète.

Conservez le marqueur, l’interface et le chemin du hook dans les notes de déploiement. Lorsque le numéro change après un redémarrage, ces trois valeurs expliquent pourquoi le script s’est comporté différemment sans aucune modification de configuration.

Articles similaires