Forum Linux.général XEN : comment faire arriver les paquets des machines virtuelles sur l'interface eth0?

Posté par . Licence CC by-sa.
0
24
oct.
2013

Bonjour,

j'ai un serveur dédié, avec des machines virtuelles. J'utilise XEN.
Si une des machines virtuelles veut accéder aux sites Internet présent sur une autre machines virtuelle, je dois faire passer les paquets par Pound, qui me sert à savoir sur quelle serveur web c'est destiné.

Il se trouve que la version de Pound que j'utilise n'est pas capable d'écouter sur plusieurs adresses IP. Je ne peux pas ajouter le réseau local.

Soit je recompile Pound, pour qu'il se comporte comme la documentation, soit je contourne.

Je pourrai remplacer Pound par Nginx, mais si je pouvais en apprendre plus en terme de réseau… pourquoi pas :) et ça repousserai le problème à un peu plus tard (et je pourrai fermer un vieux serveur dédié). A terme, ce sera Nginx, mais ça va être long à configurer, tester etc.

Éventuellement, je peux utiliser une des machines virtuelle proxy-interne n'utilisant pas le port 80, pour y installer pound, avec une copie de la config modifiée pour écouter sur le réseau local. Dans les autres machines virtuelle, je change le fichier /etc/hosts pour que certains noms de domaines soient résolus avec l'adresse IP de ce proxy-interne. Ça m'a l'air pas mal comme solution temporaire.

Est ce qu'il est possible de configurer les machines virtuelles pour qu'elles utilisent un autre port que le 80 pour certains noms de domaine?

Voyez-vous d'autres solutions?

