Exemple d'une machine NAT en théorie

Un petit scenario théorique dans lequel nous voulons faire du NAT entre 2 réseaux différents et une connexion Internet. Nous voulons connecter les deux réseaux ensemble, ces deux réseaux ayant accès l'un à l'autre et à l'Internet. Nous verrons les questions de matériel auxquelles vous devrez penser avant d'implémenter une machine NAT.

Ce qui est nécessaire pour une machine NAT

Avant d'aller plus loin, regardons d'abord quel type de matériel est nécessaire pour assembler une machine Linux faisant du NAT. Pour la plupart des petits réseaux, ce n'est pas un problème, mais si vous considérez des grands réseaux ça peut en devenir un. Le plus gros problème avec le NAT est qu'il consomme des ressources très rapidement. Pour un petit réseau privé avec 1-10 utilisateurs, un 486 avec 32 Mo de RAM devrait suffire. Cependant, si vous avez 100 ou plus utilisateurs, vous devrez reconsiderez le choix du matériel. Bien sûr, il faut aussi considérer la bande passante, et combien de connexions seront ouvertes en même temps. Généralement, des ordinateurs anciens et mis au rebus, devraient faire l'affaire. En utilisant un ordinateur ancien, vous aurez un pare-feu très bon marché en comparaison d'autres pare-feux.

Vous devez également penser au problème des cartes réseau. Combien de réseaux séparés seront connectés à votre machine NAT/pare-feu ? La plupart du temps il est simplement suffisant de connecter un réseau à une connexion Internet. Si vous vous connectez à l'Internet via ethernet, vous devrez en principe avoir deux cartes ethernet, etc. Ce peut être une bonne idée de choisir des cartes réseau 10/100 mbits de bonne marque pour l'extensibilité, mais la plupart des cartes réseau feront l'affaire pour autant que les pilotes soient intégrés dans le noyau Linux. Un mot sur ce sujet : évitez d'utiliser des cartes réseau qui n'ont pas de pilote intégré dans le noyau des distributions Linux. J'ai trouvé en plusieurs occasions des cartes réseau de marques qui distribuent séparément les drivers et qui fonctionnent mal. Ils ne sont souvent pas très bien maintenus, et si vous utilisez ce type de matériel vous avez une chance très mince qu'il fonctionne correctement avec les mises à jour successives des noyaux Linux. Ce qui veut dire, que vous avez intérêt à payer un petit peu plus cher pour vos cartes réseau, mais ça se justifie.

Notez que, si vous installez un pare-feu sur du matériel très ancien, essayez au moins d'utiliser les bus PCI ou mieux si possible. En priorité, les cartes réseau pourront être utilisées dans le futur lorsque vous ferez des mises à jour. Ainsi, les bus ISA sont extrêmement lents et lourds en ressources processeur.

Enfin, une chose à considérer c'est combien de mémoire vous mettrez sur la machine NAT/pare-feu. Le mieux est de mettre au moins 64 Mo, même s'il est possible de tourner avec 32 Mo. Le NAT ne consomme pas énormément de mémoire, mais il peut être prudent d'en ajouter juste dans le cas où le trafic serait plus important que prévu. (NdT. Le problème ne devrait plus se poser maintenant que le "standard" en RAM est de 512 Mo voire 1024 Mo).

Comme vous pouvez le voir, il y a plusieurs choses à considérer quand on parle de matériel. Mais, pour être honnête, dans la plupart des cas ça ne posera pas de problème, à moins que vous installiez une machine NAT pour un gros réseau. Pour un usage domestique vous pouvez plus ou moins utiliser le matériel que vous avez sous la main.

Emplacement des machines NAT

Ceci pourrait sembler simple, cependant, ce peut être plus ardu qu'on ne le penserait sur des gros réseaux. En général, la machine NAT devrait être située en périphérie du réseau. Ceci, la plupart du temps, veut dire que les machines NAT et de filtrage sont les mêmes machines, bien sûr. Ainsi, si vous avez de très grands réseaux, il peut être utile de séparer le réseau en plusieurs réseaux plus petits et assigner une machine NAT pour chacun de ces réseaux. Le NAT prenant beaucoup de temps processeur, ceci vous aidera à conserver la durée de rotation (RTT, Round Trip Time : temps que met un paquet pour joindre sa destination et envoyer un paquet en retour), la plus courte possible.

