Le document de référence pour le routage avancé de Linux est le LARTC-HOWTO (Linux Advanced Routing and Traffic Control), avec les pages de manuel de ip route
(man ip-route
) et ip rule
(man ip-rule
).
Le routage normal ne se base que sur le préfixe de l’adresse de destination. Mais quand on veut envoyer des paquets à destination d’adresses d’un même préfixe par des interfaces différentes, cela ne suffit pas. Le routage avancé permet d’utiliser d’autres clés comme le préfixe de l’adresse source, l’interface d’entrée, ou une marque appliquée par netfilter dans les cas les plus complexes.
Le principe est le suivant : on crée une règle de routage avec ip rule
spécifiant la ou les clés de routage et la table de routage à appliquer, et on crée les routes souhaitées avec ip route
dans cette table de routage.
Dans ton cas, les paquets provenant du VPN sont faciles à identifier, soit par l’interface d’entrée tun0, soit par le préfixe de l’adresse IP source.
Il faut faire attention aux paquets générés localement dont l’interface d’entrée est vue comme « lo » (interface de loopback) et l’adresse source n’est pas forcément définie (elle ne le sera qu’après la décision de routage), ainsi qu’aux paquets correspondant à la clé mais à destination d’un réseau autre qu’internet. Il peut être nécessaire d’ajouter des règles ou des routes pour les router correctement.