30.8. Translation d'adresses

Contribution de Chern Lee.

30.8.1. Généralités

Le “daemon” de translation d'adresses (“Network Address Translation”—NAT) de FreeBSD, généralement connu sous le nom de natd(8) est un “daemon” qui accepte les paquets IP entrants, change l'adresse de la source par celle de la machine locale et ré-injecte les paquets dans le flux sortant des paquets IP. Le programme natd(8) effectue cela en changeant l'adresse IP et le port source de sorte quand les données réponse arrivent il soit en mesure de déterminer la provenance des données d'origine et les transférer à l'émetteur original.

L'utilisation classique de NAT est le partage de connexion Internet.

30.8.2. Architecture du réseau

En raison de la diminution du nombre d'adresses IP libres sous IPv4, et de l'augmentation du nombre d'utilisateurs de lignes haut-débit comme le câble ou l'ADSL, le besoin d'utiliser une solution de partage de connexion est donc en constante augmentation. La possibilité de connecter plusieurs ordinateurs par l'intermédiaire d'une connexion et d'une adresse IP fait de natd(8) une solution de choix.

Plus généralement, un utilisateur dispose d'une machine connecté sur la câble ou une ligne ADSL avec une adresse IP et désire utiliser cet ordinateur connecté pour fournir un accès Internet à d'autres machines du réseau local.

Pour cela, la machine FreeBSD sur Internet doit jouer le rôle de passerelle. Cette machine passerelle doit avoir deux cartes réseaux—l'une pour se connecter au routeur Internet, l'autre est connectée au réseau local. Toutes les machines du réseau local sont connectées par l'intermédiaire d'un hub ou d'un switch.

Note : Il existe plusieurs manières pour connecter un réseau local à l'Internet à travers une passerelle FreeBSD. Cet exemple n'abordera que le cas d'une passerelle avec au moins deux cartes réseaux.

Une telle configuration est communément utilisée pour partager une connexion Internet. Une des machines du réseau local est connectée à Internet. Le reste des machines accède à Internet par l'intermédiaire de cette machine “passerelle”.

30.8.3. Configuration

Les options suivantes doivent être présentes dans le fichier de configuration du noyau:

options IPFIREWALL
options IPDIVERT

De plus, les options suivantes peuvent également être utiles:

options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE

Ce qui suit doit figurer dans le fichier /etc/rc.conf:

gateway_enable="YES" (1)
firewall_enable="YES" (2)
firewall_type="OPEN" (3)
natd_enable="YES"
natd_interface="fxp0" (4)
natd_flags="" (5)
(1)
Configure la machine comme passerelle. Exécuter sysctl net.inet.ip.forwarding=1 aurait le même effet.
(2)
Active au démarrage les règles du coupe-feu se trouvant dans le fichier /etc/rc.firewall.
(3)
Cela spécifie un ensemble de règles prédéfinies pour le coupe-feu qui autorise tous les paquets entrant. Consultez le fichier /etc/rc.firewall pour d'autres ensembles de régles.
(4)
Indique à travers quelle interface transférer les paquets (l'interface connectée à l'Internet).
(5)
Toutes options de configuration supplémentaires passées à natd(8) au démarrage.

Le fait d'avoir les options précédentes définies dans le fichier /etc/rc.conf lancera la commande /etc/rc.conf au démarrage. Cette commande peut être également exécutée à la main.

Note : Il est également possible d'utiliser un fichier de configuration pour natd(8) quand il y a trop d'options à passer. Dans ce cas, le fichier de configuration doit être défini en ajoutant la ligne suivante au fichier /etc/rc.conf:

natd_flags="-f /etc/natd.conf"

Le fichier /etc/natd.conf contiendra une liste d'options de configuration, une par ligne. Par exemple le cas de figure de la section suivante utiliserait le fichier suivant:

redirect_port tcp 192.168.0.2:6667 6667
redirect_port tcp 192.168.0.3:80 80

Pour plus d'information concernant le fichier de configuration, consultez la page de manuel de natd(8) au sujet de l'option -f.

