Windows XP en routeur

Beaucoup de gens pensent que faire du routage sous windows comme on le ferait sous linux est impossible. Déjà à ce niveau, c’est entièrement faux, windows xp fait du routage vu que en shell, on obtient toutes les routes définies sur la machine via la commande route PRINT. De plus windows XP comporte tous les outils nécessaire pour faire du routage avancé comme sous linux grâce à la commande netsh, qui est, je pense, une des commandes les plus complexe et polyvalente que j’ai rencontré tout système confondu et presque aucun système ne regroupe sous une même commande autant de fonctionnalités réseau/système.

En fait, on commet un abus de langage, car par routage, on entend le plus souvent de l’ip forwarding et du NAT, dans les applications “domestique” du routage. Petite précision sur ce qu’est l’ip forwarding ; Il s’agit de permettre aux différentes interfaces d’une même machine de se transmettre les paquets entre elles. Le NAT, Network Address Translation, lui sert a réécrire l’adresse se trouvant dans les paquets (de manière très très basique et simplifié pour que vous compreniez, le NAT est en fait beaucoup plus complexe, et plusieurs articles pourraient lui être entièrement consacré). Retenez simplement que le NAT permet de modifier les adresses sources.

Considérons la situation suivante :
Interface WAN -> ip : 212.212.2.2 / netmask : 255.255.255.0 / route par defaut : 212.212.2.1
Interface LAN -> ip : 192.168.1.1 / netmask : 255.255.255.0 / route par defaut : !!!! rien !!!!

Nous avons donc deux interface, une dans le lan et une sur le wan.
Sur l’interface WAN se trouve le modem, il a l’ip publique et la route par defaut. La plupart du temps, cette interface est configurée via le DHCP du provider internet et on ne doit pas  se soucier de sa configuration (configuration automatique via dhcp)
L’interface LAN sera le plus souvent branché sur un switch avec d’autres ordinateurs du réseau mais ne doit pas contenir de route par defaut.
Pourquoi pas de route par défaut ? Imaginez que vous ayez deux routes par défaut, le but d’une route par défaut est : “Si je n’ai pas dans ma table de routage une route vers l’ip que je veux joindre, j’envoi le paquet à l’ip indiqué comme route par defaut, elle se chargera d’acheminer le paquet a la bonne destination et de me renvoyer les réponses”. Dans ce cas ci par exemple, le pc ne connais que deux réseau, 212.212.2.0/24 et 192.168.1.0/24, si on veux joindre 10.10.10.1, le pc ne sait pas où se trouve ce réseau, il envoi donc tout à la route par défaut qui se charge du reste. Il ne peut donc pas il y avoir deux routes par défaut sur la MEME MACHINE ! car sinon, le pc ne saura pas a qui envoyer les paquets qui sont pour des réseaux qu’il ne connaît pas. Par contre, toutes les machines ont besoin d’une route par défaut pour joindre les réseaux qu’elles ne connaissent pas.
Nous voulons donc que les ordinateurs du LAN puisse sortir (sur le lan) par l’intermediaire de l’interface WAN, aller sur internet en clair.
Les clients eux, sont configuré de sorte à ce que leurs default gateway (route par defaut) soit l’ip de l’interface LAN du PCrouteur (192.168.1.1 dans ce cas), ainsi, si ils veulent joindre l’ip de google, qui n’est pas dans le réseau 192.168.1.0/24, on envera le paquet au PCrouteur, avec une interface sur le WAN, et si ce dernier ne sait pas où se trouve non plus l’ip google, il l’enverra également à sa route par défaut sur le WAN et ainsi de suite.
Nous devons dans un premier temps activer l’ip forwarding sur le routeur afin que l’interface LAN quand elle reçoit des paquets pour un réseau non connu puisse les transférer à l’interface du WAN et que l’interface WAN qui recoit des paquet a destination du LAN puisse les lui transféré. Pour ce faire on tape Windows + R et regedit afin d’obtenir l’éditeur de registre.
Ensuite il faut cherché
. la clef suivante : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
A ce niveau, on édite la valeur de IPEnableRouter, de type DWORD et on la passe à 1. Ainsi toutes les interfaces sur le routeur peuvent s’échanger des paquets “directement” comme si un câble les reliaient sur un switch à l’interieur du pc. (En fait, c’est à peu près cela, vu que ces interfaces sont toutes reliées virtuellement sur l’interface localhost de windows xp, et oui, il y aussi une localhost sous windows xp, mais elle n’est pas accessible comme sous linux)
Voila déja une première chose de faite. Testons l’installation dans l’etat actuel des choses en allant sur google.
Ca ne marche pas ! Pourquoi ?
Allons sur google, notre machine, a l’ip 192.168.1.2 veut joindre l’ip de google.com, 10.10.10.1 par exemple.
Le réseau n’est pas connu, on transfère donc le paquet au routeur (192.168.1.1), jusque là tout va bien. Le routeur lui reçoit le paquet sur l’interface LAN, regarde aussi dans sa table de routage et voit qu’il ne connait pas 10.10.10.1, il transfère donc à l’interface WAN pour l’envoyer à la default gateway du provider, ensuite de routeur en routeur, selon le même principe, le paquet arrive à google. Le problème, c’est que google lui, quand il veut répondre, cherche à répondre à l’ip qui a émit le paquet, c’est a dire 192.168.1.2, l’ip de la machine cliente. Mais 192.168.1.2 n’est pas une ip publique, c’est à dire que c’est un ip qui n’est pas utilisé sur internet. En fait tous les ip commençant par 192 ne peuvent pas être utilisé sur le net. Nous avons une ip publique, c’est à dire, utilisable sur internet, l’ip fournie par le provider. C’est d’ailleurs ça que l’on paye avec notre abonnement, d’une part une ip publique, d’autre part, une default gateway qui nous permet de joindre les réseaux que l’on ne connaît pas. (de manière shématique, on paye aussi d’autres choses, mais ce sont les seules choses nécéssaires à notre échelle pour acceder au net). Nous devons donc faire du NAT. C’est à dire, quand un paquet venant d’un client part vers l’exterieur, on change l’ip à laquelle il faut répondre par notre ip publique. Ainsi google par exemple, répondra à 212.212.2.2 (notre ip public) et non plus à 192.168.1.2, qui n’est pas utilisable sur le net. L’interface du WAN elle, garde en mémoire un tableau de NAT, une fois que google aura répondu, il regardera dans sa table, quelle est l’ip locale qui avait fait la demande, et rechangera l’adresse publique par l’addresse privé, 192.168.1.2

