System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Configuration avancée d'OpenVPN.

openvpn.png

Article rédigé par Kevin H.

Dans l'article suivant je ferais un complément d'information sur la mise en place de la solution OpenVPN décrite par GanGan ( ici et la ). Pour rappel OpenVPN permet de créer un ou plusieurs tunnels sécurisés entre des machines éloignées. Du coup elles peuvent aussi se comporter comme si elles étaient situés sur le même réseau local.

On pourrait s'arrêter aux deux articles précédent qui permettent donc de communiquer entre les machines connectés mais OpenVPN peut aller plus loin : il aussi possible d'utiliser le serveur comme routeur par défaut pour aller sur internet et alors de chiffrer tous les flux sortants de chez vous ! ( du moins jusqu'à votre serveur :p ) mais pour cela il faut modifier un peu les routes de votre machines une fois le VPN connecté. L'utilité de la chose ? Par exemple, passer outre les politiques commerciales des fournisseurs d'accès 3G par exemple mais je ne donnerais pas plus d'infos la dessus :)

La configuration du serveur de GanGan conseillait d'activer le forward IPv4 et donnait les règles du masquage d'adresse et j'ajouterais qu'il faut ajouter une règle iptables pour permettre le forward entre tun0 et eth0 :

iptables -P FORWARD ACCEPT

Une fois ceci fait, le serveur acceptera tout requête émanant de l'intérieur du VPN vers internet et normalement ses réponses aussi. Modifions les routes des clients maintenant :

1 / Sous Windows (testé sous XP et Vista )

Pour mieux comprendre, je donnerais étape par étape les changements dans la table de routage.

En premier lieu, l'état normal quand le VPN n'est pas connecté. Ci dessous on remarqueras la complexité des routes Windows qui me choquent au plus haut point mais là n'est pas le sujet :p L'adresse de mon PC est ici 192.168.1.14 et l'adresse de ma passerelle 192.168.1.1 . (Il va sans dire que toutes les adresses ici sont faussées bien évidement).

C:\route print
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métri
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.14     20
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      192.168.1.0    255.255.255.0         On-link      192.168.1.14    276
     192.168.1.14  255.255.255.255         On-link      192.168.1.14    276
    192.168.1.255  255.255.255.255         On-link      192.168.1.14    276
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link      192.168.1.14    276
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link      192.168.1.14    276
===========================================================================

Après connexion du VPN, apparaissent plusieurs nouvelles lignes qui n'ont pour but que d'avoir accès au serveur VPN. Ici j'ai mis le serveur VPN à l'adresse 192.168.200.1 avec une plage d'adresse correspondant à un adressage locale ( conf openvpn : 'server 192.168.200.0 255.255.255.0' et 'push "route 192.168.200.0 255.255.255.0"' ). L'adresse attribué par le serveur à mon client est 192.168.200.22 .

C:\route print
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métri
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.14     20
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      192.168.1.0    255.255.255.0         On-link      192.168.1.14    276
     192.168.1.14  255.255.255.255         On-link      192.168.1.14    276
    192.168.1.255  255.255.255.255         On-link      192.168.1.14    276
    192.168.200.0    255.255.255.0   192.168.200.21   192.168.200.22     30
   192.168.200.20  255.255.255.252         On-link    192.168.200.22    286
   192.168.200.22  255.255.255.255         On-link    192.168.200.22    286
   192.168.200.23  255.255.255.255         On-link    192.168.200.22    286
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link      192.168.1.14    276
        224.0.0.0        240.0.0.0         On-link    192.168.200.22    286
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link      192.168.1.14    276
  255.255.255.255  255.255.255.255         On-link    192.168.200.22    286
===========================================================================

Ensuite nous allons supprimer la route par défaut actuelle et allons donc perdre notre connexion internet temporairement :

C:\route delete 0.0.0.0
 OK!
