Configurer un routeur sous Linux

I. Présentation

Nous allons dans ce tutoriel apprendre à mettre un en place un routeur sous Linux. Les distributions sous Linux sont très polyvalentes et cela permet entre autre de les transformer en véritables routeurs. Il faut bien sur pour cela que notre machine Linux dispose d'au moins deux interfaces réseaux car la première fonction d'un routeur et de faire la passerelle (gateway) entre un réseau et un autre qui ne pourraient communiquer sans.

II. Configuration des deux interfaces

Nous allons commencer par configurer nos deux interfaces avec des IP fixes. Un routeur est un élément central d'un réseau et toutes les machines de ce réseau s'y réfèrent pour leurs requêtes. Il est donc obligatoire que notre routeur ai une IP fixe sur chacune de ces interfaces. Nous travaillerons ici sur l'interface "eth0" qui sera orientée vers le réseau simulant une réseau externe "WAN" en 192.168.1.0/24 et une seconde interface "eth1" qui sera vers notre "LAN" en 192.168.10.0/24.

Aprés vous être assuré que votre machine dispose bien de deux interfaces, il faut se rendre dans le fichier "/etc/network/interfaces" pour configurer nos interfaces réseaux :

RouteurLinux01

Nous ne mettons pas de passerelle à l'interface LAN car ce sera notre routeur la passerelle de ce réseau. En revanche pour le réseau WAN en "192.168.1.0/24", il dispose d'une gateway (passerelle) en "192.168.1.1" vers lequel notre routeur relaira les requêtes lorsqu'il ne saura y répondre.  Nous pourrons ensuite redémarrer notre service réseau pour que les changements soient pris en comptes :

/etc/init.d/networking restart

On pourra, pour finir, vérifier la bonne configuration de nos interfaces avec la commande suivante :

ifconfig

III. Activation du mode routeur

Par défaut, une machine Linux ne fait pas passer n'importe quel paquet comme doit le faire un routeur. On doit donc activer cette fonctionnalité qui est sous la forme d'un option dans le fichier "/etc/sysctl.conf", on devra y chercher la ligne suivante afin de la dé-commenter :

RouteurLinux02

Cette option active donc le forwarding (le "relayage" des paquets) d'une interface à une autre ou plus précisément d'un réseau à un autre. On pourra ensuite reloader notre sysctl :

sysctl -p /etc/sysctl.conf

IV. Activation du NAT

Dans la plupart des cas, notre routeur fera du NAT sur notre réseau LAN. Pour résumer, le NAT permet de protéger le réseau LAN en le cachant aux autres réseaux qui sont considérés comme "extérieurs" donc potentiellement dangereux . Toutes les requêtes faites par le LAN et sortant par notre routeur auront l'air pour les autres réseaux de provenir de notre routeur en tant que machine simple. Cela permet de ne pas montrer aux autres réseaux que tout un réseau se cache derrière. Le NAT permet aussi de simplifier les tâche de routage car il évite dans beaucoup de cas d'avoir à manipuler des tables de routage.

Pour mettre en place le NAT, on rappel que notre interface eth0 est notre interface extérieur "WAN" en 192.168.1.0/24. Le NAT se met en sortie de cette interface WAN. Nous devons passer la commande suivante :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Note : Faites bien attention aux majuscules/ minuscules !

Nous disons donc que, une fois que le routeur saura quelle route donner à notre requête, il fera un masquerade (il changera la source du paquet pour la remplacer par lui même) quand ces requêtes sortiront de l'interface eth0 (pour aller vers des réseaux extérieurs).

Nous pourrons vérifier notre iptables en faisant la commande suivante :

iptables -L -t nat
  • "-L"  sert à lister les règles Iptables
  • "-t nat" sert à préciser la table NAT qui n'est pas prise en compte par défaut

V. Automatiser le montage des règles iptables

Nous allons maintenant automatiser le montage de nos règles à l'activation de notre interface eth0. A chaque fois que notre interface sera réactivé, les règles Iptables se ré-appliquerons par la même occasion. Pour faire cela, on commence par enregistrer nos règles Iptables dans un fichier au choix (ici "/etc/iptables_rules.save") avec la commande prévue à cet effet :

