Paramétrer un routeur sous Linux en ligne de commande

Écrit par Jean-Michel CHRISOSTOME. Publié dans Blog

A tout ceux qui m'ont dit que "Linux c'est compliqué", je dédie cet article consacré au routage TCP/IP sur Linux. Dans cet article je démontre comment, en quelques lignes vous pouvez activer le routage sur votre machine Linux ainsi que le le NAT.

Définitions

Routeur : Un routeur peut être un ordinateur ou un système spécialisé et consacré uniquement à cette tâche (routeur Cisco, Box internet etc...). Un routeur doit avoir au minimum 2 interfaces réseau pour pouvoir réaliser du routage. L'action du routeur consiste à diriger les paquets (requêtes) d'un réseau vers un autre lorsque cela est nécessaire.

Lorsqu'un ordinateur souhaite se connecter sur un site web qui se trouve sur internet, le routeur (votre box par exemple) se charge de faire le lien entre votre réseau local et internet.

Voici un petit schéma pour résumer ce que nous venons de voir.

routeurNat

NAT : Network Address Translating, soit traduction d'adresse réseau. Il s'agit d'un service complémentaire aux routeurs (principalement pour ceux faisant le lien entre un réseau local et internet) qui transforme les paquets routés, de manière à remplacer l'adresse IP de l'ordinateur source par celle du routeur. Sur internet, les adresses IP de votre réseau domestique ne sont pas connues. La seule adresse IP connue sur internet est celle de votre routeur (box). Il s'agit de son adresse IP WAN.

Activation du routage

Pour réaliser les opérations ci-dessous il est impératif d'être connecté avec l'utilisateur root (administrateur).

Le routage est une valeur booléenne (0 ou 1, vrai ou faux, oui ou non, marche ou arrêt) qui est définie à 0 par défaut sur les systèmes Linux. Il existe plusieurs moyens de passer cette valeur à 1 et donc d'activer le routage.

1ère méthode, on envoie la valeur 1 directement dans l'entrée concernée du noyau (facile)

echo 1 > /proc/sys/net/ipv4/ip_forward

2ème méthode, on utilise la commande sysctl pour définir cette valeur à 1 dans le noyau.

sysctl -w net.ipv4.ip_forward=1

3ème méthode, on édite le fichier /etc/sysctl.conf en créant la ligne comme ci-dessous. L'avantage de cette méthode c'est qu'elle est définitive. A chaque redémarrage, le routage sera activé.

net.ipv4.ip_forward = 1

Pour que les changements soient pris en compte, il est nécessaire de taper la commande sysctl -p /etc/sysctl.conf après modification du fichier.

Paramétrage du NAT

Comme nous l'avons vu plus haut, le NAT est un service complémentaire au routage indispensable si nous voulons pouvoir faire sortir des paquets sur internet. Sur linux, cette partie est traitée par le pare-feu (Lire l'article consacré aux pare-feu) iptables.

La seule règle à paramétrer est la suivante

iptables -t nat -A POSTROUTING -o ethx -j MASQUERADE

Il sera nécessaire de remplacer ethx par le nom de l'interface réseau par laquelle vos paquets vont partir sur internet.

-t nat indique la table du noyau sur laquelle on intervient, ici nat.

-A POSTROUTING indique que nous intervenons après le routage des paquets. Juste avant qu'ils ne soient renvoyé sur l'interface sélectionnée (ethx).

-j MASQUERADE précise que nous souhaitons masquer l'origine des paquets. Cela correspond à remplacer l'adresse IP source du paquet par notre propre adresse.

Et voilà, le routeur/NAT est fonctionnel et vous n'avez pas eu besoin de lire une documentation de trois kilomètres pour en arriver là. Pour utiliser votre routeur, il ne vous reste plus qu'à configurer la passerelle par défaut (adresse IP côté réseau local du routeur) sur vos machines pour qu'elles utilisent votre routeur pour accéder à internet.