Virtual Private Network

Les tunnels

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.

Le principe

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 :

  • L'une chère, qui consiste à utiliser une liaison spécialisée, proposée par tout bon opérateur de télécoms. Les technologies utilisées par ces opérateurs afin de créer notre réseau privé sont principalement du type ATM1), MPLS2) et, plus anciennement, Frame Relay.
    Les avantages apportés sont la garantie d'un SLA3) et d'une étanchéité renforcée,
  • l'autre, moins chère, qui consiste à interconnecter ces deux réseaux via de l'internet public.

Oui, mais la seconde solution, à priori moins chère, sera plus limitative.

  • Soit, comme c'est le plus souvent le cas, nous ne disposerons que d'une seule adresse IP publique pour accéder à chaque réseau et dans ce cas, nous ne pourrons pas faire facilement communiquer n'importe quelle machine du réseau A avec n'importe quelle machine du réseau B, puisque ces LANs seront montés avec des adresses IP privées. (Voyez le Partage de connexion, mis en œuvre dans de telles configurations),
  • Soit nous disposons de suffisamment d'adresses IP publiques pour monter nos réseaux avec ces adresses, mais alors, toutes nos machines seront directement exposées sur le Net. Cher et difficile (il n'est pas simple, et encore moins gratuit d'obtenir des plages, même petites,  d'adresses IPv4 publiques, encore qu'avec IPv6, ce sera tout à fait réalisable) et pour le moins dangereux.

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.

Comment ça marche

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.

Description des réseaux

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 :

  • 172.16.254.1 dans le réseau A
  • 192.168.0.252 dans le réseau B

Nous sommes entre deux réseaux privés, interconnectés par un routeur, rien que de bien classique.

Démonstration

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.

Mise en œuvre

Pour démontrer le fonctionnement des tunnels, nous verrons deux outils possibles :

1)
Asynchronous Transfer Mode.
TTA en français (technologie temporelle asynchrone). Technologie de réseau à haut débit (centaines de Mbit/s, jusqu'à 2.5 Gbit/s) très sérieusement normalisée et présentée comme une solution d'avenir. Les données sont transmises sous forme de paquets de taille fixe (53 octets de long), appelés cellule. Originellement conçu pour la voix et les WANs, l'ATM est en train de passer aux LANs. Cette technologie semble prendre l'ascendant en ce moment sur ses concurrentes. Le principal problème étant la rapidité de commutation, qui doit être élevée vue la taille des cellules. Voir aussi « frame relay ». En plus, c'est Made in France, mais personne ne le sait.
2)
MultiProtocol Label Switching.
Technique conçue par l'IETF pour faire remonter des informations de niveau 2 OSI, comme la bande passante ou la latence d'un lien, dans la couche 3 (e.g. IP). Cela permet de gérer un peu mieux les ressources disponibles au sein d'un réseau.
3)
Service Level Agreement.
Accord entre un client et un fournisseur sur le niveau de qualité de service offert par ce dernier. Le SLA est souvent suivi d'un SLM : Service Level Management. Gestion de la qualité de service, lors de laquelle on s'assure que le fournisseur tient bien ses promesses d'un point de vue qualitatif.