6. Routage

Il ne suffit pas de percer le pare-feu. Il faut également router les paquets du côté client du pare-feu vers le côté serveur. Dans cette section, j’aborde les paramètres de base spécifiques au routage à travers un tunnel. Pour plus d’explications détaillées sur le routage, lisez les guides pratiques correspondants et les pages de manuel sur les réseaux, le routage et l’usurpation d’identité.

6.1. Il y a un truc

Le truc, c’est que, même si votre administrateur réseau vous demandait d’installer un routeur de votre côté client comme route par défaut, (ceci peut être utile si on veut une route spécifique vers les réseaux sur le client du pare-feu), il faudra installer PPP link comme route vers les réseaux sur le côté serveur.

En d’autres termes, votre route par défaut devrait pointer vers un routeur de n’importe quel côté du tunnel qui vous donne accès à internet.

Ce qui est primordial, c’est que les paquets envoyés au serveur hôte en tant qu’élément de fonctionnement du tunnel doivent être routés à travers votre réseau habituel (par exemple votre routeur ethernet par défaut), autrement, votre kernel aura des problèmes, vu qu’il essaie de router à l’intérieur du tunnel les paquets qui, précisément, devraient constituer l’extérieur du tunnel.

Ainsi donc, vous devrez paramétrer correctement les routes dans votre configuration de démarrage du réseau. L’emplacement précis de vos données de configuration de routage dépend de votre distribution, mais c’est généralement sous /etc/init.d/network ou /etc/network/; de même, votre configuration PPP se trouve généralement dans /etc/ppp/, et l’endroit normal pour configurer ces routes se trouve habituellement dans ip-up ou ip-up.d/. (Astuce : pour identifier les emplacements de fichier spécifiques à votre distribution, vous devez lire la documentation de votre distribution ou encore RTFM; sinon, utilisez grep récursivement dans votre /etc; au pire, repérez ce qui se passe au moment du démarrage, comme configuré dans votre /etc/inittab.)

Lorsque vous percez un tunnel dans un réseau protégé à partir d’un portable sur internet, le script getroute.pl (disponible sur la distribution fwprc) donne la route utilisée vers le serveur hôte qui représente l’autre bout du tunnel.

Une fois que vous pouvez router les paquets vers le côté serveur du tunnel, ça vous intéressera peut-être de configurer votre machine comme routeur pour tous vos copains du côté client du pare-feu ; vous aurez ainsi réalisé un véritable VPN partagé. Ceci n’est pas spécifique au perçage de pare-feu, alors lisez donc les guides pratiques correspondants sur les réseaux, le routage et l’usurpation d’identité. Egalement, pour des raisons de sécurité, veillez à bien installer un bon pare-feu sur votre machine, surtout si vous devez être routeur pour d’autres personnes.

Enfin, souvenez vous que si vous utilisez pppd sur le côté serveur du tunnel (par opposition au mode utilisateur slirp), vous devrez également configurer les routes qu’il faut et des règles de pare-feu du côté serveur du tunnel.

6.2. Exemple de routage

Dans cet exemple, votre machine cliente est connectée à un réseau local avec pare-feu grâce au dispositif ethernet eth0. Son adresse IP est 12.34.56.78; son réseau est 12.34.56.0/24; son routeur est 12.34.56.1.

Votre administrateur réseau peut vous avoir dit d’utiliser 12.34.56.1 comme routeur par défaut, mais n’en tenez pas compte. Vous devez seulement l’utiliser comme route vers le côté client du pare-feu.

Supposons que le côté client du pare-feu est composé des réseaux 12.34.0.0/16 et 12.13.0.0/16, et de l’hôte 11.22.33.44. Pour les rendre accessibles par votre routeur client, ajoutez ces routes au script de démarrage de votre réseau global :

route add -net 12.34.0.0 netmask 255.255.0.0 gw 12.34.56.1
route add -net 12.13.0.0 netmask 255.255.0.0 gw 12.34.56.1
route add -host 11.22.33.44 gw 12.34.56.1
Vous devez également garder la route vers le réseau local du client, nécessaire pour le kernel 2.0 de Linux , mais pas pour le kernel 2.2 et suivants de Linux (ceci l’ajoute implicitement pendant le ifconfig):
route add -net 12.34.56.0 netmask 255.255.255.0 dev eth0
Par contre, vous devez impérativement enlever toute route par défaut de vos scripts. Supprimez ou mettez en commentaire une ligne telle que :
route add default gw 12.34.56.1
Remarquez qu’il est également possible d’enlever la route de la configuration du kernel en marche sans redémarrer, grâce à la commande suivante :
route del default gw 12.34.56.1
Vous pouvez ensuite obtenir de pppd l’installation automatique d’une route par défaut lorsqu’il démarre en utilisant son option defaultroute Sinon, vous pouvez l’ajouter plus tard :
route add default gw 10.0.2.2
Si vous ne voulez pas de pppd comme route par défaut, parce que l’accès internet est disponible de votre côté du pare-feu, et si vous voulez plutôt que le réseau 98.76.48.0/20 soit routé par le tunnel, sauf au départ de l’hôte 98.76.54.32 qui représente l’autre bout du tunnel, ajoutez les lignes suivantes à votre /etc/ppp/ip-up:
route add -host 98.76.54.32 gw 12.34.56.1
route add -net 98.76.48.0 netmask 255.255.240.0 gw 10.0.2.2
Si vous êtes sur un portable et que vous changez de réseau local, mais que vous voulez quand même garder votre route actuelle vers 98.76.54.32, utilisez getroute.pl comme suit pour trouver automatiquement la bonne passerelle dans la commande route add -host :
$(getroute.pl 98.76.54.32)
Remarquez que si vous les avez dans votre /etc/hosts, vous pouvez utiliser des noms symboliques au lieu des adresses IP numériques (et vous pouvez même utiliser des FQDN, si vous pensez que le DNS ne plante jamais).