Merci

  • # le titre ne va pas avec la description du probleme et la question posée

    Posté par . Évalué à 2.

    le titre :

    XEN : comment faire arriver les paquets des machines virtuelles sur l'interface eth0?

    la question :

    Est ce qu'il est possible de configurer les machines virtuelles pour qu'elles utilisent un autre port que le 80 pour certains noms de domaine?

    la reponse, oui dans tes machines virtuelles tu peux tres bien configurer un service pour ecouter sur autre chose que le port 80.

    un service web comme apache ecoute par defaut sur le 80 et le 443, mais tu peux configurer un virtualhost pour ecouter sur une IP:PORT et domaine particulier.

    maintenant si je regardes le titre, je le retraduis en :
    comment faire arriver des paquets à destination du nom de domaine de ma machine virtuelle directement sur sa carte eth0 ?

    à ma connaissance tu ne peux pas sans passer par un proxy qui faire la relation entre l'ip externe/domaine et l'ip interne.

    sinon il te faut plusieurs IPs externes (appelée IP Failover chez certains revendeurs) et tu peux faire de l'IP rewriting depuis ton parefeu/dom0.
    ainsi un paquet qui arrive sur A.B.C.D sera reecrit pour aller sur le conteneur dont l'ip est E.F.G.H

    et dans ce cas là, si tu ne veux pas faire compliquer ou si tu veux exposer tes machines virtuelles directement sur internet, autant mettre l'IP externe directement sur eth0

    • [^] # Re: le titre ne va pas avec la description du probleme et la question posée

      Posté par . Évalué à 2.

      Oui, c'est vrai que le titre ne correspond pas au reste. Pardon.

      J'ai une machine virtuelle, qui écoute sur les ports 80 à 120, et 443. Pour le port 443, c'est en fait pound qui gère le certificat, donc le 443 n'est pas utilisé sur la machine virtuelle. Chaque port, de 80 à 120 défini une configuration spécifique pour Apache ou Nginx. Ces derniers écoutent sur certains ports.

      Au niveau du dom0, il y a du NAT pour tester par exemple certaines configuration. Par exemple 880 redirige vers une machine virtuelle, sur un port défini. C'est réservé pour des tests.

      Toujours au niveau du dom0, pound va écouter sur l'IP publique du serveur, et les ports 80 et 443. En fonction du nom de domaine, il redirige le trafic vers une machine virtuelle et un port : IP:PORT.

      Or, si une machine virtuelle veut atteindre un site qui est sur une autre machine virtuelle, ça ne fonctionne pas. En fait, je ne peux même pas faire un ping vers le dom0.

      Bon, je vais passer par une autre machine virtuelle, avec un pound… temporairement.

      Merci
      Bonne journée

      • [^] # Re: le titre ne va pas avec la description du probleme et la question posée

        Posté par . Évalué à 2.

        ok, donc dans ta config, ca marche bien de l'exterieur vers l'interieur
        mais pas entre les machines en interne.

        et ca c'est peut-etre normal.
        car il y a peut-etre une protection pour limiter la communication entre les machines.
        tout comme il a ce genre de cloisonnement sur certains routeur wifi, les clients wifi accedent bien à internet mais ne se voient pas les uns les autres.

        si ce n'est pas le cas, c'est peut-etre un souci de boucle reseau,
        en effet quand ta machine interne cherche à joindre celle d'à coté, elle sort puis rerentre sur l'interface du dom0

        • [^] # Re: le titre ne va pas avec la description du probleme et la question posée

          Posté par . Évalué à 2.

          Pour préciser, il y a bien une communication possible entre les différentes machines virtuelles. L'une contient les bases de données par exemple.

          Par contre, impossible de joindre le dom0, enfin bon.

          En fait, la difficulté, c'est de passer par pound sur le dom0.

          Je peux installer un second pound sur une machine virtuelle, n'importe laquelle. Reste ensuite à créer un tunnel ssh, c'est propre, bourrin, et temporaire.

          Il faudra quand même que je regarde comment gérer ce cloisonnement.

          Bonne soirée
          G

          • [^] # Re: le titre ne va pas avec la description du probleme et la question posée

            Posté par . Évalué à 2.

            Je peux installer un second pound sur une machine virtuelle, n'importe laquelle.
            et modifier le fichier /etc/hosts des machines virtuelles (certaines) pour faire pointer les noms de domaines sur la machine virtuelle ayant le pound.
            Pas besoin d'un tunnel ssh :)

            • [^] # Re: le titre ne va pas avec la description du probleme et la question posée

              Posté par . Évalué à 2.

              va jusqu'au bout du concept
              met ton pound dans une machine virtuelle au lieu de le mettre du dom0

              redirige le trafic entrant sur dom0 vers le pound virtuel

              et voila, plus besoin de modifier chaque fichier hosts

              • [^] # Re: le titre ne va pas avec la description du probleme et la question posée

                Posté par . Évalué à 2.

                J'ai bien vu que le pound sur le dom0 devient inutile si je redirige les ports 80 et 443 vers cette machine virtuelle.

                Par contre, je ne suis pas certain de pouvoir diriger le trafic provenant des machines virtuelles vers le proxy.
                Je peux configurer le serveur DNS pour donner une IP locale si la demande provient d'une machine virtuelle (ou si la résolution donne l'IP publique du dom0), mais ce serait pour plus tard.

                Il y a tellement de choses que je voudrai faire avant… :)

                De toute façon, je n'ai que deux fichiers hosts a modifier, au pire. Et c'est une seule IP suivi des noms de domaines…

                Bonne soirée
                G

                • [^] # Re: le titre ne va pas avec la description du probleme et la question posée

                  Posté par . Évalué à 2.

                  bah deja si tu rediriges les connexions entrantes vers le pound virtuelle,
                  il y a des chances que ca fonctionne entre les machines virtuelles, quitte à ce que le trafic ressorte par le dom0 et rerentre.

                  ensuite oui, si tu veux optimiser tu peux avec les view du DNS pour donner des IPs locales quand c'est une machine virtuelle qui demande la resolution DNS, ca ferait aller directement sur le pound en interne sans passer par l'IP publique.

Suivre le flux des commentaires

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