Dans notre exemple de réseau décrit ci-dessus, avec deux réseaux et une connexion Internet, nous devrons considérer la taille des deux réseaux. Si nous les considérons comme petits, 200 clients ne seront pas un problème pour une machine NAT décente. D'un autre côté, nous auront à fractionner la charge sur plusieurs machines en plaçant les IP publiques sur des machines NAT plus petites, chacune maintenant son propre segment de réseau et laissant se rassembler le trafic sur une seule machine de routage spécifique. Ceci bien sûr, prenant en considération le fait que vous devez avoir suffisamment d'IP publiques pour toutes vos machines NAT, et qu'elles soient routées à travers votre machine routeur.

Comment placer les proxies ?

Les proxies sont généralement un problème lorsqu'ils sont accompagnés de NAT dans beaucoup de cas malheureusement, spécialement les proxies transparents. Un proxy normal ne causera pas trop de problèmes, mais en créant un proxy transparent c'est plus compliqué, spécialement dans les grands réseaux. Le premier problème est que les proxies prennent beaucoup de temps processeur, comme le NAT. Placer les deux sur la même machine n'est pas judicieux si vous avez à assurer un gros trafic réseau. Le second problème est que si vous traduisez l'IP source ainsi que l'IP destination, le proxy ne sera pas capable de savoir quel hôte contacter. Exemple, quel serveur est le client à contacter ? Localement, ceci a été résolu en ajoutant l'information dans les structures internes de données créées pour les paquets, ainsi les proxies comme Squid peuvent obtenir cette information.

Comme vous pouvez le voir, le problème est que vous n'avez pas beaucoup de choix si vous voulez utiliser un proxy transparent. Il existe, bien sûr, des possibilités mais elles ne sont pas réellement recommandables. Une possibilité est d'installer un proxy à l'extérieur du pare-feu et créer une entrée qui route tout le trafic web à travers cette machine, et localement NATer les paquets sur les bons ports pour le proxy. De cette façon, l'information est préservée pour le proxy et toujours disponible pour lui.

Le seconde possibilité est de simplement créer un proxy à l'extérieur du pare-feu, qui bloque tout le trafic web sauf le trafic venant du proxy. Comme ça, vous forcerez tous les utilisateurs à passer par le proxy. C'est un peu fruste comme moyen de faire, mais ça peut fonctionner.

Étape finale pour votre machine NAT

Dernière étape, réunissons toutes ces informations ensemble, et voyons comment nous pouvons installer une machine NAT. Regardons la figure des réseaux et voyons ce qu'elle dit. Nous avons décidé de placer un proxy à l'extérieur d'une machine NAT comme décrit plus haut. Cette zone peut être considérée comme une DMZ dans un sens, avec la machine NAT faisant routeur entre la DMZ et les deux réseaux de l'entreprise. Vous pouvez voir la topologie exacte dans l'image ci-dessous.

Tout le trafic normal provenant des réseaux NATés seront envoyés, à travers la DMZ, directement au routeur, qui adressera le trafic vers l'Internet. Sauf, le trafic web de la partie netfilter de la machine NAT, routé vers la machine proxy. De quoi parlons nous ? Un paquet http est analysé par la machine NAT. La table Mangle peut alors être utilisée pour marquer le paquet avec une marque de filtrage (nfmark). Même plus tard quand nous voudrons router des paquets vers notre routeur, nous pourrons vérifier la marque de filtrage dans les tables de routage, et basé sur cette marque, nous pourrons choisir de router les paquets http vers le serveur proxy. Le serveur proxy fera alors son travail sur les paquets. Nous verrons ce sujet en détail plus loin.

La machine NAT possède une IP réelle disponible sur Internet, de même que le routeur et n'importe quelle autre machine présente sur l'Internet. Toutes les machines à l'intérieur de réseaux NATés auront des adresses IP privées, économisant de l'argent, et des adresses Internet.