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 ;)