C:\route print  
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métri
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      192.168.1.0    255.255.255.0         On-link      192.168.1.14    276
     192.168.1.14  255.255.255.255         On-link      192.168.1.14    276
    192.168.1.255  255.255.255.255         On-link      192.168.1.14    276
    192.168.200.0    255.255.255.0   192.168.200.21   192.168.200.22     30
   192.168.200.20  255.255.255.252         On-link    192.168.200.22    286
   192.168.200.22  255.255.255.255         On-link    192.168.200.22    286
   192.168.200.23  255.255.255.255         On-link    192.168.200.22    286
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link      192.168.1.14    276
        224.0.0.0        240.0.0.0         On-link    192.168.200.22    286
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link      192.168.1.14    276
  255.255.255.255  255.255.255.255         On-link    192.168.200.22    286
===========================================================================

Voici la ligne qui a disparu :

          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.14     20

Ajout d'une route vers le serveur pour forcer la connexion du VPN à passer par votre routeur. Pourquoi faire ? C'est simple : si on ajoute juste une nouvelle route par defaut vers le serveur OpenVPN alors la connexion VPN va aussi vouloir passer par la et spiderman sera pris dans son propre fil ! J'ai bien sur encore masqué l'adresse mon serveur VPN, faites en autant en remplaçant 10.20.30.40 par celle qui va bien.

C:\route add 10.20.30.40 192.168.1.1
C:\route print
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métri
      10.20.30.40  255.255.255.255      192.168.1.1     192.168.1.14     21
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      192.168.1.0    255.255.255.0         On-link      192.168.1.14    276
     192.168.1.14  255.255.255.255         On-link      192.168.1.14    276
    192.168.1.255  255.255.255.255         On-link      192.168.1.14    276
    192.168.200.0    255.255.255.0   192.168.200.21   192.168.200.22     30
   192.168.200.20  255.255.255.252         On-link    192.168.200.22    286
   192.168.200.22  255.255.255.255         On-link    192.168.200.22    286
   192.168.200.23  255.255.255.255         On-link    192.168.200.22    286
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link      192.168.1.14    276
        224.0.0.0        240.0.0.0         On-link    192.168.200.22    286
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link      192.168.1.14    276
  255.255.255.255  255.255.255.255         On-link    192.168.200.22    286
===========================================================================