Résumons avant de passer à la pratique.

  1. Mon client, 192.168.1.2, veut joindre 10.10.10.1
  2. Mon client regarde dans sa table de routage et voit qu’il ne connait pas de route vers ce réseau.
  3. Mon client envoi donc le paquet à la route par defaut configuré, 192.168.1.1, l’ip LAN du routeur.
  4. Le routeur reçoit un paquet de 192.168.1.2 pour 10.10.10.1, il regarde dans sa table de routage et voit qu’il ne connait pas le réseau, il s’apprete donc à envoyer le paquet à sa route par defaut, celle du provider.
  5. Le routeur, transfère le paquet de l’interface LAN vers l’interface WAN
  6. Le routeur, reçoit un paquet sur son interface WAN, venant de l’interface LAN, avec comme destination 10.10.10.1 et comme source 192.168.1.2
  7. Le routeur va remplacer l’ip source, 192.168.1.2 par son ip publique, 212.212.2.2
  8. Le routeur envoi à sa route par defaut le paquet avec comme destination 10.10.10.1, et comme source, non plus l’ip locale, mais 212.212.2.2, son ip publique.
  9. Le provider internet (routeur avec comme ip la route par defaut) envoi le paquet au serveur de google (en résumé)
  10. Google (10.10.10.1) reçoit un paquet pour lui, venant de 212.212.2.2
  11. Google (10.10.10.1) réponds, par exemple en envoyant une page internet, à 212.212.2.2
  12. Le routeur reçoit, sur l’interface WAN, la réponse de google.
  13. Le routeur, d’après la liste qu’il a en mémoire, change l’ip publique, par l’ip locale, 192.168.1.2
  14. Le routeur, regarde dans sa table de routage s’il connaît le réseau 192.168.1.0, voit que oui, et que son interface LAN est dans ce réseau
  15. Le routeur transfère le paquet de l’interface WAN vers l’interface LAN
  16. Le routeur, envoi le paquet au client, 192.168.1.2, depuis l’interface LAN, 192.168.1.1, via le switch (résolution arp etc)
  17. La page de google est reçue par le client et s’affiche dans le navigateur internet

