Grâce à un tunnel, il est possible de passer directement d'un point à un autre, sans devoir subir les affres de la circulation à la surface. Les tunnels informatiques s'en rapprochent fortement, en proposant un moyen de relier « directement » deux réseaux privés distants, à travers un inter-réseau aussi complexe que l'internet.
Il existe une grande quantité de moyens pour réaliser des tunnels informatiques. PPP peut être considéré comme un tunnel dans des configurations comme PPPoE ou PPPoA. L2TP (Layer 2 Tunneling Protocol), est utilisé sur les réseaux des opérateurs, par exemple dans les connexions ADSL non dégroupées.
PPTP (Point to Point Tunneling Protocol), utilisé par Microsoft, ou encore les tunnels sur IPSec sont d'autres solutions. L'objectif de ce chapitre est de monter le fonctionnement d'un tunnel sur IP à travers une implémentation standardisée : le tunnel GRE, puis à travers une solution plus sécurisée : OpenVPN.
Merci à _SebF, créateur du site frameip.com, pour son aimable collaboration.
Imaginons que nous ayons à intervenir sur deux réseaux privés différents, géographiquement éloignés, les réseaux A et B. Si nous voulons interconnecter ces deux réseaux, nous avons à priori deux possibilités :
Oui, mais la seconde solution, à priori moins chère, sera plus limitative.
Comment faire alors ?
Créer une ligne spécialisée virtuelle, qui passera par l'internet, mais qui fonctionnera presque comme une liaison spécialisée. Bien sûr, pour ce faire, un tunnel est nécessaire afin de créer l'interconnexion, de garantir l'étanchéité. L'avantage est de ne pas être dépendant d'un opérateur et ainsi, de pouvoir choisir la sortie Internet de chaque site indépendamment les unes des autres. Rien en effet n'interdit de construire plusieurs tunnels, éventuellement sur des connexions internet différentes. Nous disposons de plusieurs technologies telles que PPtP, IPSec et celles qui nous intéressent dans cette documentation : Le tunnel GRE et OpenVPN.
Au niveau IP, un tunnel se présente comme ceci :
Et nous aurons l'impression d'avoir à peu près cela :
Bien que la première couche IP circule normalement sur l'internet, en suivant les routes définies par les opérateurs, celle-ci transporte une seconde couche IP et sur cette couche, tout va se passer comme si les deux routeurs communiquaient directement, par l'intermédiaire d'un réseau IP ne comportant que deux nœuds : les deux routeurs.
Grâce à ce tunnel, tout nœud du réseau A pourra communiquer avec tout nœud du réseau B, les deux réseaux étant construits avec des adresses IP privées.
Super non ?
Oui, mais souvenez-vous que IPv4 est un protocole qui n'est pas sécurisé, que nous allons l'utiliser et qui plus est, sur un réseau plutôt mal famé. L'opération n'est donc pas sans risques.
Toujours le même principe, l'encapsulation d'un protocole dans un autre protocole de même niveau. Le plus souvent, nous encapsulerons de l'IP dans de l'IP. Mais pour mieux comprendre, il nous faut poser le problème de façon plus précise.
Réseau A | Réseau B | |
---|---|---|
Adresses : | 172.16.0.0 | 192.168.0.0 |
Masque : | 255.255.0.0 | 255.255.255.0 |
Routeur côté LAN : | 172.16.254.1 | 192.168.0.252 |
Routeur côté Internet : | 81.248.152.18 | 80.8.147.232 |
Les routeurs A et B peuvent discuter entre eux à travers l'internet, puisqu'ils disposent tous deux d'une adresse IP publique. Au niveau IP, le transfert de données est donc réalisable.
Sur cette couche IP, nous encapsulons une seconde couche IP, qui va faire de telle sorte que l'ensemble des routeurs A et B avec le tunnel entre les deux, apparaisse comme un unique routeur, directement connecté aux réseau A et B, et qui aura :
Nous sommes entre deux réseaux privés, interconnectés par un routeur, rien que de bien classique.
Peu importe pour l'instant, la façon dont le tunnel est créé. Depuis un hôte de réseau B d'IP 192.168.0.10 , nous faisons un traceroute vers l'hôte du réseau A d'IP 172.16.252.2 :
C:\>tracert -d 172.16.252.2 Détermination de l'itinéraire vers 172.16.254.2 avec un maximum de 30 sauts. 1 <1 ms <1 ms <1 ms 192.168.0.252 2 60 ms 63 ms 59 ms 172.16.254.1 3 75 ms 63 ms 61 ms 172.16.252.2 Itinéraire déterminé.
Et pourtant, si l'on cherche la « vraie route », celle qui est réellement empruntée par le tunnel, nous aurons quelque chose de cette forme entre les deux routeurs :
gw2:~# traceroute -n -I 81.248.152.18 traceroute to 81.248.152.18, 30 hops max, 38 byte packets 1 80.8.160.1 49.763 ms 32.095 ms 8.960 ms 2 172.19.46.65 10.883 ms 8.700 ms 11.688 ms 3 193.252.227.82 17.019 ms 23.244 ms 22.403 ms 4 80.10.209.233 38.494 ms 12.467 ms 12.732 ms 5 81.248.152.18 58.968 ms 60.676 ms 60.891 ms
Bien entendu, le « vrai » chemin peut être beaucoup plus long, si les deux réseaux A et B sont plus éloignés, mais le chemin par le tunnel gardera sa simplicité dans tous les cas.
Pour démontrer le fonctionnement des tunnels, nous verrons deux outils possibles :