iptables-save > /etc/iptables_rules.save

On se rend ensuite à nouveau dans notre fichier de configuration réseau "/etc/network/interfaces" et on ajoute cette ligne à la fin de la configuration de notre interface eth0 :

post-up iptables-restore < /etc/iptables_rules.save

On utilise la commande "iptables-restore" qui est faite pour appliquer des règles iptables provenant d'un fichier fait avec la commande "iptables-save" après le montage de l'interface ("post-up"). Pour vérifier que le montage automatique de nos règles fonctionne correctement. Nous pouvons voir avec la commande suivante que notre règles est présente :

iptables -L -t nat
  • "-L" sert à lister les règles IPtables basiques
  • "-t nat" sert à afficher les règles de la table nat qui ne sont pas affichées par défaut

Nous aurons alors cette réponse :

RouteurLinux03

Nous voyons bien sur la chaine "POSTROUTING" de notre table "nat" que le MASQUERADE est présent vers tous les réseaux. Dés lors, nous allons supprimer nos règles avec la commande :

iptables -F -t nat
  • "-F" sert à effacer les règles de bases
  • "-t nat" sert à nouveau à préciser la table NAT qui n'est pas prise en compte par défaut

On pourra alors refaire un affichage de règles pour constater que notre règle de a disparue :

RouteurLinux04

Enfin, on rechargera nos interfaces réseaux avec la commande suivante :

/etc/init.d/networking restart

Puis on affichera notre table "nat" un dernière fois pour constater que notre règle est revenue. Notre routeur Linux est fin prêt, nous pouvons maintenant connecter des clients à notre interface eth1, mettre comme passerelle à ces clients l'IP eth1 de notre routeur et ceux-ci aurons accès aux autres réseaux !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.

Nombre de posts de cet auteur : 521.Voir tous les posts

12 thoughts on “Configurer un routeur sous Linux

  • bonjour,
    Dans votre tutoriel il y a une commande qui n’est pas a jour, elle échoue a chaque fois.
    Commande fausse:
    iptables -t nat POSTROUTING -o eth0 -j MASQUERADE

    Commande corrigé:
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    A faire attention.
    Cordialement POLLOSSE Jonathan

    Répondre
    • Exacte, je corrige cela de suite. Merci pour votre contribution !

      Répondre
  • Bonjour

    Votre doc est bien faite je l’ai suivie pour faire un routeur sous Debian Squize.Tout fonctionne bien du réseau interne vers l’externe, mais de l’exteriieur je n’arrive pas à pinger le router.

    Peut-être y a t’il une config supplémentaire pour cela.

    Merci pour votre réponse.

    Répondre
  • j ai une question, meme si je suis un débutant, moi personnellement j ai une carte wifi alfa brancher à R36 repetiteur avec un port usb, ma question est ce je peux brancher ma clé wifi à un routeur simple muni de port usb et le flaschant avec firmeware open source

    Répondre
  • Bonjour, je suis à la recherche de comment configurer un point d’accès wifi Dlink 2360 sous debian et d’après votre tutoriel j’aimerais bien savoir si vous pouviez me guider un peu.
    Merci,
    Cdt.

    Répondre
  • Baaaaaaaaah, faites nous un p’tit tutoriel sur VyOS, c’est plus sympa 🙂

    Répondre
  • BONjour; je suis une débutante avec les systèmes linux.je veux configurer un serveur NAT sous le système d’ubuntu sur vmware .j’ai un problème en est que je sais pas quelle adresse IP devrais -je donner à l’interfaces WAN .please help me!!!

    Répondre
  • Bonjour,
    pour l’automatisation, est il possible de faire un apt-get install iptables-persistent ? ou votre proposition est la plus adapté ?

    Répondre
  • Super tuto, tout fonctionne, simple question si l’on veut que nos machines aient accès au net, comment doit-on procéder ?

    Répondre
  • salut à tous
    quand je fais la totalité des commandes et que je restart
    ca me mets « networking.servicejob for networking.service failed because the control process exited with error code  »
    alors que tout semble avoir été fait normalement lors du tuto

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.