Dernière étape ! La route par defaut vers le VPN. Attention ! Petite explication : ici l'adresse 192.168.200.21 représente l'autre bout de votre tuyau. Si l'adresse attribuée par le serveur est 192.168.200.x alors l'adresse à l'autre bout sera forcément 192.168.200.(x-1) . C'est un effet de bord de l'utilisation des interfaces Tun/Tap qui mange 4 adresses locales par client :'(

C:\route add 0.0.0.0 mask 0.0.0.0 192.168.200.21
C:\route print
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métri
          0.0.0.0          0.0.0.0   192.168.200.21   192.168.200.22     31
      10.20.30.40  255.255.255.255      192.168.1.1     192.168.1.14     21
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      192.168.1.0    255.255.255.0         On-link      192.168.1.14    276
     192.168.1.14  255.255.255.255         On-link      192.168.1.14    276
    192.168.1.255  255.255.255.255         On-link      192.168.1.14    276
    192.168.200.0    255.255.255.0   192.168.200.21   192.168.200.22     30
   192.168.200.20  255.255.255.252         On-link    192.168.200.22    286
   192.168.200.22  255.255.255.255         On-link    192.168.200.22    286
   192.168.200.23  255.255.255.255         On-link    192.168.200.22    286
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link      192.168.1.14    276
        224.0.0.0        240.0.0.0         On-link    192.168.200.22    286
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link      192.168.1.14    276
  255.255.255.255  255.255.255.255         On-link    192.168.200.22    286
===========================================================================

Et donc voila vous pouvez vérifier par exemple en allant faire un tour sur ipchicken qui vous donnera l'adresse IP de votre serveur VPN et votre adresse personnelle.

2 / Sous Linux.

Ici les explications sont les mêmes donc je ne recommenterais pas mais il suffit de suivre pour comprendre. (Admirez tout de même la clarté des routes sous Linux ^^)

Ici le VPN est déjà connecté comme le montre les routes présente vers le VPN .

# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.200.25  0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.0   U     10     0        0 eth0
192.168.200.0   192.168.200.25  255.255.255.0   UG    0      0        0 tun0
169.254.0.0     0.0.0.0         255.255.0.0     U     10     0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    10     0        0 eth0

Ajout de la route vers le VPN :

# route add -host 10.20.30.40 gw 192.168.1.1 dev eth0
# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.200.25  0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.20.30.40     192.168.1.1     255.255.255.255 UGH   0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     10     0        0 eth0
192.168.200.0   192.168.200.25  255.255.255.0   UG    0      0        0 tun0
169.254.0.0     0.0.0.0         255.255.0.0     U     10     0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    10     0        0 eth0

Ajout de la route par defaut vers le VPN :

# route add default gw 192.168.200.25 dev tun0
# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.200.25  0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.20.30.40     192.168.1.1     255.255.255.255 UGH   0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     10     0        0 eth0
192.168.200.0   192.168.200.25  255.255.255.0   UG    0      0        0 tun0
169.254.0.0     0.0.0.0         255.255.0.0     U     10     0        0 eth0
0.0.0.0         192.168.200.25  0.0.0.0         UG    0      0        0 tun0
0.0.0.0         192.168.1.1     0.0.0.0         UG    10     0        0 eth0

Suppression de la route par defaut vers mon routeur local :

# route del default gw 192.168.1.1 dev eth0
# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.200.25  0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.20.30.40     192.168.1.1     255.255.255.255 UGH   0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     10     0        0 eth0
192.168.200.0   192.168.200.25  255.255.255.0   UG    0      0        0 tun0
169.254.0.0     0.0.0.0         255.255.0.0     U     10     0        0 eth0
0.0.0.0         192.168.200.25  0.0.0.0         UG    0      0        0 tun0

route supprimée :

0.0.0.0         192.168.1.1     0.0.0.0         UG    10     0        0 eth0

3 / Automatisation

Désolé je n'ai pas le courage de chercher ça aujourd'hui ! Mais j'ai deux pistes : soit utiliser un script local (fastoche) soit peut être en utilisant les ccd du côté du serveur. A vous de cherchez ;)

Par GanGan | le vendredi, février 27 2009 08:02

Commentaires

1. lu6fer

vendredi, février 5 2010 | 03:27

je ne refute pas la simplicité d'openvpn, mais avec l'arrivé de l'ip v6 il serait pas mal de discuter et surtout de comprendre IPSEC qui est la norme retenu pour l'ipv6, car sans étude approfondi on est loin d'IPSEC via openvpn au vu de la simplicité

2. Kevin Hinault

vendredi, février 5 2010 | 09:33

Hum oui IPSec ça pourrait faire l'objet d'un autre article plus tard mais si je connais le principe, je n'en ai jamais mis en place moi même.

IPSec pour les curieux est une manière de chiffrer les paquet IP directement plutôt qu'en créant une souscouche dans le modèle OSI comme le fais OpenVPN.

3. guits

lundi, mai 17 2010 | 16:04

Bonjour,
Après installation d'un serveur openVpn j'ai essayé de mettre en place les routes décrites dans votre article afin de donner accès au net aux clients du VPN.Cependant, cela ne fonctionne toujours pas
La route par défaut 0.0.0.0 a bien été redirigé vers le tunnel(10.8.0.5, 10.8.0.6 étant l'ip attribué au client openVPN)
La route vers l'ip publique du serveur vpn a elle aussi été redirigée comme décrit mais cela ne fonctionne toujours pas.
Auriez-vous des méthodes qui pourraient me permettre d'identifier d'où vient le problème?
Merci d'avance pour votre aide.