Routage par la source

De Wiki doc


Le routage par la source ou policy based routing (PBR) est une méthode de routage exploitant le champ source des paquets IP plutôt que le champ destination. L'intérêt d'une telle chose est de pouvoir, en la présence de plusieurs liens WAN, router les clients venants de tel réseau vers tel lien de sorte à rationaliser la bande passante en fonction de l'usage ou, par exemple, d'apporter des fonctionnalités supplémentaires en donnant accès ou non à un VPN à certains réseaux.

Cette technique est utilisée dans notre passerelle mutipath TCP pour exploiter la connectivité de deux liens Internet.

Postulat

Si vous avez un LAN A qui fait du transfert de fichiers H24 vers Internet ayant besoin d'une bande passante feux patate et un LAN B destiné à des clients domestiques voulant une latence faible et un débit convenable (surf, jeux, VOIP...), et que vous avez deux liens (un ADSL et un 4G par exemple) il peut être intéressant de router les paquets du LAN A vers la 4G et ceux du LAN B vers l'ADSL (oui en campagne on a pas la fibre... #galérien).

Disons que nous avons une configuration comme ceci:

  • LAN_A: [192.168.8.0/24]
  • LAN_B: [192.168.100.0/24]
  • WAN_A: [1.1.1.0/30]
  • WAN_B: [2.2.2.0/30]
  • PC-WAN_A: [192.168.9.0/24]
  • PC-WAN_B: [192.168.101.0/24]


LAN_A -----------------------+___+----------------------- WAN_A --- PC-WAN_A
                             |R1 |
LAN_B -----------------------+___+----------------------- LAN_B --- PC-WAN_B

Mise en place

Le PBR fonctionne avec des tables de règles à configurer directement dans iproute2. La configuration suivante va router le LAN A vers le WAN A ainsi que le LAN B vers le WAN B.

# Création des tables de règles de routage
ip rule add from 192.168.8.0/24 table 1
ip rule add from 192.168.100/24 table 2

# Ajout des routes directement connectés aux tables
ip route add 192.168.8.0/24 dev eth0 scope link table 1
ip route add 192.168.100.0/24 dev eth1 scope link table 2

# Ajout d'une route par défaut à chaque table
ip route add default via 1.1.1.2 dev eth2 table 1
ip route add default via 2.2.2.2 dev eth3 table 2

# Ajout de la route par défaut globale de la table de routage
ip route add default scope global nexthop via 1.1.1.2 dev eth2 weight 1 nexthop via 2.2.2.2 dev eth3 weight 1

Note: la route par défaut globale permet au routeur lui-même de pouvoir communiquer avec son interface WAN, sinon il est obligatoire de préciser une des deux interfaces LAN pour rentrer dans les règles et ainsi utiliser une des deux routes par défaut (autant dire qu'en dehors du ping ça ne va pas bien fonctionner...).

ASTUCE

La route par défaut définit avec le paramètre weight permet de faire de la répartition de charge automatique entre les deux accès Internet. L'intérêt est surtout qu'en cas de coupure du WAN_A, le routeur puisse toujours être accessible via le deuxième lien (vu que sinon on est obligé d'utiliser une seul route par défaut). Cette astuce a été trouvé ici et n'est pas parfaite (vous en constaterez les déboires je pense...).

Rien de bien déroutant si je puis dire xD.

Pour lister les règles, un ip rule list fait l'affaire, la suppression utilise le traditionnel del en lieu et place du add dans la syntaxe des commandes ip. Enfin, pour afficher le contenu d'une règle, il faut faire la commande ip r show table <ID_TABLE>.

Sources