Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe

Host header, IP, port et identification d’un site Web

Poster un commentaire

Une fois que vous saisissez une adresse Web telle http://www.google.fr, le navigateur tente de résoudre son adresse IP. Il dispose pour cela du fichier hosts et du DNS.

 

En principe le navigateur commence par consulter le fichier hosts situé ici:

%systemroot%\system32\drivers\etc

Puis il interroge un DNS.

Vous pouvez vous aussi réaliser cette même opération avec la commande ping:

2014-09-24_21-33-06

Ouvrez maintenant le fichier hosts et ajoutez cette ligne:

102.54.94.97   http://www.google.fr

Puis relancez le ping:

2014-09-25_08-59-45

Bien sûr tout cela est une version simplifiée de ce qui se passe, on peut trouver des détails ici:

http://cbfive.com/blog/ping-vs-nslookup/

Identifier un site

Un site Web est identifié par IIS selon une combinaison unique de:

  • Adresse IP
  • Numéro de port
  • le host header (l’entête d’hôte)

 

Les adresses IP

Certaines adresses IP sont réservées aux réseaux privés (Intranet) ou à des usages techniques comme 127.0.0.1. Elle ne peuvent donc pas être routées sur Internet. La RFC 1918 définit les adresses réservées, plus exactement les plages d’adresses réservées:

  1. 10.0.0.0 à 10.255.255.255
  2. 192.168.0.0 à 192.168.255.255
  3. 172.16.0.0 à 172.31.255.255

Les numéros de port

Il s’agit d’un entier 16 bits  (0 à 65535). La aussi certaines valeurs sont réservées ou traditionnelles. Mieux vaut les éviter, elles se situent en général sous 1023. Par exemple:

  • 80
  • 443 (https)
  • 1433 (SQL Server)
  • 23 (Telnet)
  • 25 (SMTP)
  • 20/21 (Ftp)

Pour connaître les ports en écoute sur un serveur on peut lancer la commande:

netstat -ano

2014-09-24_22-18-31

Le host header

Il s’agit d’un entête ajouté au header (d’où son nom). Le nom de cet entête est HOST.

Il est obligatoire depuis Http 1.1, mais peut être vide. Par exemple en me connectant chez Google:

2014-09-24_22-22-15

Le host header est construit à partir de l’adresse saisie dans le navigateur, par exemple:

Adresse Host header
http://www.google.fr http://www.google.fr
http://123.456.789.111:1587 123.456.789.111

 

Stratégies d’identification d’un site

On dispose donc principalement de 3 façons de différencier des sites:

  1. Via leurs adresses IP:
    Chaque site à une IP différente
  2. Via le numéro de port:
    Chaque site est appelé sur un port différent
  3. Via le host header:
    Les sites ont la même IP, mais des host header différents ou bien le même site est publié avec des noms de domaine différents

 

Notez que dans le premier cas, on devra disposer de plusieurs cartes réseau physique ou logique.

Examinons ces différentes stratégies:

Plusieurs sites sur un même serveur, plusieurs IP

2014-09-24_22-35-04

Une organisation publie 3 sites:

  1. http://IntranetEntreprise
  2. http://IntranetProd
  3. http://IntranetVente

Ici sur des serveurs séparés, mais ce pourrait être les même.

Chaque site a sa propre adresse IP.

Un utilisateur se connecte à http://IntranetEntreprise. Le nom est résolu en 10.0.0.52 que le routeur envoie sur le serveur représenté en haut qui héberge le site.t interroger le site avec son hostname ou bien son IP.

 

Un même serveur, plusieurs numéros de port

2014-09-24_22-40-30

Cette fois l’IP est identique, seuls les numéros de port diffèrent. On devra préciser sa valeur dans la requête.

Le port par défaut est bien sûr 80.

On peut interroger le site avec son hostname ou son IP, mais dans tous les cas on devra fournir l’adresse.

Même serveur avec un host header

2014-09-24_22-43-05

Dans cette configuration, on notera que l’adresse http://10.0.0.52 ne marche à priori pas (tout dépend comment est fait le binding en fait) puisque c’est cette IP qi sera recopiée dans l’entête HOST de la requête. Evidemment si le DNS est mal configuré cela rendra le site inaccessible…

Résolution par IIS

Le serveur Web reçoit la requête. Il obtient l’IP, le nom, le host header dans l’entête HOST  (qui peut être vide) et le port. La règle suivante s’applique:

  1. R1: Si un host header est présent il est analysé. Le serveur recherche un site ayant la même combinaison:
    /host header/IP/port
  2. R2: Si aucune correspondance est trouvée, le serveur recommence avec un host header vide
  3. R3: Si aucune correspondance est trouvée et que le site est paramétré pour répondre à toutes les adresses IP (option All Assigned) et que le port correspondent, alors la requête est routée vers le site
  4. R4: Si aucun site est trouvé, une erreur 400 (Bad Request) est levée

Démonstrations

Essayons de tester les règles R1, R2, R3 et R4 précédentes.

Pour la suite, vous aurez besoin du gestionnaire IIS. Nous aurons également besoin de deux sites. Commençons par le premier DemoAmethyste:

2014-09-25_09-21-42

Nous allons dans un premier temps garder les paramètres par défaut.

On va placer dans le site une page par défaut:

<h1>Bonjour!</h1>
<h2>Vous êtes sur le site DemoAmethyste</h2>

Son but est juste afficher le nom du site obtenu.

 

