NAT
Network Adress Translation ou
translation d'adresse réseau



Préambule
1.Le nom commun français pour Translation est bien Traduction. Mais le but ici étant d'être le plus clair et compréhensible par tous et toutes, je vais faire comme tout le monde, et faire hurler mes respectables collègues professeurs d'anglais, je vais parler de translation d'adresses et non  de traduction d'adresses, expression assez peu répandue.
2. NAT est le terme générique que vous retrouverez sous le nom de mascarade IP (IP Masquerading) sous Linux.

Qu'est ce ? En attendant la prochaine version du protocole IP (IPV6), la version actuelle (IPV4) souffre, entre autres, d'une lacune grave : Sa faible capacité; les adresses IP sur 32 bits codent 2^32 adresses soit environ 4 milliards, ce qui devient aujourd'hui critique. L'un des bricolages trouvé consiste à cacher tout son LAN derrière une seule machine, donc une seule IP, qui s'arrangera pour faire passer toutes les requêtes sous son adresse. On parle d'adresse publique pour cette dernière. Par opposition, les machines du LAN sont en adressage privé. Cet adressage dépend uniquement de l'humeur de l'administrateur réseau. Pour uniformiser tout ça, ainsi que pour règlementer cet état de fait, l'IETF a délimité ce mécanisme. Le NAT est décrit dans plusieurs RFC, le plus récente étant la RFC 1918.

Les adresses suivantes sont définies comme privées et ne devraient JAMAIS être routées sur Internet :

Classe   Première adresse Dernière adresse Nombre approx. de machines dans le même sous-réseau (*)
1 Classe A  La classe 10. 10.0.0.0 10.255.255.255 16 Millions
16 Classes B La classe 172.16. 172.16.0.0 172.31.255.255 1 Million
256 Classes C  La classe 192.168.0. 192.168.0.0 192.168.255.255 256

(*) : On enlèvera l'adresse de broadcast, l'adresse du réseau, et on n'oubliera pas qu'on utilise ici des masques classiques.

Syntaxe:

 Règles d'expansion de variable.

NAT est un moyen de translater une adresse IP ou une plage d'adresse provenant d'une machine se trouvant à l'intérieur de votre réseau privé, en une adresse publique qui sont les seuls à pourvoir aller sur l'internet.On suppose donc ici que vous utilisez une machine servant de passerelle (et de FireWall) pour votre partage de connexion à internet. Une carte réseau vers Internet, l'autre vers votre LAN.

Pour que NAT fonctionne il faut activer PF dans le fichier /etc/rc.conf, et vérifier que vous avez la ligne net.inet.ip.forwarding = 1 dans le fichier /etc/sysctl.conf

Vous disposez de deux directives, nat et rdr.

nat : Pour "cacher" une machine ou un réseau. vous redirigez l'ensemble du trafic d'une machine ou d'un réseau.
nat on tun0 from 10.0.0.0/24 to any -> tun0

Vous indiquez ici que tous les paquets arrivants du réseau interne en 10.0.0.0/24 et que vous souhaitez diriger vers le réseau internet (any) sont envoyés vers la carte tun0 (On peut utiliser l'adresse IP, mais si vous ne disposez pas d'une ip fixe cela n'est pas une bonne idée).

rdr : Pour rediriger le flux sur un port donné, vers une machine une autre machine ou si vous souhaitez rediriger le trafic qui doit aller sur le port 80 sur le port 8080 vous devez utiliser rdr.PAttention ceci n'est valable que d'une carte vers une autre.Souvent, il s'agit de rendre accessible ,depuis l'extérieur, une machine masquée par la directive nat. 

  Quelques limites ou remarques importantes :

1.  
Contrairement aux règles de filtrage, la première règle de NAT l'emporte..Important!!

2. !!!!!Attention!!!! L'ordre est TRES important :Alors on se répète très fort afin d'éviter de s'arracher les quelques cheveux qui restent :
 L'ordre de lecture pour un paquet est le suivant : Les règles de NAT PUIS les règles de PF !!!! On masque les paquets,PUIS on les filtre !!!

3. On ne peut traduire des paquets que d'une interface à une autre, pas sur la meme !!
Ainsi, on ne peut pas rediriger des paquets d'une interface vers la meme :
Exemple  depuis le client :
Ceci fonctionne :
rdr on fxp0 from 10.0.0.0/24 to any port 22 -> 10.1.0.2 port 22
Mais pas ceci :
rdr on fxp0 from 10.0.0.0/24 to any port 22 -> 10.0.0.2 port 22


SSH Inaccessible

 

Par exemple :
Prendre le contrôle d'une machine à l'intérieur du réseau interne

    Rediriger SSH vers une machine interne à votre réseau privé qui a comme adresse IP 10.0.0.5. En fait vouloir prendre la main dessus depuis l'extérieur via une connexion ADSL.
rdr on tun0 from any to any port 22 -> 10.0.0.5 port 22 (redirige le trafic sur le port 22 vers la machine interne en 10.0.0.5 sur le port 22)
Si vous souhaitez utiliser un autre port que le 22 car le 22 est déjà à l'écoute sur votre passerelle, vous pouvez rediriger le port 23 vers le port 22 de la machine se trouvant à l'intérieur. Ce qui donne :
rdr on tun0 from any to any port 23 -> 10.0.0.5 port 22


Proxy transparent

    On cherche ici à obliger les requêtes vers le Web à passer par un proxy ( port 8080) sans que l'utilisateur ne soit obligé de configurer son navigateur.
 rdr on fxp0 from 10.0.0.0/24 to any port 80 -> 127.0.0.1 port 8080
Voir aussi la page de Squid, pour la configuration de celui-ci. 

SMTP transparent: Un pseudo Mailroam.
    Vous trainez votre portable en différentes endroits ayant des FAI différents,donc, des SMTP différents qu'en toute logique vous ne pouvez pas utiliser (Fonction d'antirelaying).

Avec une simple règle de redirection, vous faites en sorte que tout le flux smtp sortant soit redirigé sur celui de votre FAI, et ceci sans reconfigurer son mailer préféré. (Ca marche meme sous Outlook express ;-) Je plaisante, je parlais de mailer..)
 rdr on fxp0 from 10.0.0.0/24 to any port 25 -> IP_SMTP_FAI port 25
    Le seul et unique inconvénient à cette bricole est qu'il faut se rappeler de son existence lors des scans de port. (Vous savez le truc qu'il ne faut faire que sur SES PROPRES machines, et après avis de la DSI...On vous aura prévenu!) En effet, avec ca, tout serveur aura son port 25 ouvert pour votre client !!


© Philippe Schwarz - Philippe Chadefaux   - $Id: nat.html,v 1.0 2003/04/10 22:36:14 phil Exp $ -