Tu dois créer des règles de NAT qui disent au kernel quelles
connections changer, et comment les changer. Pour faire cela, nous
utilisons l'outil très versatile iptables, et lui
disons d'altèrer la table NAT en specifiant l'option -t nat.
La table des règles de NAT contient 3 listes appelées `chaines':
chaque règle est examinée dans l'ordre jusqu'à ce qu'une convienne.
Les trois chaines sont appelées PREROUTING (pour le NAT de
destination, lorsque le paquet arrives), POSTROUTING (pour le NAT
de source, lorsque le paquet part), et OUTPUT (pour le NAT de
destination des paquets localement générés).
Le diagramme suivant devrait illustrer pas mal si j'avais un peu
de talent artistique:
A chacun des points ci dessus, quand un paquet passe nous
regardons a quelle connection il est associé. Si c'est une nouvelle
connection, nous regardons la chaine correspondante dans la table
NAT pour voir quoi faire avec lui. La réponse donnée sera appliquée
à tous les paquets futurs de cette connection.
iptables a un nombre d'options standards comme
listées ci-dessous. Toutes les options avec un double tiret peuvent
être abbrégées, aussi longtemps que iptables peut les
différencier des autres options possibles. Si ton kernel a un
support iptables comme module, tu devras charger le module
iptables.o en premier : `insmod ip_tables'.
L'option la plus importante ici est la sélection de table, `-t'.
Pour toutes les operations de NAT, tu devras utiliser `-t nat' pour
la table NAT. La seconde option la plus importante à utiliser est
`-A' pour ajouter une nouvelle règle à la fin de la chaine (pe. `-A
POSTROUTING'), ou `-I' pour en insérer une au début (pe. `-I
PREROUTING').
Tu peux specifier la source (`-s' ou `--source') et la
destination (`-d' ou `--destination') du paquet que tu veux NAT.
Ces options peuvent être suivies d'une seule adresse ip (p.e.
192.168.1.1), un nom (p.e. www.gnumonks.org), ou une adresse de
réseau (p.e. 192.168.1.0/24 ou 192.168.1.0/255.255.255.0).
Tu peux specifier une interface d'entrée (`-i' ou
`--in-interface') ou de sortie (`-o' ou `--out-interface') qui
convient, mais celle que tu peux specifier dépend dans quelle
chaine tu mets la règle : au PREROUTING tu peux seulement
selectionner une interface d'entrée, et au POSTROUTING (et OUTPUT)
une de sortie. Si tu utilises la mauvaise, iptables
retournera une erreur.
J'ai dit plus haut que tu pouvais specifier une adresse source
et destination. Si tu omets l'adresse source, alors toutes les
adresses sources conviendront. Si tu omets l'adresse destination,
alors toutes les adresses destination conviendront.
Tu peux aussi specifier un protocole (`-p' ou `--protocol'),
comme TCP ou UDP; seuls les paquets de ce protocole conviendront
pour la règle. La raison, principale de specifier un protocole tcp
ou udp est que l'on a alors des options supplémentaires :
spécifiquement `--source-port' et `--destination-port' (abbrégées
en `--sport' et `--dport').
Ces options te permettent de specifier que seulement les paquets
avec un certain port source et destination conviendront à la régle.
C'est utile pour rediriger les requètes web (port TCP 80 ou 8080)
et laisser les autres paquets tranquilles.
Ces options doivent suivre l'option `-p' (qui a comme effet de
charger la librairie partagée pour ce protocole). Tu peux utiliser
des numéros de ports, ou un nom du fichier `/etc/services'.
Toutes les différentes manières dont tu peux selectionner un
paquet sont détaillées dans la page de manuel (man
iptables).