Dans cet article je vais traiter de port forwarding de ports externes de différentes box (ou différent routeurs) vers la même interface réseau (même carte réseau) d’une machine. C’est une configuration réseau à laquelle on pense lorsque l’on souhaite mettre en place un routeur d’entreprise central qui exploite plusieurs accès internet, mais c’est bien plus compliqué que le port forwarding simple. Tous les exemples de commande utilisent Linux comme référence, mais le principe est transposable à d’autres OS.

Port forwarding d’un jour, port forwarding toujours

Le port forwarding avec un routeur, c’est facile

Le port forwarding tel qu’on l’entend usuellement est plutôt simple à mettre en place. Lorsqu’on utilise un routeur ou une box pour mutualiser un accès internet sur un réseau interne, on pratique ce qu’on appelle le NAT (network address translation) ce qui fait que tous les membres du réseau vont utiliser la même adresse IP externe sur internet. Pour rediriger les connexions entrantes, c’est le chemin inverse qu’il faut mettre en place à l’aide du port forwarding. Cette technique va permettre de déterminer quel membre du réseau interne doit recevoir le trafic externe entrant sur tel ou tel port.

Tous les routeurs et toutes les box proposent un réglage de port forwarding, ou redirection de ports en français. Les masques de saisie requièrent les paramètres suivants :

  • Port externe à l’écoute (ou plage de ports).
  • Port interne sur lequel le membre du réseau interne doit réceptionner le trafic réseau.
  • Adresse IP (ou plus rarement adresse MAC) du membre du réseau qui doit réceptionner le trafic.
  • Protocole TCP ou UDP.

Avec plusieurs routeurs, c’est pas facile !

Et là on se dit : « chic j’ai compris le port forwarding, je vais configurer plusieurs routeurs pour forwarder vers la même adresse IP !« . Hélas le malheureux que vous êtes ne tardera pas à comprendre sa douleur en constatant péniblement que sans une configuration réseau avancée, il est impossible de faire fonctionner le port forwarding depuis plusieurs routeurs vers la même interface en même temps.

Impossible… mais possible quand même. Pour ce faire, il faut avoir une compréhension globale du réseau et particulièrement de l’ensemble routeur-hôte interne. Il serait faux de croire que le port forwarding est une affaire qui se traite uniquement sur le panneau de configuration du routeur, il faut également que la configuration réseau de l’hôte interne s’y prête.

Et là vous vous dites « pour connecter un hôte interne à internet, il utilise le routeur en tant que passerelle, c’est facile !« . Bah oui, pour sortir sur internet il faut nécessairement renseigner la passerelle qui sera capable de faire le NAT pour vous, de vous prêter son IP externe pour aller vous balader sur internet.

Et pour rediriger des ports depuis plusieurs routeurs, c’est bien simple, il faut que tous les routeurs soient renseignés en tant que passerelle sur votre interface réseau !

Plusieurs passerelles sur une seule interface réseau ? Mais je n’ai qu’un seul champ de passerelle sur mon OS !

Configuration des tables de routage sous Linux

Ça y est on entre dans le vif du sujet, de longs extraits de ligne de commande colorisés en guise d’illustrations. J’espère que vous avez des connaissances en administration Linux parce que sinon les yeux risquent de piquer.

Petit rappel avec un seul routeur

Lorsque vous avez connecté un ordinateur sous Linux à internet, c’est le schéma le plus simple que nous allons exposer ici avec la commande route .

Il y a deux lignes d’information, la première indique que pour joindre 0.0.0.0/0 (toute adresse IP externe) on doit utiliser la passerelle 192.168.0.254, c’est l’adresse IP de mon routeur. La seconde ligne indique que pour joindre 192.168.0.0/24 la passerelle est 0.0.0.0, comprendre ici « absence de passerelle »,  la communication avec les adresses interne se fait en direct sur le réseau interne via les switchs.

Voici une autre façon d’afficher la même chose avec la commande ip. On demande ici d’afficher le contenu de la table de routage main , qui est la seule dans une configuration réseau classique. Ce ne sera pas toujours le cas.

Mise en place de plusieurs passerelles sur une même interface réseau

Tout d’abord, on retire la passerelle actuelle afin d’établie de nouvelles règles pour les passerelles. Dans la commande qui suit, le terme default  signifie 0.0.0.0/0

Toujours dans l’idée d’affecter plusieurs passerelle à la même interface réseau qui utilise une même IP, nous allons utiliser des tables de routage à raison d’une table par routeur. Pour cela, la première étape est de définir nos tables dans le fichier rt_tables . Ici on s’est contenté de rajouter trois lignes pour table1, table2 et table3.

Ensuite, on va définir une passerelle par table de routage. Les adresses 192.168.0.254, 192.168.0.253, 192.168.0.252 sont ici les adresses de trois routeurs différents.

Pour chaque routeur on a maintenant une table, et on va également créer une adresse IP interne par routeur. Ici les adresses 192.168.0.1, 192.168.0.2 et 192.168.0.3 sont mes adresses IP qui se rattachent à la même interface réseau.

Il faut maintenant faire la correspondance entre une adresse IP interne et un routeur.

Et pour finir, on crée la passerelle pour l’ordinateur. On ne définit ici qu’une passerelle, c’est le routeur qui sera utilisé en sortie. Mais toute notre configuration réseau permettra à l’ordinateur de réceptionner du trafic extérieur par le port forwarding configurés sur nos trois routeur.

En bonus, une commande alternative qui est hors-sujet dans le cadre de cet article, mais plutôt intéressante. Elle permet d’utiliser les trois passerelles simultanément, en affectant les connexions réseau tour à tour à une passerelle, puis à une autre et ainsi de suite. Le poids est ici réglé à 1 partout mais on pourrait privilégier une connexion par rapport aux autres en modifiant le poids. Cette méthode d’agrégation de liens ADSL n’est pas très satisfaisante car une même connexion réseau (TCP par exemple) ne pourra jamais exploiter qu’une box à la fois. Le cache des routes réseau fixera de manière quasi-définitive l’utilisation d’une box pour joindre une adresse IP distante. Dans ces conditions le surf sur des pages internet est accéléré, mais on rencontre parfois des petits bugs. Le meilleur usage possible est probablement Bittorrent qui sait exploiter tout le débit des trois connexions internet simultanées. Vous allez pouvoir télécharger vos images de Debian plus rapidement !

La purge du cache des routes réseau n’a jamais fait de mal à personne.

 

On dirait bien que c’est fini. Toute cette mise en œuvre doit s’accompagner d’un port forwarding configuré sur chaque routeur. Le routeur 192.168.0.254 devra pointer vers 192.168.0.1, le routeur 192.168.0.253 vers 192.168.0.2 et le routeur 192.168.0.252 vers 192.168.0.3.