Le noyau 2.2 a accru les possibilités de routage de Linux de manière certaine. Malheureusement la documentation pour exploiter ces nouvelles possibilités est presque impossible à trouver, même si elle existe.
J'y ai passé un peu de temps et ai été en mesure de faire un petit quelque chose. J'en mettrai plus quand j'aurai le temps et l'aide nécessaire pour comprendre tout ce qui a été dit.
Dans les versions du noyau 2.0 et antérieures, Linux utilise la commande route standard pour positionner les routes dans une seule table de routage. Si vous aviez tapé netstat -rn à l'invite vous auriez pu voir un exemple.
Dans les noyaux récents (2.1 et au-delà) vous avez une autre option. Cette option est autorisée et vous permet d'avoir plusieurs tables de routage. Les nouvelles règles donnent beaucoup plus de souplesse sur la façon de manipuler les paquets. Vous pouvez choisir entre des routes basées non seulement sur l'adresse de destination, mais aussi l'adresse de départ, TOS, ou un périphérique de réception.
Afficher la table de routage :
ip route
Maintenant sur ma machine cela donne la sortie suivante :
207.149.43.62 dev eth0 scope link
207.149.43.0/24 dev eth0 proto kernel scope link src 207.149.43.62
default via 207.149.43.1 dev eth0
La première ligne :
207.149.43.62 dev eth0 scope link est la route vers l'interface
La deuxième :
207.149.43.0/24 dev eth0 proto kernel scope link src 207.149.43.62 est la route qui dit tout ce qui va vers 207.149.43.0 doit aller vers 207.149.43.62.
La troisième :
default via 207.149.43.1 dev eth0 est la route par défaut.
Maintenant que nous avons vu une table de routage de base, voyons comment l'utiliser. Tout d'abord lisez the Policy routing text. Si vous êtes embêtés, ne vous en faites pas -- c'est un texte confus. Il vous donne tout ce que les nouvelles tables de routage peuvent faire.
Dans la section précédente, nous avons mentionné comment afficher la table de routage et comment comprendre les bases. Impeccable, la sortie ressemble de très près à la syntaxe que nous devons utiliser pour mettre en place la table de routage correspondant exactement à nos besoins.
ip route add 207.149.43.62 dev eth0 scope link
ip route add 207.149.43.0/24 dev eth0 proto kernel scope link src 207.149.43.62
ip route add 127.0.0.0/8 dev lo scope link
ip route add default via 207.149.43.1 dev eth0
Comme vous pouvez le constater, les entrées et sorties sont presque les mêmes, sauf le ip route add au début de chaque ligne.
Note: Je suis conscient que la documentation sur le routage avec les noyaux 2.2 fait cruellement défaut. Dans les faits, je pense que TOUT LE MONDE en est conscient. Si vous avez une petite expérience, contactez-nous s'il vous plaît à poet@linuxports.com nous aimerions obtenir les informations que vous avez pour l'inclure plus tard dans ce document.
Le système de traduction d'adresse réseau (NAT: Network Address Translation) ressemble plutôt au grand frère standardisé du système de masquage IP de Linux. Il est décrit en détail dans la RFC-1631 sur votre archive RFC la plus proche. NAT fournit des possibiltés que IP Masquerade ne sait pas faire, ce qui le rend plus apte à une utilsation de routeur pare-feu pour un réseau d'entreprise et des installations de plus grande dimension.
Une implémentation alpha de NAT pour le noyau 2.0.29 de Linux a été développée
par
Michael.Hasenstein, Michael.Hasenstein@informatik.tu-chemnitz.de
.
La documentation et l'implémentation de Michael se trouve sur :
Linux IP Network Address Web Page
L'empilement TCP/IP du noyau 2.2, qui a été grandement amélioré, inclut
les fonctionnalités de NAT. Ce système semble rendre obsolète le travail de
Michael Hasenstein (Michael@informatik.tu-chemnitz.de).
Pour le rendre opérationnel vous devez activer dans le noyau CONFIG_IP_ADVANCED_ROUTER, CONFIG_IP_MULTIPLE_TABLES (pour le système de routage) et CONFIG_IP_ROUTE_NAT (pour un NAT rapide). De plus, si vous voulez utiliser un réglage plus fin de NAT, vous devez activer le pare-feu (CONFIG_IP_FIREWALL) et CONFIG_IP_ROUTE_FWMARK. Pour faire fonctionner effectivement ces possibilités incluses dans le noyau, vous aurez besoin du programme «ip» de Alexey Kuznyetsov récupéré sur ftp://ftp.inr.ac.ru/ip-routing/.
Datagrammes NAT entrants
Maintenant pour traduire les adresses des datagrammes entrants, on utilise la commande suivante :
ip route add nat <ext-addr>[/<masklen>] via <int-addr>
Ceci fait qu'un paquet entrant destiné à l'adresse "ext-addr" (l'adresse visible sur l'internet extérieur) aura son champ d'adresse converti en "int-addr" (l'adresse de votre réseau interne, derrière votre passerelle ou pare-feu). Le paquet est alors routé suivant la table de routage locale. Vous pouvez traduire soit une adresse hôte unique, soit des blocs complets. Exemples:
ip route add nat 195.113.148.34 via 192.168.0.2
ip route add nat 195.113.148.32/27 via 192.168.0.0
La première commande rend l'adresse interne 192.168.0.2 accessible en tant que 195.113.148.34. Le second exemple montre une réallocation du bloc 192.168.0.0-31 en 195.113.148.32-63.