NAT
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.
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
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.
© Philippe Schwarz - Philippe Chadefaux - $Id: nat.html,v 1.0 2003/04/10 22:36:14 phil Exp $ -