7.6. Encapsulation IPIP

Pourquoi vouloir encapsuler des paquets IP dans d'autres paquets IP? Cela semble bizarre si vous n'avez jamais vu d'applications auparavant. Il y a deux endroits où c'est utilisé : le Mobile-IP et l'IP-Multicast. C'est dans un environnement qui est peut-être le plus largement utilisé et qui est le moins connu : le radio-amateurisme.

Options de compilation du noyau :
Networking options  --->
 [*] TCP/IP Networking
 [*] IP: forwarding/gatewaying
 ....
 <*> IP tunelling

Les périphériques IP tunnel s'appellent `tunl0', `tunl1', etc..

"Mais pourquoi ?" D'accord. D'accord. Les règles de routage classiques spécifient qu'un réseau IP comprend une adresse IP et un masque de réseau. Ceci fournit un ensemble d'adresses contiguës qui peuvent toutes être routées par l'intermédiaire d'une seule entrée de routage. Cela marche, mais signifie que vous ne pouvez utiliser une seule adresse uniquement lorsque vous êtes connecté à un point du réseau auquelle elle appartient. Dans la plupart des cas, il n'y a pas de problèmes, mais si vous êtes en mouvement alors vous ne pouvez pas rester connecté au même endroit tout le temps. L'encapsulation IP/IP ( IP tunneling) vous permet de passer outre cette contrainte en permettant aux paquets destinés à votre adresse d'être enveloppés et redirigés vers une autre adresse. Si vous savez que vous allez opérer depuis un autre réseau IP pour quelques temps, vous pouvez régler une machine qui est chez vous pour accepter des paquets destinés à votre adresse IP et les rediriger vers l'adresse que vous allez utiliser provisoirement.

7.6.1. Une configuration de réseau avec tunneling.

 192.168.1.24                         192.168.2.24
 -                                    -
 |      ppp0 =           ppp0 =       |
 |  aaa.bbb.ccc.ddd  fff.ggg.hhh.iii  |
 |                                    |
 |   /- - -\                 /- - -\  |
 |   |     |        //       |     |  |
 |- -|  A  |- - - // - - - - |  B  |  |
 |   |     |    //           |     |  |
 |   \- - -/                 \- - -/  |
 |                                    |
 -                                    -

Ce diagramme montre une autre raison possible d'utiliser l'encapsulation IPIP : le réseau privé virtuel. Cet exemple présuppose que vous ayez deux machines chacune avec une seule connexion Internet. Chaque hôte a une seule adresse IP. Derrière chacune de ces machines se trouve des réseaux privés locaux configurés avec des adresses IP réservées. Supposez que vous vouliez permettre à chacun des hôtes du groupe A de se connecter à n'importe quel hôte du groupe B, comme s'ils étaient vraiment connectés à l'Internet via un routage réseau. L'encapsulation IPIP vous permettra de le faire. À noter que l'encapsulation ne vous permettra pas de faire en sorte que chacun des hôtes des réseaux A et B puissent parler à n'importe qui sur l'Internet, vous aurez toujours besoin de choses comme le masquage IP pour pouvoir le faire. L'encapsulation est normalement accomplie par une machine fonctionnant comme routeur.

Le routeur Linux `A' sera configuré comme suit :

        #!/bin/sh
 PATH=/sbin:/usr/sbin
 mask=255.255.255.0
 remotegw=fff.ggg.hhh.iii
 #
 # configuration éthernet
 ifconfig eth0 192.168.1.1 netmask $mask up
 route add -net 192.168.1.0 netmask $mask eth0
 #
 # ppp0 configuration (start ppp link, set default route)
 pppd
 route add default ppp0
 #
 # configuration du périphérique de tunneling
 ifconfig tunl0 192.168.1.1 up
 route add -net 192.168.2.0 netmask $mask gw $remotegw tunl0

Le routeur Linux `B' sera configuré comme suit :

	#!/bin/sh
 PATH=/sbin:/usr/sbin
 mask=255.255.255.0
 remotegw=aaa.bbb.ccc.ddd
 #
 # configuration éthernet
 ifconfig eth0 192.168.2.1 netmask $mask up
 route add -net 192.168.2.0 netmask $mask eth0
 #
 # ppp0 configuration (start ppp link, set default route)
 pppd
 route add default ppp0
 #
 # configuration du périphérique de tunneling
 ifconfig tunl0 192.168.2.1 up
 route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0

La commande :

root# route add -net 192.168.1.0 netmask $mask0 gw $remotegw tunl0
dit : `Envoyer tous les datagrammes destinés à 192.168.1.0/24 dans un paquet d'encapsulation ayant pour adresses de destination aaa.bbb.ccc.ddd'.

Notez que les configurations sont inversées à l'autre bout. Le périphérique tunnel utilise `gw' dans la commande route comme destination du paquet IP où se trouve le datagramme qu'il doit router. Cette machine doit savoir comment `désencapsuler' les paquets IPIP, c'est à dire qu'elle doit aussi être configurée comme périphérique tunnel.

7.6.2. Une configuration d'hôte pour l'encapsulation IPIP.

Ce n'est pas tout un réseau que vous aurez à router. Vous pouvez par exemple ne router qu'une seule adresse IP. Dans ce cas vous devrez configurer le périphérique tunl sur la machine `distante' avec sa propre adresse IP et à l'extrémité A n'utiliser qu'une route hôte (avec Proxy Arp) plutôt qu'une route réseau via le périphérique tunnel. Refaisons et modifions notre configuration de manière appropriée. Maintenant nous avons seulement l'hôte `B' qui veut agir comme s'il était à la fois connecté à l'Internet et également au réseau distant supporté par l'hôte `A' :

 192.168.1/24
 -
 |      ppp0 =                ppp0 =
 |  aaa.bbb.ccc.ddd      fff.ggg.hhh.iii
 |
 |   /- - -\                 /- - -\
 |   |     |       //        |     |
 |- -|  A  |- - - //- - - - -|  B  |
 |   |     |     //          |     |
 |   \- - -/                 \- - -/
 |                      aussi: 192.168.1.12
 -

Le routeur Linux `A' sera configuré comme suit :

	#!/bin/sh
 PATH=/sbin:/usr/sbin
 mask=255.255.255.0
 remotegw=fff.ggg.hhh.iii
 #
 # configuration éthernet
 ifconfig eth0 192.168.1.1 netmask $mask up
 route add -net 192.168.1.0 netmask $mask eth0
 #
 # configuration de ppp0 (démarre le lien ppp link, règle la route par
 # défaut)
 pppd
 route add default ppp0
 #
 # configuration du périphérique de tunneling
 ifconfig tunl0 192.168.1.1 up
 route add -host 192.168.1.12 gw $remotegw tunl0
 #
 # Proxy ARP pour l'hôte distant
 arp -s 192.168.1.12 xx:xx:xx:xx:xx:xx pub

L'hôte Linux `B' sera configuré comme suit :

        #!/bin/sh
 PATH=/sbin:/usr/sbin
 mask=255.255.255.0
 remotegw=aaa.bbb.ccc.ddd
 #
 # configuration de ppp0 (démarre le lien ppp, règle la route par défaut)
 pppd
 route add default ppp0
 #
 # configuration du périphérique de tunelling
 ifconfig tunl0 192.168.1.12 up
 route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0

Ce type de configuration est vraiment typique d'une application IP-Mobile, où un simple hôte veut seulement se balader sur l'Internet et maintenir une adresse IP utilisable tout le temps. Référez-vous au paragraphe Mobile-IP pour avoir plus d'informations et savoir comment faire en pratique.