Publier un port de VM (DNAT) : plage hôte, bornes et refus
La modale « Nouvelle publication » de bout en bout : les cinq champs, la plage réelle 44101-44500, les messages de refus client et serveur, et la règle netfilter réellement posée.
Mettre en ligne12 min de lectureUtilisateur propriétaire de la VM
Ce que vous obtenez : Un port d'une VM joignable depuis Internet sur `hôte:port`, avec ses règles DNAT en place.
Avant de commencer
- Une VM sur votre compte. L'interface propose toutes vos VM, en marche ou non (voir le piège « VM arrêtée » ci-dessous).
- Un service qui écoute dans la VM sur le port que vous voulez exposer. Le DNAT redirige le trafic : si rien n'écoute, la connexion est refusée.
1.Où ouvrir le formulaire
Le DNAT se crée depuis la page Publications et de nulle part ailleurs avec un champ « Port hôte » : c'est le seul des quatre écrans de publication à offrir ce champ. Les modales du tableau de bord, de la liste des VMs et de la fiche VM créent, elles aussi, un DNAT, mais sans jamais demander le port hôte, qui est alors toujours attribué automatiquement.
- Barre latérale « Publications »
- Bouton « + Nouvelle publication »
Cette modale ne fait que du DNAT
Elle ne propose ni HTTP ni HTTPS, ni nom de domaine : seulement « Port VM », « Port hôte » et « Protocole ». Le sous-titre de la modale le dit en une phrase : « Publie un port de VM sur l'hôte via DNAT. Le port hôte est attribué automatiquement si non spécifié. » Les proxys web (nom de domaine + HTTPS) se créent depuis le tableau de bord, la liste des VMs ou la fiche d'une VM.
2.Les cinq champs, dans l'ordre où ils s'affichent
L'ordre compte : le protocole vient après le port hôte, et il n'y a aucun champ de type (la modale ne sait faire que du DNAT).
| Champ | Type et bornes réelles | Remarque |
|---|---|---|
| Nom | texte, placeholder ma-publication | Jamais le nom final : le serveur ajoute un suffixe (voir les pièges) |
| VM | menu : options « Sélectionner une VM », puis le nom de chaque VM | Toutes vos VM, en marche ou non |
| Port VM | nombre, min=1 max=65535, placeholder 8080 | Le port dans la VM, le seul champ qui accepte 1-65535 |
| Port hôte (optionnel) | nombre, min=44101 max=44500, placeholder Auto | Vide = allocation automatique. C'est ici que tout se joue |
| Protocole | menu : TCP (défaut) ou UDP | Deux valeurs seulement, jamais « les deux » |
Les bornes 44101/44500 ne sont pas décoratives : le champ HTML les refuse, et le serveur refuse la même plage de son côté. La plage est celle de l'hôte entier, pas de votre compte.
3.Demander un port hôte : ce qui est refusé, et quand
Deux contrôles se succèdent. Le navigateur refuse d'abord, sans envoyer la moindre requête ; puis le serveur refuse à son tour avec le même intervalle. Un message affiché dans le champ ne veut donc pas dire que le serveur a parlé.
- 1
Un port hors de la plage est refusé sur place
Saisir
44000dans « Port hôte (optionnel) » puis cliquer « Créer la publication » affiche, sous le champ : « Le port hôte doit être compris entre 44101 et 44500. ». Aucune requête n'est émise : le refus est purement local. - 2
Un port privilégié a son propre message
Saisir
22affiche : « Le port 22 est un port privilégié réservé aux services de la plateforme. Choisissez un port entre 44101 et 44500. ». Là encore, aucune requête n'est émise. Le seuil réel est 1024 :4000ne déclenche pas ce message, il déclenche celui de la plage (vérifié :44000et4000donnent le même texte).
Le serveur, lui, répond quoi ? (réponses réelles)
Ces quatre réponses sont celles du serveur, relevées en essayant depuis la page connectée :
| Demande | HTTP | Code d'erreur | Message serveur (recopié) |
|---|---|---|---|
host_port: 44501 | 400 | PORT_OUT_OF_RANGE | host_port 44501 est hors de la plage autorisée [44101,44500] (ANHYWHERE_PUBLISH_PORT_MIN/MAX). |
host_port: 22 | 400 | PORT_PRIVILEGED | host_port 22 est un port privilégié réservé aux services de l'hôte (SSH, HTTP, HTTPS, DNS, routage). Choisissez un port dans [44101,44500]. |
host_port: 44324 (déjà pris par une autre publication) | 409 | PORT_ALREADY_IN_USE | host_port 44324 est déjà utilisé par une autre publication. Choisissez-en un autre, ou omettez host_port pour en obtenir un automatiquement. |
même (VM, port VM) qu'une publication existante | 200 | aucun | {"host_port":"44324","status":"created"} |
Ce que ces réponses apprennent
La plage annoncée dans le message serveur ([44101,44500]) est exactement celle du champ, et son suffixe nomme les réglages qui la portent côté serveur. Le conflit de port est signalé avant que l'interface ne puisse le montrer : le formulaire ne connaît aucune disponibilité, il faut essayer. Enfin, le message du 409 dit lui-même la sortie de secours : omettre le port hôte.
4.Créer : ce qui se passe réellement
- 1
Laisser « Port hôte » vide
Le champ affiche
Auto. C'est le mode à préférer : il ne peut pas entrer en conflit, et le serveur retire un numéro libre dans la plage. - 2
Cliquer « Créer la publication »
La modale se ferme, la liste se recharge et le port attribué apparaît dans la colonne de droite de la nouvelle ligne, sous la forme
hôte:port. Le toast de succès (« Publication créée avec succès ») ne contient pas le port : il faut le relire dans la liste. - 3
Vérifier que le port est bien celui affiché
Une publication créée sans port demandé apparaît avec un port choisi par le serveur, pas par votre saisie. Relisez-le dans la liste avant de le communiquer.
À cet instant, le serveur a posé deux règles netfilter et une ligne en base. Les règles sont lisibles sur l'hôte :
$ iptables -t nat -S PREROUTING
-A PREROUTING -p tcp -m tcp --dport 44324 -j DNAT --to-destination 10.0.0.42:8080
$ iptables -S FORWARD
-A FORWARD -p tcp -m tcp --dport 8080 -j ACCEPTLa première redirige le port hôte vers IP_de_la_VM:port_VM ; la seconde autorise le trafic transféré. C'est tout ce que fait une publication DNAT : aucun nom de domaine, aucun certificat, aucun proxy.
Un DNAT ne prouve rien tant que la VM ne répond pas
Une redirection posée vers une machine qui n'écoute rien ne prouve rien : la connexion est refusée avant toute réponse HTTP, alors que les deux règles ci-dessus sont bien en place. L'état que la liste affiche est MESURÉ depuis l'hôte, sur la socket de l'invitée : il ne décrit ni la ligne enregistrée, ni la règle posée, et il ne prouve rien de plus que l'écoute de l'invitée.
5.Ce que la liste montre ensuite
Chaque ligne porte : le nom réel (suffixé), un badge de protocole (TCP ou UDP), l'adresse `hôte:port`, et un badge d'état (● Joignable, ● Injoignable ou ● Pas encore mesuré). Cliquer la zone d'information de la ligne ouvre la fiche de la publication.
hôte:port et son état de joignabilité mesuré. (cliquez la capture pour l'agrandir)Les pièges, en résumé
Le nom que vous saisissez n'est jamais le nom final
Saisir site-vitrine produit site-vitrine-0745 ; saisir api-interne produit api-interne-17f3. Le serveur ajoute quatre caractères hexadécimaux aléatoires puis met le tout en minuscules. Aucun réglage ne permet un nom stable, et ce nom est ce que vous retrouverez partout, y compris dans l'adresse de la fiche.
La plage de 44101 à 44500 est partagée par toute l'instance
Elle compte 400 ports, pas 400 par compte ni 400 par projet. Ce que vous voyez dans votre liste n'est donc pas tout ce qui est occupé : le port d'un autre compte vous sera refusé avec « déjà utilisé par une autre publication ».
Demander un port précis n'apporte rien, sauf une raison de le faire
Le champ HTML accepte toute la plage, mais il ne dit jamais si le port est libre. Vous ne le découvrez qu'au clic, par un 409. Si vous n'avez pas de contrainte externe, laissez Auto.
Le succès d'une création n'est pas distingué d'un doublon
Republier le même couple (VM, port VM) renvoie 200 avec {"host_port":"44324","status":"created"}, le même code de succès qu'une vraie création, et aucune ligne n'est ajoutée : la liste reste à une publication. L'interface affiche le même message dans les deux cas : on croit avoir créé une seconde publication.
Publier le port d'une machine arrêtée ne crée aucune règle
Le menu des machines n'est pas filtré sur l'état, et rien n'exige que la machine tourne : la règle est posée si et seulement si la machine a une adresse IP. Une machine jamais démarrée n'en a pas : la publication existe, le port est attribué, et rien ne redirige. Aucun mécanisme ne rattrape le retard. Ce cas n'a pas été reproduit ici.
Le nom DNS affiché n'est pas un enregistrement DNS de votre publication
Une publication DNAT affiche un nom d'hôte synthétique mais ne crée aucun enregistrement. Ce nom répond quand même : la zone DNS de la plateforme porte un joker, donc n'importe quel nom de la zone résout vers la même adresse publique. Ne comptez donc pas sur ce champ comme preuve d'un DNS, et n'en attendez pas un certificat.
Un DNAT n'est pas persisté après un redémarrage de l'hôte
Les règles sont posées au moment de la création, en mémoire. Rien ne les réécrit au démarrage : après un redémarrage de l'hôte, le port ne répond plus depuis l'extérieur, et l'état affiché ne le montre pas, puisque la sonde mesure l'écoute de l'invitée et non la règle de l'hôte. Seule une suppression puis une recréation repose la règle.
Ce guide est-il a jour ?
Chaque affirmation de cette page a ete verifiee sur le produit avant publication, et ce qui n'etait pas verifie n'a pas ete ecrit. Une page peut cependant vieillir avant le produit : si un ecran ne correspond plus a ce que vous voyez, dites-le, la page sera reprise.
Prêt à créer vos premières VMs ?
30 secondes d'inscription. 2 secondes pour la première VM. Zéro engagement.