Votre conteneur peut écouter sur UDP 1195 alors que l’hôte publie 1194, et c’est correct tant que le mappage le dit. Les nombres forment une table de traduction : le client compose le port de l’hôte, Docker réécrit la destination vers le port du conteneur, et OpenVPN répond sur le port que nomme sa propre configuration. Un décalage sur l’un de ces maillons produit une panne silencieuse qui ressemble à un pare-feu. Les certificats et les chiffrements se situent en aval et ne peuvent pas la réparer.

Suivez un paquet du client au processus avant de modifier quoi que ce soit à l’authentification.

Trois nombres, une connexion

Les trois nombres sont la destination distante utilisée par le client, le mappage publié sur l’hôte et l’écouteur à l’intérieur du conteneur. Ils n’ont pas besoin d’être égaux, mais ils doivent former une chaîne. Des nombres égaux sont un cas particulier qui se trouve être le plus courant, et c’est pourquoi un décalage est facile à écrire une fois et difficile à voir ensuite.

Écrivez la chaîne sur une ligne avant de déboguer : adresse et port du client, mappage de l’hôte, écouteur du conteneur, transport. Un défaut dans la chaîne se manifeste par un nombre qui apparaît deux fois avec des valeurs différentes.

LocationExample
Remote client destinationHost address, UDP 1194
Published mappingHost UDP 1194 to container UDP 1195
Container listenerOpenVPN on UDP 1195

Ce que dit vraiment la syntaxe courte

Dans la forme courte, le côté gauche est le port de l’hôte et le côté droit le port du conteneur, et un suffixe avec barre oblique choisit le transport. Omettez le suffixe et Docker traite le mappage comme du TCP, donc un écouteur UDP derrière un mappage sans protocole est un écouteur que personne ne peut atteindre. Cette valeur par défaut est documentée et surprend encore ceux qui ont fait coïncider les nombres et considéré l’affaire réglée.

La forme longue fixe explicitement l’adresse de liaison et le protocole, ce qui vaut les lignes supplémentaires pour tout ce qui fait face à un réseau. Relisez le mappage publié au lieu de faire confiance au fichier qui l’a produit.

ports:
  - 1194:1195/udp

Où le paquet peut s’arrêter

Une requête peut être abandonnée avant Docker, dans Docker ou chez l’écouteur. Devant Docker, il peut y avoir un pare-feu cloud ou un routeur qui fait son propre transfert, et cet équipement a besoin du port côté hôte et du bon transport. Dans Docker, un mappage vers un mauvais port de conteneur renvoie vers une socket fermée.

Puis l’écouteur : la configuration d’OpenVPN nomme un port et un protocole, et un client qui arrive sur un autre à l’intérieur du conteneur n’atteint rien. Tester un service UDP avec TCP ne prouve rien à aucune de ces étapes, alors utilisez le transport que le client utilisera.

Les adresses de liaison décident de l’accessibilité

Un mappage publié lié à loopback n’est accessible que depuis l’hôte, tandis qu’un mappage lié à toutes les interfaces est accessible partout où le pare-feu le permet. Les deux semblent identiques dans un fichier Compose qui omet l’adresse, et la valeur par défaut de Docker est la plus large.

Décidez quelle exposition le déploiement vise, puis écrivez-la explicitement. Un test interne qui se connecte via loopback et un client distant qui ne peut pas se connecter peuvent tous deux décrire exactement le même conteneur.

Lisez l’état en cours d’exécution

Inspectez le mappage effectif du conteneur en cours et l’écouteur dans son espace de noms réseau. Un fichier Compose a pu être modifié après le démarrage du conteneur, les métadonnées de l’image peuvent déclarer un port sans le publier, et un second conteneur peut déjà détenir le port de l’hôte. Déclarer un port dans une image n’est pas le publier, et ni l’un ni l’autre n’équivaut à écouter.

Trois états différents, trois commandes différentes, et seule la dernière concerne OpenVPN.

Une fois le mappage correct

Une fois le paquet arrivé à OpenVPN, son journal est l’endroit où lire sur TLS et l’authentification. Régénérer des certificats pour réparer un paquet qui n’est jamais arrivé est un travail perdu qui ajoute une seconde variable. Gardez la note de mappage à côté du profil client pour que la personne suivante lise une ligne au lieu de redécouvrir les trois nombres. Une capture de paquets côté hôte tranche lequel des trois maillons est en cause, et elle coûte moins qu’une régénération de certificat.

La publication par pont est le cas décrit ici. Le réseau de l’hôte et les adresses de conteneur routées sautent la traduction, donc les mêmes nombres signifient autre chose dans ces conceptions.

Articles similaires