Note: Pour que le site fonctionne, vous devrez peut-être effectuer le paramétrage suivant dans l’explorateur de répertoire:

2014-09-25_09-30-47

Cliquer ensuite sur Activer:

2014-09-25_09-32-04

Lancez, la page par défaut doit s’afficher en application de la règle R3.

 

Examinons la zone liaison (binding). Ce sont les paramètres par défaut qui indiquent que le site écoute toutes les IP non attribuées sur le port 8083 (choisissez un port non utilisé).

 

Le site devrait s’afficher par exemple sur les deux adresses suivantes:

  1. localhost:8083
  2. http://<votre ip>:8083

 

On va maintenant ajouter le site SuperAmethyste avec les liaisons suivantes:

2014-09-25_21-43-07

Lancez les deux url précédentes. Cette fois la situation a changée:

  • localhost:8083 => DemoAmethyste (R1)
  • http://<votre ip>:8083 => SuperAmethyste (R3)

C’est exactement cela le comportement « toutes attribuées » (all assigned). Le site DemoAmethyste continue à écouter toutes les urls, sauf celles déjà sous écoute.

 

Ajoutons maintenant un entête d’hôte à DemoAmethyste:

2014-09-25_21-53-43

N’ayant pas de DNS à disposition je complète le fichier hosts avec ceci

<mon adresse IP> http://www.site1.com

Lancez ensuite:

 

Si on examine l’entête on observe ceci:

2014-09-25_22-07-31

Essayez ensuite les deux urls précédentes:

  1. localhost:8083  => Erreur 400 (Bad Request)  (R4)
  2. http://<votre ip>:8083  => SuperAmethyste (R3)

 

On modifie ensuite DemoAmethyste ainsi:

2014-09-25_22-13-13

On reteste les urls:

  1. localhost:8083  => DemoAmethyste
  2. http://<votre ip>:8083  => SuperAmethyste
  3. http://www.site1.com => DemoAmethyste

 

Modifions ensuite le binding de SuperAmethyste:

2014-09-26_12-34-42

Si on lance les deux urls:

  1. http://<votre ip>:8083  => DemoAmethyste
  2. http://<votre ip>:8084 => SuperAmethyste

 

Il reste un dernier cas à tester. Paramétrons cette fois DemoAmethyste ainsi:

2014-09-26_12-51-05

Le host header vaut http://www.site2.com et ce domaine n’a pas de correspondance.

En application de R2 puis R3:

 

Un quizz

Vous devriez maintenant être capable de résoudre le quizz qui suit. Au besoin testez avec les techniques étudiées précédemment.

 

Exercice de gamme

Examinez les 3 scénarios qui suivent. Dans le(s)quel(s) a t’on tous les sites qui fonctionnent?

 

Scénario 1

Site Entête IP Port
test1 all assigned 80
test2 all assigned 80

 Scénario 2

Site Entête IP Port
test1 10.0.1.2 80
test2 10.0.1.2 80

 Scénario 3

Site Entête IP Port
test1 10.0.1.1 80
test2 all assigned 80
test2 10.0.1.3 80
test2 10.0.1.4 80

 

Exercice 2

On reprend le paramétrage du scénario 3 qui précède. On suppose en outre que servername pingue vers 10.0.1.2. Vers quel site vont amener les adresses suivantes :

 

Adresse Test1 Test2 Test3 Test4 Bad address
http://servername
http://10.0.1.2
http://10.0.1.3
http://10.0.1.4
http://localhost

 

Voyez vous un scénario dans lequel la dernière réponse pourrait être différentes?

……………………………………………………………………..

……………………………………………………………………..

……………………………………………………………………..

 

Exercice 3

Le serveur est configuré ainsi:

 

Site Entête IP Port
Test1 10.0.1.1 80
Test2 10.0.1.2 80
Test3 => arrêté 10.0.1.3 80
Test4 10.0.1.4 80

 

Où arrive t’on avec cette adresse?

http://localhost

 

Exercice 4

Le serveur est configuré ainsi:

 

Site Entête IP Port
Test1 test1.com 10.0.1.1 80
Test2 test2.com 10.0.1.1 80

Expliquer pourquoi ces sites peuvent fonctionner en même temps?

……………………………………………………………………

…………………………………………………………………….

 


Supposons que le DNS (ou le fichier hosts) soit paramétré ainsi :
10.0.1.1   => test1.com
10.0.1.2 ==> test2.com
10.0.1.3 ==> test3.com
10.0.1.4 ==> test.com

 

Pourquoi est-ce important de préciser ce réglage?

………………………………………………………….

………………………………………………………….

………………………………………………………….

 

Note: Pour toute la suite, on supposera ce réglage du DNS

Exercice 5

Soient les réglages suivants:

Site Entête IP Port
Test1 test1.com 10.0.1.1 80
Test2 test2.com 10.0.1.2 80
Test3 test3.com 10.0.1.3 80
Test4 test4.com 10.0.1.4 80

 

Que se passent t’il avec les urls suivantes:

 

Adresse Test1 Test2 Test3 Test4 Bad request
http://10.0.1.3
http://test3.com

 

Décrire la configuration du serveur et/ou du DNS qui permettrait d’accéder à test4 via son adresse IP ET http://test4.com

 

Site Entête IP Port
Test4

 

DNS:

…………………………………………………………………………….

……………………………………………………………………………….

 

Bibliographie

 

 

 

 

 

 

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s