L’interface monte, la configuration du pair semble correcte et aucune poignée de main ne se termine jamais. L’ajout d’une route par défaut à travers le tunnel est l’étape qui en est souvent la cause : la même table de routage décide désormais où doivent aller les propres paquets chiffrés du tunnel, et la réponse qu’elle produit repart dans le tunnel. Rien ne peut transporter le paquet extérieur qui transporterait le paquet intérieur, donc la connexion se bloque avant de commencer. La réparation est petite, mais elle a un ordre, et la vérification compte plus que la modification.

Confirmez la boucle avant de changer une route

Lisez l’adresse actuelle de l’extrémité du pair, puis demandez à la pile de routage où irait un paquet vers cette adresse. Si la réponse nomme l’interface du tunnel, la boucle est confirmée et aucun diagnostic supplémentaire n’est nécessaire. Enregistrez les deux sorties dans le journal des changements avant de toucher à quoi que ce soit, car la comparaison après la réparation est constituée des deux mêmes commandes. Une boucle n’est pas subtile une fois vue ; la difficulté est que l’interface paraît saine pendant que cela se produit.

sudo wg show wg1 endpoints
ip route get 198.51.100.20
ip rule show

Incluez les règles de politique dans cette capture. Une route par défaut qui semble correcte dans la table principale peut encore perdre face à une règle qui sélectionne une autre table pour le trafic marqué ou non marqué, et la boucle réapparaîtra avec une table de routage qui semble correcte.

Lisez le chemin de l’extrémité, pas le chemin du tunnel

Le chemin de l’extrémité est la route que prennent les datagrammes chiffrés vers l’adresse publique du pair, et il doit rester en dehors du tunnel tant que le tunnel existe. Le chemin du tunnel est tout ce que le pair est autorisé à transporter. Ces deux chemins partagent une table de routage, et c’est exactement pourquoi une seule entrée fourre-tout peut les faire s’effondrer l’un dans l’autre. Séparer le trafic du tunnel de son propre transport est tout le problème de conception, et chaque outil pris en charge le résout quelque part un peu différemment.

Vérifiez les deux familles d’adresses séparément si l’interface porte les deux. Une exclusion IPv4 qui fonctionne ne dit rien sur la question de savoir si l’extrémité IPv6 est encore joignable, et une configuration mixte peut sembler fonctionner jusqu’à ce que l’adresse IPv6 du pair soit sélectionnée.

Rétablissez le chemin de l’extrémité avec un seul changement cohérent

Deux approches prises en charge existent, et les mélanger est la façon dont une installation qui fonctionne devient imprévisible. La première consiste à laisser l’outil qui possède l’interface gérer tout le tunnel : wg-quick dispose d’un traitement dédié pour une plage de pairs par défaut qui installe une table séparée, des règles de politique et une marque de socket, ce qui garde les paquets extérieurs hors du tunnel. Laissez cette mécanique intacte plutôt que d’en reproduire la moitié à la main. Une installation qui mélange une route par défaut ajoutée à la main avec un gestionnaire qui installe déjà des marques et des règles a tendance à échouer après une reconnexion, lorsque le gestionnaire réécrit un état que l’étape manuelle supposait.

La seconde est une conception manuelle dans laquelle l’extrémité reçoit une route d’hôte explicite via la passerelle physique. Ajoutez cette route avant la route par défaut, remplacez plutôt que d’ajouter pour qu’une entrée obsolète ne puisse pas gagner, et confirmez la recherche ensuite.

sudo ip route replace 198.51.100.20/32 via 192.0.2.1 dev eth0
ip route get 198.51.100.20
sudo ip route add default dev wg1

Vérifiez, puis gardez un moyen de revenir

Un horodatage de poignée de main qui avance est la première preuve, et il est plus fort qu’une interface qui existe simplement. Faites-le suivre d’un test d’application à travers le tunnel, puis descendez l’interface exprès et confirmez que l’hôte revient à un état utilisable au lieu de conserver une route par défaut qui ne pointe vers rien. Cette dernière étape est celle que les gens sautent, et c’est elle qui décide si un redémarrage laissera la machine échouée.

sudo wg show wg1 latest-handshakes
sudo wg-quick down wg1
ip route show default
ip route get 198.51.100.20

Avant tout cela, enregistrez l’état de routage actuel et assurez-vous qu’il existe un moyen d’entrée qui ne dépend pas du tunnel : une console, une adresse de gestion hors bande ou un collègue sur place. Une machine distante qui perd sa route par défaut n’est pas récupérable par la connexion qu’elle vient de perdre, et l’étape la plus sûre du runbook est celle prise avant la première commande.

Articles similaires