Et tout ceci se passe en un 10éme de seconde ^^
Maintenant que nous savons exactement comment cela fonctionne, nous allons donc activer ce NAT, afin de pouvoir changer notre ip privée par l’ip publique quand on veut aller sur internet.
On tape donc Windows + R, puis cmd. Le shell (prompt) de windows s’affiche.
On va tout d’abord installer le NAT sur le routeur avec cette commande :
netsh routing ip nat install
Ainsi, les fonctionnalitées de NAT seront disponibles.
Maintenant nous allons définir quelle est l’interface publique, c’est a dire, celle par laquelle “on sort”, dans ce cas, l’interface WAN qui s’appelle : “Connection réseau locale 1”
Il suffit de taper la commande suivante avec entre guillemets, le nom de l’interface réseau.
netsh routing ip nat add interface “Connection réseau locale 1” full
Maintenant, nous allons rajouter les interfaces “privées”, c’est à dire les interfaces “sources”, dans ce cas-ci, l’interface LAN qui s’appelle : “Connection réseau locale 2”
netsh routing ip nat add interface “Connection réseau locale 2” private

Et c’est fini. Voici un résumé barbare de la procédure :

  1. Ouvrir l’editeur de registre
  2. Aller a la clef : “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters”
  3. Mettre la valeur de “IPEnableRouter” à 1
  4. Ouvrir un shell
  5. Installer le nat avec la commande : netsh routing ip nat install
  6. Ajouter l’interface publique : netsh routing ip nat add interface “<Nom_De_L’interface>” full
  7. Ajouter la/les interfaces privées : netsh routing ip nat add interface “<Nom_De_L’interface>” private

Ce qui, au final, ressemble fort à linux :

Activer le forwarding :
Linux (shell) : echo 1 > /proc/sys/net/ip/ipv4/ip_fowarding
Windows (prompt) : reg ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /t DWORD /d 1

Activer le NAT :

Linux (shell) (eth0=WAN, eth1=LAN) :  iptables -t nat -i eth1 -o eth0 -A POSTROUTING -j MASQUERADE
Windows (prompt, version une commande avec les opérateurs & et &&) : netsh routing ip nat install && netsh routing ip nat add interface “WAN” full & netsh routing ip nat add interface “LAN” private

Liens Utile :

Documentation netsh : http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netsh.mspx?mfr=true
Documentation reg : http://www.computerhope.com/reg.htm
La base de registre : http://leregistre-fr.net/astuces/bases/Comprendre-la-base-de-registre-23.html
Base du batch : http://commandwindows.com/

5 thoughts on “Windows XP en routeur

  1. panook

    Très intéressant… et pédagogique.
    La connexion a besoin d’être initailisée par la lan.
    Ce n’est pas très puissant puisque à partir du wan, on ne peut pas accéder au lan !

    Reply
    1. manu404 Post author

      C’est possible en faisant du dnat/snat/port forwarding sur le routeur en front attaché au modem.
      Sinon les DMZ seraient impossibles à mettre en place. (Idem pour l’acces lan via un VPN)

      Reply
  2. panook

    Je connais les architectures type DMZ, mais elles ne sont pas fabriquées à partir de Windows XP !!
    C’est une simple remarque sur le titre de l’article !

    Je cherchais une solution de routage entre un Lan d’entreprise et un lan d’automate car on m’a demandé d’étudier si on pouvait faire du routage avec un Xp qui a deux cartes réseaux…
    Sous XP, ça me semble pas possible le double nat.

    Enfin j’ai apprécié votre site, félicitation pour la qualité de présentation.

    Reply
  3. pako

    bonjour manu404;
    j’ai essayé ce que tu à mentionné ci haut mais ça ne marche pas chz moi;
    voilà mes config:
    1pc(2 carte reseau) os: xp
    sur la carte reseau wan (c’est en dhcp (192.168.1.104/24 parserell:192.168.1.1 dns 192.18.1.1
    carte reseau lan: ip 192.168.0.1/24

    le pb est que je n’arrive pas toujour à me conncter sur le net à partir de mon lan (192.168.0.0/24 ,paserel 192.168.0.1
    merci de m’aider, ç a fait deja des jour que bloque là!!!

    Reply
  4. celeg

    Bonjours, merci pour votre article très interessant, j’ai deux cartes réseau, est ce que c’est possible de faire ainsi, pour que le la première carte réseau communique avec un reseau et internet et donc avec ip fixe ( et qu’on puisse accéder via vpn type teamviewer), et que la seconde carte puisse accéder à un réseau à part ou sont accessible des automates qui ont besoin que le pc routeur soit en ip fixe via le seconde carte?

    Merci d’avance si tu as une idée …

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s