Six ans plus tard, je suis venu à cette question et je l'ai presque abandonnée en me basant sur la réponse acceptée. À ce jour, ce n'est pas compliqué d'utiliser le routage par stratégie. Tous les détails sont disponibles sur ce même site, à l'adresse https://serverfault.com/a/389004/70774.
Dans mon cas, je devais d'abord m'assurer que le vpn n'était pas la route par défaut. La manière dont vous y parviendrez dépend du type de gestionnaire de connexions que vous utilisez.
Le proxy (tinyproxy) fonctionne avec son propre utilisateur, donc je marque tous les packages provenant de cet utilisateur avec la commande
iptables -t mangle -A OUTPUT -m owner --uid-owner 125 -j MARK --set-mark 2
où 125
est l'uid de l'utilisateur tinyproxy et 2
est un nombre arbitraire, à faire correspondre plus tard.
Ensuite, j'ordonne au système de routage d'utiliser une table spécifique pour router toutes les requêtes marquées de 2
.
ip rule add fwmark 2 table 3
Encore une fois, le 3
n'est qu'un nombre arbitraire. Faites juste attention à choisir une table inutilisée (voyez juste s'il y a quelque chose sur la table avec vous choisissez avec ip route list table 3
).
Puis je remplis la table 3
avec ma route par défaut :
ip route add default dev ppp0 via proto static scope link metric 1024
La dernière étape consistait à créer une règle de masquage, dont je ne comprends pas entièrement la nécessité :
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Et voilà !