Le blog de Dju - Mot-clé - routageUn peu de moto, un zeste de geek, et un brin d'autres trucs ;-)2024-03-22T17:50:26+01:00Djuurn:md5:5e61426dd704534f4aef077f5b82260bDotclearPlusieurs connections internet sur un routeururn:md5:9e880c6ec5818bd3781e90171c904b472010-04-17T11:30:00+02:002010-04-22T01:11:14+02:00DjuServeurfirewallip routeip ruleiptablesroutagerouterouteur<p><img src="https://blog.crifo.org/public/201004/.reseaux-informatique_t.jpg" alt="reseaux-informatique.jpg" style="float:left; margin: 0 1em 1em 0;" title="reseaux-informatique.jpg, avr. 2010" />
Un petit reminder pour indiquer comment gérer plusieurs connection internet à partir d'un seul routeur, sous debian, en fonction de la source.<br />
On va pour cela faire joujou avec <strong>ip route</strong> et <strong>ip rule</strong></p> <p><br />
<br />
Notre routeur a 3 interfaces réseau :<br />
- eth0 pour le réseau local, configurée en 192.168.1.1 avec un masque à 255.255.255.0 (ou 192.168.1.0/24)<br />
- eth1: la première connexion internet, ADSL, en 1.2.3.4, avec une passerelle en 1.2.3.1<br />
- eth2: une 2è connexion internet par fibre optique, plus rapide que l'ADSL, en 2.3.4.5 avec une passerelle en 2.3.4.1</p>
<p>On a défini initialement une route par défaut pour faire sortir toutes les données par eth1 :</p>
<blockquote><p>route add default gw 1.2.3.1 dev eth1<br /></p></blockquote>
<p>(ou avec la commande ip route)</p>
<blockquote><p>ip route add default via 1.2.3.1 dev eth1</p></blockquote>
<p>dans notre script de firewall, on a une règle de nat en sortie, de type postrouting, dans ce genre :</p>
<blockquote><p>iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 1.2.3.4</p></blockquote>
<p>Ainsi toutes les connexions sortantes passent par cette 1è connexion internet.</p>
<p>Mettons maintenant qu'on a 2 geeks/gamers/téléchargeurs fous (rayer la mention inutile) qui ont un gros besoin de bande passante, et que l'on veut faire sortir par fibre optique sur eth2.<br />
Pour ce faire on va définir une table de routage, dans laquelle on va définir une route par défaut en eth2, et enfin associer quelques ip internes à cette table.</p>
<p>On commence par créer la table, en éditant le fichier <strong>/etc/iproute2/rt_tables</strong>.<br />
le fichier se présente en 2 colonnes, la 1è indiquant le numéro de tables, et la 2è son nom.</p>
<pre>
255 local
254 main
253 default
0 unspec
</pre>
<p>On ne touche pas à celles déjà existantes et on en créé une nouvelle, dont le numéro peut être entre 1 et 252, que l'on va appeler "fibre"</p>
<blockquote><p>echo 20 fibre >> /etc/iproute2/rt_tables</p></blockquote>
<p>on ajoute maintenant dans cette table la route vers eth2</p>
<blockquote><p>ip route add default via 2.3.4.1 dev eth2 table fibre</p></blockquote>
<p>puis on associe nos utilisateurs à cette table :</p>
<blockquote><p>ip rule add from 192.168.1.10 table fibre<br />
ip rule add from 192.168.1.11 table fibre</p></blockquote>
<p>et on n'oublie surtout pas d'ajouter une règle iptables pour la sortie sur eth2 :</p>
<blockquote><p>iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 2.3.4.5</p></blockquote>
<p>dorénavant, depuis une des 2 ips en .10 ou .11, on sortira par eth2, et sinon par défaut par eth1 <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /></p>
<p>par la suite, si on souhaite automatiser cela afin de configurer ces routes lorsqu'on lance notre script de firewall peut mettre ceci dans un fichier routes.sh :</p>
<pre>
#!/bin/bash
ip route flush table fibre
ip route add default via 2.3.4.1 dev eth2 table fibre
ip rule add from 192.168.1.10 table fibre
ip rule add from 192.168.1.11 table fibre
</pre>
<p>et on appelle ce fichier routes.sh dans le script du firewall <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /></p>
<p>ha.... Un dernier détail qui peut vous faire perdre du temps</p>
<p>Si sur votre routeur, vous n'avez qu'un seul réseau local (ici le 192.168.1.0/24) pas de problème.<br />
Supposons maintenant que vous ayez un 2è réseau local, en 192.168.2.0/24, sur une interface eth3, et qu'il est censé communiquer avec 192.168.1.0/24<br />
Le firewall est configuré pour, mais Il faut alors, dans notre table fibre rajouter une route prioritaire vers ce réseau. sinon toutes les connection autres qu'en 192.168.1.0/24 partiront par eth2 :p <br />
Donc si on reprend notre exemple ci dessus avec le fichier fibre.sh on aura :</p>
<pre>
ip route flush table fibre
ip route add prio 1 to 192.168.2.0/24 dev eth3 table fibre
ip route add prio 2 default via 2.3.4.1 dev eth2 table fibre
ip rule add from 192.168.1.10 table fibre
ip rule add from 192.168.1.11 table fibre
</pre>
<p>si on souhaite router un sous réseau entier vers une connection, on peut bien sur faire</p>
<blockquote><p>ip rule add from 192.168.2.0/24 table fibre</p></blockquote>
<p>ce qui fera sortir tout le sous réseau 192.168.2.0/24 par la fibre sur l'interface eth2<br />
Et ainsi de suite...</p>
<p>Et une dernière possibilité pour les maniaques du gros débit : faire du load balancing sur les 2 connexions sortantes simultanément.<br />
Au lieu de se créer une table de routage associée à certaines ip internes, on définit une route par défaut ainsi :</p>
<blockquote><p>ip route add default scope global nexthop via 1.2.3.1 dev eth1 weight 1 nexthop via 2.3.4.1 dev eth2 weight 1 <br /></p></blockquote>
<p>Tout se joue avec le paramètre weight. Ici j'ai un poids de 1 à chacune pour équilibrer.
Mais dans la mesure ou la fibre optique est plus rapide, on pourrait faire passer plus de données par la fibre, en mettant un poids de 2:</p>
<blockquote><p>ip route add default scope global nexthop via 1.2.3.1 dev eth1 weight 1 nexthop via 2.3.4.1 dev eth2 weight 2 <br /></p></blockquote>
<p>On aura de cette manières 2 connexions sortante par eth2 pour 1 sortant par eth1</p>
<p>Amusez vous bien :D</p>https://blog.crifo.org/post/2010/04/17/Plusieurs-connections-internet-sur-un-routeur#comment-formhttps://blog.crifo.org/feed/atom/comments/48