Suite à une question posée sur le routage en fonction du port de destination, je me suis demandé comment il était possible de mettre cela en œuvre sous linux.
Le principe fonctionne aussi bien avec une configuration ou les cartes réseaux seraient chacune branchées directement sur un modem ou sur une "BOX" machin qui fait du office de modem + routeur + switch + + +.
La "difficulté" de ce genre de configuration étant de devoir "gérer" deux passerelles par défaut.
Imaginons un pc avec deux connexions internet :
eth0 - Connexion réservée à tout le trafic
eth1 - Connexion réservée à tout le trafic web ( port 80 ) et mail ( port 25, 110 ).
Assumons que chaque carte réseau possède une machin box, le plus simple sera de laisser la configuration se faire tout seule sur la connexion qui va prendre en charge la plus grande majorité des protocoles différents et de configurer manuellement la seconde ( pour récupérer les paramètres de la seconde carte, un simple ifconfig fera l'affaire )
1 - On commence par configurer les deux interfaces réseaux
1 2
| dhclient eth0
ifconfig eth1 192.168.1.254/24 |
2 - On crée un nouvelle table de routage
Pour ce faire, il faut la rajouter à la main dans /etc/iproute2/rt_tables
echo -e "200 \t secondaire" >> /etc/iproute2/rt_tables
200 étant le numéro de la table et secondaire le nom que l'on lui donne.
3 - On ajoute la passerelle par défaut de cette nouvelle table de routage
1 2 3
|
ip route add 10.10.10.0/24 dev eth1 table 200
ip route add default via 192.168.1.1 table 200 |
Ce 192.168.1.1 doit être l'adresse de la "machin box" branchée sur la carte eth1 et doit obligatoirement être dans le même réseau que l'adresse de eth1 ( 192.168.1.X )
4 - On va "tagger" le traffic qui sort pour le mettre dans la bonne table de routage
1 2 3 4 5 6 7
|
# Pour le web
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 72
# Pour l'envoi de courrier
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 72
# Pour la réception de courier
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 72 |
On va utiliser la table mangle qui permet de modifier le trafic et la table output qui intervient avant le processus de routage mais il faut toutefois noter que ce marquage contrairement à TOS/DSP ne modifie pas le paquet et n'est utiliser qu'en "interne".
Ainsi donc nos trois type de trafics seront tagués "72"
5 - On va associer ce traffic "marqué" avec la route a prendre
1 2
|
ip rule add fwmark 72 table 200 |
L'exemple fonctionne sous linux, mais le principe devrait être le même sur les autre OS : BSD, Windows, MAC
Partager