Routage sélectif vers plusieurs connexions internet

From Le Wiki de debian-fr.xyz
Revision as of 10:52, 12 May 2010 by Syam (talk | contribs) (sauvegarde temporaire)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

On dispose de plusieurs accès internet distincts, et l'on souhaite pouvoir rediriger (re-router) arbitrairement certaines connexions réseau vers l'un ou l'autre de ces accès.

Autrement dit, nous allons gérer de manière sélective le load-balancing et, dans une moindre mesure le fail-over, entre plusieurs accès à internet. Comme nous le verrons par la suite, les critères déterminant quelle connexion doit utiliser quel accès ne sont qu'une toute petite partie du problème.


Ces accès internet peuvent prendre de nombreuses formes : ADSL, fibre optique, Wifi, modem, tunnel IP, PPP, VPN, ...

De manière générale on se trouve face à deux cas distincts :

  • Une seule passerelle internet est accessible via une interface réseau donnée.
  • Plusieurs passerelles internet sont accessibles via une même interface réseau donnée.

Pour que ce tutoriel fonctionne, on s'intéressera uniquement au premier cas. Autrement dit, on appliquera systématiquement la règle « 1 interface réseau = 1 passerelle = 1 accès internet », sachant que la notion d'interface réseau correspond à la vue fournie par la commande # ip address plutôt que # ifconfig (qui a le défaut d'afficher des doublons lorsqu'une interface dispose de plusieurs adresses IP).
Si une interface donnée permet l'accès à plusieurs passerelles, il faudra malheureusement faire un choix pour n'en utiliser qu'une seule.


On utilisera la combinaison d'outils suivante :

  • Marquage de paquets (iptables -j MARK) pour déterminer quelle connexions réseau nous devons traiter.
  • Marquage de connexions (iptables -j CONNMARK) pour gérer l'affinité d'une connexion avec un accès donné.
  • Tables de routage (iproute2) pour router les connexions vers l'une ou l'autre passerelle.
  • Translation NAT (iptables -j SNAT) pour assurer le transit correct des paquets re-routés.


Note : un récapitulatif [TODO: lien] est disponible à la fin de ce document, qui résume toutes les commandes nécessaires à la création des diverses règles. Il n'est donc pas utile (et même contre-indiqué) de saisir les commandes au fil du tutoriel. Que cela ne vous empêche pas de lire les explications, leur compréhension est nécessaire pour vous éviter de faire des bêtises !

Sachez que si vous vous retrouvez sans connexion internet (c'est ce qui peut arriver quand on joue n'importe comment avec les tables de routage) et sans savoir comment réparer la situation, un simple reboot de votre machine suffira à rétablir votre configuration d'origine.


Obtenir de l'aide

Ce tutoriel était à l'origine un T&A sur le forum debian-fr.org. Étant donné l'ampleur que ce document a pris, il m'est difficile de maintenir une version équivalente sur le forum en ne disposant que de BBCode.

Cependant, le fil de discussion associé est toujours d'actualité pour la partie support. N'hésitez pas à y poser vos questions ou à partager vos trucs et astuces !

Avertissement

Le sujet traité serait assez complexe si l'on voulait être complet, je me suis donc permis de prendre des raccourcis au niveau des explications pour simplifier certains concepts. Si vous souhaitez faire des remarques concernant certains points traités un peu trop vite et/ou de manière peu précise, demandez-vous simplement auparavant s'il ne s'agit pas d'une vulgarisation ou généralisation, et si un utilisateur lambda a réellement besoin de faire la distinction aussi finement. Ça évitera les discussions sans fin alors que nous sommes probablement d'accord... Mais que ça ne vous empêche pas de demander des précisions si quelque chose ne vous paraît pas clair !

En cours de réalisation...

TODO