Créer un routeur avec Linux
Veuillez remarquez que cet article est devenu obsolète. Les instructions suivantes devraient fonctionner sur de vieux systèmes, autrement veillez à ne pas les utiliser. Un tutoriel mis à jour et plus complet sera disponible entre le 25 et le 30 mars 2011.
Créer un routeur sous Linux en recyclant un bon vieil ordinateur est un très bon moyen de créer un sous réseau sécurisé. Malheureusement, les billets contenants des explications claires de la procédure ne sont pas aussi simple à comprendre qu’ils le devrais.
Pour ce faire vous avez besoin d’un ordinateur très simple. Personnellement j’utilise un P3 600 MHz avec 327 Mo de RAM et un disque dur de 20 Go. C’est bien plus que nécessaire pour cet usage, mais cette machine est aussi un serveur HTTP et FTP. Par exemple, mon précédant routeur était un Pentium 200 avec 48 Mo de RAM et un disque dur de 500 Mo, ce qui tournais très bien sous une Debian Etch. Concernant les interfaces réseaux, vous aurez besoin d’une carte Ethernet en plus de ce qui vous est nécessaire pour l’accès Internet, qui est probablement une autre carte ethernet. Vous aurez également besoin d’un hub ethernet connecté à cette carte réseau. Si vous avez besoin du sans fil, je recommande une troisième carte réseau Ethernet (donc un second sous-réseau), ou vous n’aurez qu’un point d’accès WiFi installé. Si vous ne pouvez (ou ne voulez pas) avoir une troisième carte réseau vous pouvez toujours connecter votre point d’accès au hub mais c’est mois sécurisé.
Toute les instruction qui suivent, supposeront qu’une Debian Lenny ou Etch est installé sur la machine de routage (ce qui est un assez bon choix) avec une connexion Internet fonctionnelle. Vous n’aurez qu’à installer le système de base. Il n’est pas recommandé d’installer X et des applications graphique car la sécurité est le principal but de ce type de routeurs.
Ceci fait, vous devez passer en compte root pour tout le reste de la procédure et installer les paquets suivants :
- dhcp3-server qui attribuera automatiquement les adresses IP des clients de votre sous-réseaux
- dhcp3-client est utile si votre modem vous fourni une adresse IP dynamique ou si ce modem est lui-même un routeur (généralement installé par défaut)
- iptables qui est un pare-feu et fournit la traduction d’adresse (NAT) (généralement installé par défaut)
- iptables-persistent qui conservera les paramètres d’iptables et le restaurera en cas de redémarrage du routeur
- nano un éditeur de texte simple (généralement installé par défaut)
- w3m (ou n’importe quel navigateur en mode texte) pour tester la connexion internet sur le routeur
- Tout autre serveur public utile pour vous, comme Apache, proFTPd, BIND…
D’abords je doit définir quelques termes pour être précis. Imaginez le plan suivant :
- eth0: connecté à votre modem (zone internet) avec l’adresse 192.168.0.1
- eth1: connecté à votre réseau Ethernet privé avec l’adresse 192.168.1.1
- eth2: connecté à votre point d’accès WiFi (zone optionnelle WiFi) avec l’adresse 192.168.2.1
Bien sur vous devrez remplacer ces valeurs par celles de votre configuration et avec les adresses réseaus de votre choix (doit commencer par 192.168). La zone internet est automatiquement configuré par dhcp-client situé dans le script d’initialisation du système mais ce n’est pas le cas des deux autres réseaux. A moins d’avoir donné les bonnes valeurs pendant l’installation, vous devez le configurer manuellement en éditant le fichier “/etc/network/interfaces”:
# Begin of /etc/network/interfaces # Configuring the loopback interface auto lo iface lo inet loopback # Primary network interface (internet zone) allow-hotplug eth0 iface eth0 inet dhcp # Private network iface eth1 inet 192.168.1.1 iface eth2 inet 192.168.2.1
À présent il faut éditer le fichier “/etc/dhcp3/dhcpd.conf” pour activer le serveur DHCP (Dynamic Host Configuration Protocol) :
# Begin /etc/dhcp3/dhcpd.conf # Use ad-hoc style name server updating procedures ddns-update-style ad-hoc; # Configure client's dns settings: replace 212.27.40.24x with your ISP DNS servers and # optionally add your DNS server (192.168.1.1 here) if you have your own. option domain-name "jeff.levasseur.org"; option domain-name-servers 212.27.40.241, 212.27.40.240, 192.168.1.1; # Configure lease time (in seconds) default-lease-time 600000000; max-lease-time 720000000; # eth1 subnet configuration: this will give address from 192.168.1.10 to # 192.168.1.99 and it's the only thing you may change. Note that you # can have several range, and ranges with only one address. subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.99; option routers 192.168.1.1; option broadcast-address 192.168.1.255; } # eth2 subnet configuration: here you have an exemple of multiple range subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.2 192.168.2.10; range 192.168.2.100 192.168.2.199; option routers 192.168.2.1; option broadcast-address 192.168.2.255; } # End /etc/dhcp3/dhcpd.conf
Maintenant, redémarrons le serveur DHCP :
/etc/init.d/dhcp3-server restart
Vous devriez tester le serveur DHCP en reconfigurant le réseau et en pingant le serveur depuis l’une des machines client. Par exemple avec Linux:
dhclient eth0 ping 192.168.1.1
Si dhclient vous donne une bonne adresse IP et que ping ne renvoi aucune erreur de transmission de paquet, votre serveur DHCP est bien configuré. Avec Windows, vous devez utiliser le “Panneau de configuration” pour configurer les paramètres du client. Si vous utiliser un point d’accès WiFi, vous devrez le configurer en conséquence avant de lancez ces test.
A ce point le réseau local fonctionne mais vous n’aurez pas encore d’accès à internet car l’interface eth0 doit “traduire” les adresses de eth0 pour eth1 et eth2. Ça s’appelle NAT (Network Address Translation) et cela ce fait avec iptables qui est en même temps notre pare-feu. Dans une console tapez les commandes suivantes :
# Fait suivre les adresses des requêtes entrantes depuis eth0 vers eth1 et eth2 # seulement quand une connexion (via une requête sortante) à déjà été établie iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,REQUIRED -j ACCEPT iptables -A FORWARD -i eth0 -o eth2 -m state --state ESTABLISHED,REQUIRED -j ACCEPT # Fait suivre tout ce qui viens des clients et qui va vers internet... iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT # Active le nat d'iptables iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # Active la transmission de paquet du noyau de Linux echo 1 > /proc/sys/net/ipv4/ip_forward # Redémare le serveur DHCP /etc/init.d/dhcp3-server restart
A présent votre accès Internet fonctionnera avec un très bon niveau de protection. Néanmoins, si vous voulez régler votre configuration d’iptables, la prochaine étape sera d’acheter un bouquin dessus… That’s all folks !