Forum Linux.général deux serveurs web pour une même IP ?

Posté par  (site web personnel) .
Étiquettes : aucune
0
17
mai
2005
Bonjour,

J'ai un domaine (louve.dyndns.org). et j'aimerais savoir si il est possible de donner acès a deux serveurs http depuis ce domaine.
Par exemple, jaimerais que http://jupiter.louve.dyndns.org:80/(...) redirige la requête sur le PC appelé jupiter (10.0.0.1) sur mon réseau local.
De même pour d'autres ordinateurs.

Peut être est-ce possible avec les hôtes virtuels ... ou autre.
Ce serait bien aussi avec d'autres protocoles (ssh ?). Mais j'ai des doutes.

Problématique supplémentaire. Mon serveur DNS, dans la zone louve.dyndns.org, devra renvoyer l'IP de la paserelle pour les gens exterieurs. Et l'IP locale pour mon réseau local. Je suppose.
Comment faire ?

Et si je veux faire avec DNS dynamique mis a jour avec dhcpd ? (je n'ai pas encore réussi).

Vive ZeroConf (=rendezvous=bonjour) et IPv6.
Merci
Mildred
  • # re

    Posté par  . Évalué à 2.


    Bonjour,


    Pareil


    J'ai un domaine (louve.dyndns.org). et j'aimerais savoir si il est possible de donner acès a deux serveurs http depuis ce domaine.
    Par exemple, jaimerais que http://jupiter.louve.dyndns.org:80/(...)(...) redirige la requête sur le PC appelé jupiter (10.0.0.1) sur mon réseau local.
    De même pour d'autres ordinateurs.
    Peut être est ce possible avec les hôtes virtuels ... ou autre.
    Ce serait bien aussi avec d'autres protocoles (ssh ?). Mais j'ai des doutes.


    En effet, en utilisant les vhost apache ainsi que le mod_rewrite et le mod_proxy, c'est très facile.
    Renseigne toi un peu.
    En grosn pr l'url jupiter.louve.dyndns.org/pouet tu vas dire à apache qu'il réécrive l'url en 10.0.0.1/pouet et qu'il aille lui meme chercher le contenu pr le servir au client.
    Tout est dans la doc d'Apache.


    Problématique supplémentaire. Mon serveur DNS, dans la zone louve.dyndns.org, devra renvoyer l'IP de la paserelle pour les gens exterieurs. Et l'IP locale pour mon réseau local. Je suppose.
    Comment faire ?


    Utilise bind 9 qui implémente le système de zone.
    Tu définis une zone "lan" qui répondra au requête provenant du réseau 192.168.0.0/24 et une autre "wan" pour le reste.
    Encore une fois, RTFM.


    Et si je veux faire avec DNS dynamique mis a jour avec dhcpd ? (je n'ai pas encore réussi).


    J'ai pas fait encore, je ne peux donc pas t'aider. Mais je me souviens avoir vu de la doc sur le net, donc encore une fois, RTFM.
    • [^] # Re: re

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

      ce qui est possible, et que j ai fait, c est de mettre en place un DNS local qui resoud les noms localement pour les machines locales. Cela permet que si une requette sur lune.moi.com arreve de dehors elle aille sur le server web par l ip PUBLIQUE, et que les machines locales resolvent directement son IP LOCALE sans passer par le routeur.

      En AUCUN CAS un routeur IPv4 ne pourra envoyer sur 1.2 lus requettes pour soleil, et 1.3 les requettes pour lune, si tu n as qu une seule IP publique.

      Le plus tordu que j ai fait, c est de rouler deux Bind9 sur la meme machine, les deux resolvant les meme noms, un pour mon IP publique, l autre pour le local. Si c est la passerelle elle meme qui fait ca, suffit de dirque a chaque conf de n ecouter qu une seule interface, mais tout deux ecoutant le 53.

      Si c est une machine locale dedie, je pense qu il est possible de faire du IPTABLES REDIRECT au cas ou la source est la passerelle, et regiriger sur un autre port. Donc un bind sur 53 qui resoud localement, et un sur 10053, plus un IPTABLES qui redirige sur le port 10053 toutes les requettes DNS venant de l ip locale du routeur.
      • [^] # Re: re

        Posté par  . Évalué à 3.


        En AUCUN CAS un routeur IPv4 ne pourra envoyer sur 1.2 lus requettes pour soleil, et 1.3 les requettes pour lune, si tu n as qu une seule IP publique.


        C'est pour cette raison que je conseille au mossieur de configurer son Apache en reverse proxy.
        En effet *.dyndns.org pointera sur la même ip, mais ce sera apache qui en fonction de l'host (vhost) ira chercher les pages sur le disque dur ou ira demander à un serveur en interne pr le reservir au client.


        Le plus tordu que j ai fait, c est de rouler deux Bind9 sur la meme machine, les deux resolvant les meme noms, un pour mon IP publique, l autre pour le local. Si c est la passerelle elle meme qui fait ca, suffit de dirque a chaque conf de n ecouter qu une seule interface, mais tout deux ecoutant le 53.


        Ta bidouille en plus d'être sale ne sert à rien grace que mecanisme de zone intégré à bind 9 (cf mon premier post).
        Lis un peu la doc tu verras ...

        Je crois qu'en fait tu n'as pas saisi ce qu'il voulait faire (à moins que ce soit moi).
  • # \_o<

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

    Je ne vais pas suivre ton raisonnement tortueux, car tu as mal pose la question. Je vais directement soumettre la meilleure solution pour ton cas.

    je vais abreger 'dyndns.org' a 'd.o'. Mes machines auront aussi des noms courts. 'p' pour la passerelle, 's' pour le server web local.

    j aborde le probleme sous l ordre chronologique ou je construit la solution, qui est aussi l ordre dans lequel les requettes sont resolues.

    1: mettre en place une passerelle p, capable de mettre a jour elle meme son ip PUBLIQUE pour le nom p.d.o . Elle seule peut metre a jour ce nom, aucune autre du ton reseau local ne peut le faire. Si tu as un routeur hard, et qu il ne supporte pas cette fonction, lache l affaire. Je peux techniquement contourner le probleme, mais c est tres complique, et peu fiable.

    2: acheter un domaine moi.com, qui devra etre resolu et gere par une entite disposant d une IP fixe. Je crois que Gandi et www.granitecanyon.com peuvent faire cetto operation simple. Quand tu enregistre ton domaine, tu met alors l IP de Gandi ou Granite comme resolveur de moi.com.

    3: mettre en place un 'CNAME' sur la regle:

    IN domain moi.com
    soleil CNAME p.d.o
    lune CNAME p.d.o

    quand un client tape un nom de site, ce nom doit etre resolu. Dans notre cas, ce nom est un alias vers un autre - oui c est authorise -. Le navigateur cherche donc soleil.moi.com, et passe la requette de resolution a son system hebergeur (la couche IP du dit system). La couche IP fera un dig, la reponse du dig sera donnee par Granite, et dira que c est un CNAME vers p.d.o. La meme couche IP ira alors chez dyndns, et demandra la resolution pour p.d.o. Dyndns donnera ton IP courante.

    IL EST IMPOSSIBLE DE FAIRE RESOUDRE UN NOM POUR UNE IP LOCALE SI TON FOURNISSEUR D ACCES NE TE FOURNIS QU UNE SEULE IP PUBLIQUE. - pas de contournement possible.

    Le navigateur client as desormais ton IP publique.

    La, il peut se passer deux choses.

    -A- tu peux mettre tous tes sites web sur un server dedie, et configure apache pour gerer des vhosts, c est le plus simple.

    4: la machine p ecoute le port 80, et redirige toutes les requettes entrantes vers l ip LOCALE du dit server dedie. C est une stupide regle IPTABLE, de la forme
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2
    ou ppp0 est le nom de l interface publique de la passerelle, et 192.168.1.2 l ip locale du server dedie.

    5: le server dedie local est un apache classique, ecoutant sur le port 80. Apache doit alors gerer les vhosts. Un exemple vaut mieux que mille mots, je te colle ce que j ai:

    Listen 80
    Listen 443
    NameVirtualHost *:80
    <VirtualHost *:80>
    DocumentRoot "/var/www/paste"
    ServerName paste.doublehp.org
    RewriteEngine on
    RewriteRule \/([0-9]*)$ /pastebin\.php\?show\=$1 [NE]
    <Directory "/var/www/paste">
    DirectoryIndex pastebin.php
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

    </VirtualHost>
    <VirtualHost *:80>
    DocumentRoot "/var/www/coco"
    ServerName coco.doublehp.org
    RewriteEngine on
    <Directory "/var/www/coco">
    DirectoryIndex
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

    </VirtualHost>

    NameVirtualHost *:443
    <VirtualHost *:443>
    DocumentRoot "/var/www/pipo"
    ServerName pipo.doublehp.org
    <Directory "/var/www/pipo">
    DirectoryIndex
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all

    </VirtualHost>

    (et il est toujours impossible de coller du texte formatte sur ce site ****** )

    il est possible de faire different, mais ÇA ^^ c est ce qui marche chev moi. Certaines personnes mettent
    <VirtualHost 192.168.1.2:443>
    ce qui pose probleme des que tu change l ip locale de la machine. J ai la deux sites web sur port 80, et un sur 443 (evidement, pour le 443 il faut la regle IPTABLES qui va bien sur le routeur.)

    Ne tamuse pas a visiter les 3 sites, seul paste existe vraiment, les deux autres, j ai du changer leur nom dans cet exemple, car ces sites doivent rester secrets.

    -B- tu veux avoir un site web par machine locale. CELA EST PROBLEMATIQUE. Car la passerelle n as qu une seule IP, et le nom etant gere sur une couche OSI different de l IP, la passerelle ne sais pas a quelle machine le client veut parler. Je peux contourner ca.

    4: on commence par IPTABLES:
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to-destination 192.168.3.2:80

    5: tu met en place 192.168.1.2 avec un apache classique, qui ne gere qu un seul site. ce site est accessible via le nom ordinaire http://soleil.moi.com/(...)

    6: tu met en place sur 192.168.1.3 un apache classique, sur port 80, et ce site sera accessible via l adresse http://lune.moi.com:81/(...)

    une requette sur http://lune.moi.com/(...) aboutira evidement sur 192.168.1.2, et au mieux, si tu te misere dans apache, tu pourra afficher une page d erreur, ou si tu est TRES DOUE, faire une redirection web sur lune.moi.com:81

    Une requette web sur soleil.moi.com:81 aboutira evidement sur 192.168.1.3.

    La solution B est evidement moins esthetique, car oblige a specifier le port 81 SYSTEMATIQUEMENT pour le site lune ... et tous les sites autres que soleil.

    **************************************************************

    Si tu n y connais rien aux reseaux, ne tente rien d exotique, et applique une de mes deux solutions.

    Entre autre, il est impossible de demander a ta passerelle de faire la difference entre deux requettes web de domaines differents, CAR TU AS UNE SEULE IP PUBLIQUE.
    • [^] # Re: \_o<

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

      Je serais heureux que celui qui m as moinsse m explique en quoi mon explication est incorrecte, ne plait pas, n explique pas a notre debutant comment proceder, ou meme ou est ce que je sors du sujet ... juste a titre personnel, ou meme un message prive me suffirait ... j ai quand meme fait un effort particulier pour construire un article technique complet, en esquivant tous les trolls possibles ... je ne comprend pas ... Merci de m expliquer ce qui ne va pas dans mon post.
      • [^] # Re: \_o<

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

        Ce n'est pas moi, mais peut-être que c'est parce que ... tu mélanges les domaines p.d.o, doublehp.org et moi.com et que pour un utilisateur ne maitrisant pas trop les concepts DNS et VirtualHost ca doit pas être super facile à suivre.

        Par contre, j'ai trouvé ton approche assez pédagogique.

        Mais, je corrigerai un point et j'en rajouterai un autre.

        Pour avoir un site Web par machine locale (personnellement, j'en vois pas trop l'intérêt, mais bon, là n'est pas la question), tu peux installer sur la passerelle, Apache (ou Squid par ailleurs - mais pour les trucs un peu tordus, Apache est quand même plus adapté) en mode reverse-proxy (grâce à mod_rewrite - Attention aux URLs "en dur" dans les pages) en gérant des virtualHost et/ou des sous-répertoires.

        De plus, le mécanisme de VirtualHost N'est PAS disponible avec HTTPS (SSL ou TLS) ! En effet, les VirtualHost sont gérés au niveau du protocole HTTP. Or avant de pouvoir "utiliser" HTTP dans une communication HTTPS, il faut passer par la "couche" SSL qui elle ne supporte pas les VirtualHost.
        Conclusion : pour avoir sur une seule machine, plusieurs sites Web avec SSL écoutant sur le port 443 par défaut, il faut plusieurs adresses IP (ce qui n'est pas obligatoire en HTTP grâce au VirtualHost).
        • [^] # Re: \_o<

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

          heu ...

          De plus, le mécanisme de VirtualHost N'est PAS disponible avec HTTPS (SSL ou TLS) ! En effet, les VirtualHost sont gérés au niveau du protocole HTTP. Or avant de pouvoir "utiliser" HTTP dans une communication HTTPS, il faut passer par la "couche" SSL qui elle ne supporte pas les VirtualHost.
          Conclusion : pour avoir sur une seule machine, plusieurs sites Web avec SSL écoutant sur le port 443 par défaut, il faut plusieurs adresses IP


          je voudrais pas te contredire, parce vu comment t est sur de toi, j ai peur de te froisser, mais compare un peu
          http://test1.doublehp.org/(...)
          http://test2.doublehp.org/(...)
          https://test1.doublehp.org/(...)
          https://test2.doublehp.org/(...)
          http://saturn.doublehp.org/(...)
          https://saturn.doublehp.org/(...)

          bon ... le DNS de test1 est pas encore propage, je pense que c est une question de minutes ... mais j ai deja 4 sites HTTPS sur la meme machine ... je te laisse examiner les dig/DNS

          comment j ai fait ?

          <VirtualHost *:443>
          DocumentRoot "/var/www/test1"
          ServerName test1.doublehp.org
          <Directory "/var/www/test1">
          DirectoryIndex
          Options Indexes FollowSymLinks
          AllowOverride None
          Order allow,deny
          Allow from all

          </VirtualHost>
          <VirtualHost *:443>
          DocumentRoot "/var/www/test2"
          ServerName test2.doublehp.org
          <Directory "/var/www/test2">
          DirectoryIndex
          Options Indexes FollowSymLinks
          AllowOverride None
          Order allow,deny
          Allow from all

          </VirtualHost>

          <VirtualHost *:443>
          DocumentRoot "/var/www/localhost/htdocs"
          ErrorLog logs/ssl_error_log
          <IfModule mod_log_config.c>
          TransferLog logs/ssl_access_log

          SSLEngine on
          [...]
          </VirtualHost>

          EH ZUT ... mes autres HTTPS sont pas limites a SSL2 seulement, ... bon faut que je customise
          SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
          dans chaque vhost, mais ca change rien au probleme.

          Bref, dans la theorie, je sais pas ou t as pecho ton truc, mais dans la pratique, j ai deja 4 vhosts HTTPS (plus les http) sur la meme IP, qui plus est dynamique ....
          (ouai je dis4, et j en donne que3, mais y en a un 4e que je peux pas citer, mais si vous voulez un https://dlfp.doublehp.org/(...) d ici 1h, vous demandez)
          • [^] # Re: \_o<

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

            NOTE: je tounre sous apache2 sous Gentoo.
            Vu comment c est mal barre pour test1, je pense que son DNS ne sera propage que dans 4h :(, il vous reste test2 et saturn pour jouer. Vous aurez test1 demain.

            N importe qui peut aussi faire un CNAME d un nom qui lui appartiens, vers saturn, et je lui met en place un HTTP et un HTTPS differents dans la journee. Juste un message prive avec ce que je dois mettre dans les pages ... si vous doutez que ca peut aussi marcher avec autre chose que mon domaine.
            • [^] # Re: \_o<

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

              Oui, mais t'as vu la tête de ton certificat....

              Donc tous tes sites test1, test2, ... ont tous pour certificat saturne... et le navigateur t'affiche un bon message d'avertissement qui fait bien peur à l'Internaute moyen.

              C'est pour ça que je dis que les mécanismes de VirtualHost ne sont pas disponibles en SSL.
              • [^] # Re: \_o<

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

                l avertissement que je receois concerne plutot le fait que mon certificat n est pas approuve par une authorite de confiance (aka que je m auto certifie). J ai un probleme avec mon navigateur, je purge mon profile et je regarde ce detail.
                • [^] # Re: \_o<

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

                  Remarque : Si ton navigateur ne te souleve pas l'avertissement que je viens de te signaler, je te conseille de rapidement changer de navigateur ;o))

                  Sinon, bien évidement, j'avais fait abstraction

                  Pour la petite histoire, il est possible d'indiquer dans le certificat de ton serveur, plusieurs "alternate cn" (je ne me rappelle plus le nom exact de l'attribut), mais c'est pas super génial, notamment car :
                  - Tous les navigateurs ne supportent les "alternate cn" dans les certificats X.509v3
                  - Le fait de rajouter un site nécessiterait de recertifier ton certificat serveur (enfin plus exactement, ta csr).
    • [^] # Re: \_o<

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

      Un echange de messages prives a tente de me prouver qu il etait possible d avoir plusieur servers web (aka machines differentes localement), avec seulement le port 80 de DNATé.

      Je suis contre cette solution, car elle necessite d utiliser un mod_rewrite d une machine vers les autres.

      c est techniquement possible, mais alors tout le reseau ne repose plus sur la stabilite du routeur mais la stabilite du routeur ET du premier apache

      ce qui oblige de rendre tout le reseau depnedant de DEUX ordinateurs ... et quand je vois la fragilite de nos machines (disques durs, alims, cartes meres ... ), enfin les PC sont comme les machines a laver: garentis un an, puis apres faut que ca lache. FAire dependre tous les sites webs de deux machines augmente donc au carre les probabilites que 'down time'

      Alternatives:
      - utiliser un routeur diskless, qui soit capable d embarquer en ramdisk un apache uniquement pour le mod_rewrite (mais je pense qu on est toujours oblige de se miserer avec les ports publics)
      - il y aurait une soluthion avec le mod_rewrite et un seul port 80, si le apache central recupere les pages webs sur les sous apaches. Je n aimes pas, ca oblige toujours un apache dont tout le monde depend.
      - des apaches dans des vservers (les vhosts kernel land) ... comme le font les societes Ikoula et Free. mais on sort du journal puisque l on a une seule machine.
  • # re

    Posté par  . Évalué à 2.

    Mildred, si tu veux un coup de main dans la pratique pr mettre les deux premiers points en oeuvre, envoie moi un mail via linuxfr.
    Tu peux aussi venir me trouver sur irc.freenode.net en query (ce sera pr demain maintenant).
  • # eth0:0

    Posté par  . Évalué à 1.

    Pour les serveurs DNS (et autres ?) tu peux toujours essayer d'avoir deux adresses IP sur la même interface du serveur DNS, ça s'appelle l'IP aliasing je crois (+ option dans le kernel ?), tu fais un truc du genre :

    ifconfig eth0 192.168.0.1
    ifconfig eth0:0 192.168.0.2

    après quoi il suffit de mettre en place un serveur DNS de base, djbdns est très agréable et simple à configurer, sur la première interface (eth0) et un deuxième DNS qui sert juste pour le local, dnsmasq est un très petit serveur qui convient parfaitement pour ça :

    domain-needed
    bogus-priv
    resolv-file=/etc/resolv.conf.dnsmasq
    listen-address=192.168.0.2
    bind-interfaces
    cache-size=256
    alias=xxx.xxx.xxx.xxx,192.168.0.1

    où /etc/resolv.conf.dnsmasq contient les serveurs DNS génériques utilisés (à la /etc/resolv.conf qui lui contient le DNS local sur 192.168.0.2), xxx.xxx.xxx.xxx est l'adresse publique du réseau qui sera remplacé par 192.168.0.1 sur le réseau local. Reste à configurer les hôtes locaux pour qu'ils effectuent les requêtes DNS sur 192.168.0.2.
  • # pound

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

    Pour du HTTP (et même du HTTPS transparent d'ailleurs) tu peux utiliser pound sur ton routeur qui redirige vers un nombre libre de serveurs web derrière (ou serveurs d'applications bien sûr). C'est peut-être plus simple que de mettre apache sur le routeur.

Suivre le flux des commentaires

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