Ceci est une ancienne révision du document !


IP NAT MASQUERADE

Passerelle simple

Comme je suis prof depuis assez longtemps pour avoir compris qu'il n'y a rien de plus frustrant que de se taper des heures de théorie avant de pouvoir passer, enfin, à la pratique, nous allons d'abord réaliser vite fait une passerelle opérationnelle. Sommaire, rudimentaire, mais opérationnelle.

Après, nous verrons plus en détail comment tout ceci fonctionne.

Netfilter et IPtables

Installation

Netfilter, c'est le système de filtrage des paquets. C'est lui qui va permettre de réaliser le routage dans de bonnes conditions. Les bonnes distributions l'intègrent sous forme de modules.

IPtables, c'est en quelque sorte l'interface qui permet de configurer Netfilter. Là, il vous faudra vérifier que le paquetage iptables est bien installé, ce qui est maintenant unanimement le cas.

Configuration simpliste

Dans la suite, ne confondez pas le script /etc/init.d/iptables avec /sbin/iptables, qui est un exécutable.

Incantation magique Signification
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
On applique le « masquerading » sur tout ce qui doit sortir par ppp0
echo 1 > /proc/sys/net/ipv4/ip_forward
On déverrouille le « forwarding », autrement dit, on active le routage.

Et voilà. La passerelle fonctionne. Assurez-vous d'abord que votre connexion PPPoE est bien active, par exemple en faisant un

ifconfig ppp0

qui doit vous indiquer que cette interface est bien montée. Si ce n'est pas le cas, commencez par arriver à obtenir ce lien.

Essayez maintenant, depuis un poste quelconque de votre réseau local, de faire un ping sur www.oleane.fr :

$ ping -c 3 mir1.ovh.net
PING mir1.ovh.net (213.186.33.37) 56(84) bytes of data.
64 bytes from mir1.ovh.net (213.186.33.37): icmp_seq=1 ttl=55 time=90.8 ms
64 bytes from mir1.ovh.net (213.186.33.37): icmp_seq=2 ttl=55 time=82.1 ms
64 bytes from mir1.ovh.net (213.186.33.37): icmp_seq=3 ttl=55 time=78.5 ms

--- mir1.ovh.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 78.523/83.855/90.890/5.200 ms

Vous croyez que c'est fini ?

Rendre ces choses définitives

Les règles iptables sont volatiles. Si vous redémarrez votre machine, il faudra les réécrire. Pour éviter ce désagrément, une fois vos règles établies, créez un répertoire /etc/iptables et utilisez la commande iptables-save pour créer un fichier contenant vos règles :

~# mkdir /etc/iptables
~# iptables-save > iptables-active

Si nous regardons ce que nous avons dans /etc/iptables/iptables-active :

:~# cat /etc/iptables/iptables-sactive
# Generated by iptables-save v1.3.8 on Fri May 23 19:13:20 2008
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [4:228]
:OUTPUT ACCEPT [4:228]
-A POSTROUTING -o ppp0 -j MASQUERADE 
COMMIT
# Completed on Fri May 23 19:13:20 2008
# Generated by iptables-save v1.3.8 on Fri May 23 19:13:20 2008
*filter
:INPUT ACCEPT [45334:56750206]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [33598:2416238]
COMMIT
# Completed on Fri May 23 19:13:20 2008
Ce n'est pas tout, il nous faudra aussi ajouter la ligne :

pre-up iptables-restore < /etc/iptables/iptables-active

Dans /etc/network/interfaces à la configuration de l'interface connectée au modem (eth1 ou ppp0 suivant le cas). Exemple :

auto eth0
iface eth0 inet static
	address 192.168.0.253
	netmask 255.255.255.0
	network 192.168.0.0
	broadcast 192.168.0.255

auto ppp0
iface ppp0 inet ppp
	provider dsl-provider
       pre-up iptables-restore < /etc/iptables/iptables-active

Pour être tout à fait propres, il faudrait également ajouter le ligne :

post-down iptables -t nat -F

Pour vider la table nat lorsque ppp0 (ou eth1) est désactivée. Ce qui donne finalement :

auto eth0
iface eth0 inet static
	address 192.168.0.253
	netmask 255.255.255.0
	network 192.168.0.0
	broadcast 192.168.0.255

auto ppp0
iface ppp0 inet ppp
        provider dsl-provider
        pre-up iptables-restore < /etc/iptables/iptables-active
        post-down iptables -t nat -F

Le déverrouillage du « forwarding » est également volatile par défaut. Pour remédier à ce problème :

  • éditez le fichier /etc/sysctl.conf
  • ajoutez à ce fichier la ligne :
    net.ipv4.ip_forward=1

Au prochain redémarrage, vous devrez retrouver la valeur 1 dans /proc/sys/net/ipv4/ip_forward :

:~# cat  /proc/sys/net/ipv4/ip_forward 
1

Et la sécurité ?

Votre passerelle fonctionne, certes, mais c'est un vaste trou béant au sens de la sécurité. Pour faire quelque chose de propre, il vous faudra lire le chapitre sur la sécurité ]et aussi celui sur Netfilter, pour comprendre mieux ce qu'il y a à faire.

Dans l'état actuel des choses, vous être fortement exposé à toutes sortes d'ennuis…

Plus de confort

Le problème du DNS

Sur vos postes du réseau privé, vous devez indiquer « en dur » l'adresse IP des DNS de votre FAI. Ce n'est pas pratique, parce qu'ils peuvent changer sans vous le dire. Il vaut mieux installer sur votre passerelle un service DNS qui pourra soit résoudre les noms directement par lui même, soit servir de proxy DNS, c'est à dire retransmettre au DNS de votre FAI les requêtes de résolution que vous lui adresserez.

Dans ce cas, vous indiquerez sur vos clients l'adresse de votre passerelle pour le DNS et c'est elle qui se chargera de vous communiquer les résolutions.

A vous de voir ce qui vous convient le mieux. Normalement, un proxy DNS est suffisant. Vous pouvez faire ça assez simplement avec BIND. Lisez le chapitre consacré au DNS pour en savoir plus.

La configuration IP des clients

Configurer ses clients du réseau privé à la main, c'est bien, mais c'est vite fastidieux si vous en avez beaucoup. Il existe une possibilité de faire ça automatiquement au démarrage de vos machines en utilisant les services de DHCP. Vous pouvez aussi installer un serveur DHCP sur votre passerelle. C'est vraiment du luxe pour un petit réseau domestique, mais comme ce luxe ne vous coûtera rien de plus que de lire le chapitre sur DHCP…

Mais, avant tout, pensez d'abord à la sécurité et passez à Netfilter au plus vite.