A chaque machine et interface derrière le réseau local doit être assigné une adresse IP de l'espace d'adresses privées comme défini par la RFC 1918 et doit disposer d'une passerelle par défaut qui est l'adresse IP interne de la machine natd(8).

Par exemple, les clients A et B du réseau local ont les adresses IP 192.168.0.2 et 192.168.0.3, tandis que l'interface sur le réseau local de la machine natd a pour adresse IP 192.168.0.1. La passerelle par défaut des clients A et B doit être l'adresse 192.168.0.1 de la machine natd. L'interface externe ou Internet de cette dernière ne demande aucune modification spécifique pour que natd(8) puisse fonctionner.

30.8.4. Redirection de ports

L'inconvénient avec natd(8) est que les clients du réseau local ne sont pas accessibles depuis l'Internet. Les clients sur le réseau local peuvent établir des connexions sortantes vers le monde extérieur mais ne peuvent recevoir de connexions entrantes. Cela présente un problème si l'on tente de faire tourner des services Internet sur une des machines du réseau local. Une solution simple à ce problème est de rediriger les ports Internet sélectionnés de la machine natd vers le client sur le réseau local.

Par exemple, un serveur IRC tourne sur le client A, et un serveur web sur le client B. Pour que cela fonctionne correctement, les connections reçues sur les ports 6667 (IRC) et 80 (web) doivent être redirigées vers les machines correspondantes.

L'option -redirect_port doit être passée à natd(8) avec les autres options adéquates. La syntaxe est la suivante:

-redirect_port proto targetIP:targetPORT[-targetPORT]
                 [aliasIP:]aliasPORT[-aliasPORT]
                 [remoteIP[:remotePORT[-remotePORT]]]

Dans l'exemple précédent, l'argument passé à la commande devrait être:

-redirect_port tcp 192.168.0.2:6667 6667
-redirect_port tcp 192.168.0.3:80 80

Cela va rediriger les ports tcp voulus vers les machines du réseau local.

L'option -redirect_port peut être utilisée pour indiquer une plage de ports plutôt que des ports individuels. Par exemple tcp 192.168.0.2:2000-3000 2000-3000 redirigerait toutes les connexions reçues sur les ports 2000 à 3000 vers les ports 2000 à 3000 du client A.

Ces options peuvent être utilisées quand on exécute directement natd(8), placées dans l'option natd_flags="" du fichier /etc/rc.conf, ou passées par l'intermédiaire d'un fichier de configuration.

Pour plus d'éléments et d'options de configuration consultez la page de manuel natd(8)

30.8.5. Redirection d'adresses

La redirection d'adresses est utile si plusieurs adresses IP sont disponibles mais doivent se trouver sur une seule machine. Avec cela, natd(8) peut assigner à chaque client du réseau local sa propre adresse IP externe. Le programme natd(8) récrit alors les paquets sortant des clients du réseau local avec l'adresse IP externe correcte et redirige tout le trafic entrant sur une adresse IP particulière vers la machine du réseau local correspondante. Ce principe est également connu sous le nom de translation d'adresses statique. Par exemple, les adresses IP 128.1.1.1, 128.1.1.2, et 128.1.1.3 appartiennent à la passerelle natd. L'adresse 128.1.1.1 peut être utilisée comme adresse IP externe de la passerelle natd, tandis que 128.1.1.2 et 128.1.1.3 sont redirigées vers les machines A et B du réseau local.

La syntaxe de l'option -redirect_address est la suivante:

-redirect_address localIP publicIP
localIP L'adresse IP interne du client sur le réseau local.
publicIP L'adresse IP externe correspondant au client sur le réseau local.

Dans l'exemple, les arguments passés à la commande seraient:

-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3

Comme pour l'option -redirect_port, ces options peuvent être placées dans l'option natd_flags="" du fichier /etc/rc.conf, ou passées par l'intermédiaire d'un fichier de configuration. Avec la redirection d'adresse, il n'y a pas besoin de redirection de ports puisque toutes les données reçues sur une IP particulière sont redirigées.

Les adresses IP sur la machine natd doivent être active et pointer sur l'interface externe. Consultez la page de manuel rc.conf(5) pour cela.

Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.