Forum Linux.général Redirection de port basé sur le nom d'hôte

Posté par  (site web personnel) .
Étiquettes : aucune
0
18
mai
2012

Hello ! Je cherche à mettre en place un système fonctionnant un peu comme les vhosts d'un serveur Web.

Imaginons un cas simple : j'ai un serveur avec deux machines virtuelles (mais bon, ça peut très bien être un routeur aussi avec un LAN derrière).

J'aurais envie que lorsque je me connecte à un service, comme SSH par exemple, je sois redirigé sur la bonne machine (ou le bon port).

Imaginons que mon routeur aie l'IP 10.156.1.1 et que j'ai deux autres machines sur le même réseau : 10.156.1.2 et 10.156.1.3, avec chacune un démon SSH.

J'ai les DNS suivants ssh.routeur.localdomain, ssh.machine1.localdomain et ssh.machine2.localdomain qui pointent tous sur 10.156.1.1 (l'IP de mon routeur).

Je voudrais que si je me connecte en SSH sur ssh.routeur.localdomain j'accède au serveur SSH du routeur ; ssh.machine1.localdomain sur la machine1 etc… Vous avez compris.

Ma première idée a été de coder un bidule en C, mais, pour une fois, je me renseigne avant si ça n'existe déjà pas… (ça m'arrive souvent de recréer la roue…).

Merci à vous

  • # Pas possible.

    Posté par  . Évalué à 7.

    Le protocole SSH n'envoie pas au serveur le nom sous lequel il a été contacté, à la différence du protocole HTTP.

    Du coup, il n'existe aucun moyen pour ton routeur (ou ton host physique avec les machines virtuelles) de savoir à qui est destinée cette connection.

    Deux possibilités :

    • Utiliser des ports différents pour chacun des serveurs SSH,
    • Passer à IPv6, qui te permet tout simplement d'avoir une @IP publique pour chaque machine de ton LAN.

    Maintenant, si ton problème est de te connecter depuis le LAN, avec des IP privées bien distinctes pour chaque SSH, il suffit juste d'attribuer des noms différents à chaque serveur SSH, je vois pas où serait la difficulté.

    THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.

    • [^] # Re: Pas possible.

      Posté par  (site web personnel) . Évalué à 1.

      Le protocole SSH était un simple exemple, ainsi que le LAN bien entendu.

      Mon besoin est en fait, d'avoir un démon qui reçoit des connexions sur un port donné. C'est lui en fonction du port et du hostname qui saura vers quelle IP et quel port il devra rediriger la connexion.

      C'est en fait un proxy que je cherche, avec la possibilité de définir plusieurs vhosts sur un même couple IP/port.

      • [^] # Re: Pas possible.

        Posté par  . Évalué à 5.

        Comme il l'explique, ça va dépendre du protocole et tu va devoir faire du cas par cas en fonction des protocoles que tu veux utiliser.

        « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

        • [^] # Re: Pas possible.

          Posté par  (site web personnel) . Évalué à 1.

          J'avais peut-être mal compris la réponse.

          En fait, d'après ce que vous me dites, c'est qu'une socket ouverte, ne connaît pas forcément le nom d'hôte avec laquelle elle a été contactée, c'est ça ??

          • [^] # Re: Pas possible.

            Posté par  . Évalué à 6.

            C'est surtout qu'on ne contacte pas une machine avec un nom d'hôte mais avec une adresse IP. Le protocole HTTP envoie le nom d'hôte demandé mais c'est spécifique à ce protocole.

            « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

            • [^] # Re: Pas possible.

              Posté par  (site web personnel) . Évalué à 1.

              Nan mais oui, ça je sais. En fait je pensais que c'était prévu par la touche TCP IP. Mais c'est vrai qu'un header HTTP spécifie l'hostname, ça aurait du me mettre la puce à l'oreille.

              L'idée n'est donc pas réalisable de façon générique, je vais donc l'oublier.

              Merci pour l'info, pour une fois ça m'a permis de ne pas coder un truc pour rien car ça n'aurait pas pu marcher.

          • [^] # Re: Pas possible.

            Posté par  . Évalué à 2.

            En fait, d'après ce que vous me dites, c'est qu'une socket ouverte, ne connaît pas forcément le nom d'hôte avec laquelle elle a été contactée, c'est ça ??

            Exactement ça.

            THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.

            • [^] # Re: Pas possible.

              Posté par  (site web personnel) . Évalué à 1.

              Je me demandais pourquoi j'avais abandonné cette idée la dernière fois que j'y ai pensé… Je me souviens maintenant… En fait, j'avais déjà codé un truc à l'époque, mais je ne me souvenais plus pourquoi j'avais oublié l'idée…

              • [^] # Re: Pas possible.

                Posté par  . Évalué à 5. Dernière modification le 18 mai 2012 à 17:40.

                Si tu ne veux plus t'emmêler les idées à l'avenir, il faut que tu voies le D.N.S. comme ce qu'il est : un annuaire.

                Le seul moyen pour un poste relié à Internet de contacter un autre poste est de s'y référer avec son adresse IP. Lorsque tu utilises un navigateur Internet ou autre application utilisateur qui permet de passer un nom d'hôte, ton application va d'abord faire une requête complètement indépendante au serveur D.N.S. qui va lui donner l'adresse correspondante en fonction du nom. Fort de ce résultat, la même application va entamer une nouvelle requête complètement distincte vers l'hôte à atteindre. Si tu lances « tcpdump », par exemple, tu les verras distinctement.

                C'est exactement de la même manière que le seul moyen d'appeler un correspondant avec un téléphone portable est de saisir son numéro de téléphone. Tu peux éventuellement avoir sur ton appareil un répertoire intégré qui fasse la correspondance et éventuellement appelle directement la personne concernée, mais celle-ci ne pourra jamais savoir si tu as fait une recherche dans le répertoire ou si tu as composé son numéro à la main.

                Et c'est important parce que c'est le même phénomène qui va t'empêcher de faire des NBVH en https : même si tu établis un certificat par nom d'hôte virtuel, ça ne peut pas marcher parce que c'est une fois la connexion établie que le client va te dire explicitement à quel hôte il se réfère et toi, tu as besoin de le savoir à l'avance pour choisir le bon certificat, nécessaire pour établir une connexion sécurisée.

      • [^] # Re: Pas possible.

        Posté par  (site web personnel) . Évalué à 1.

        Après m'être relu, il s'agit plutôt d'un reverse proxy en fait :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.