Sechs Jahre später kam ich zu dieser Frage und ließ sie aufgrund der akzeptierten Antwort fast im Stich. Ab heute ist es nicht kompliziert, das Policy-Routing zu verwenden. Alle Details sind auf derselben Website unter https://serverfault.com/a/389004/70774 verfügbar.
In meinem Fall musste ich zuerst sicherstellen, dass das VPN nicht die Standardroute war. Wie Sie dies erreichen, hängt davon ab, welche Art von Verbindungsmanager Sie verwenden.
Der Proxy (tinyproxy) läuft mit einem eigenen Benutzer, also markiere ich alle Pakete, die von diesem Benutzer kommen, mit dem Befehl
iptables -t mangle -A OUTPUT -m owner --uid-owner 125 -j MARK --set-mark 2
wobei 125
ist die UID des Benutzers tinyproxy und 2
ist eine beliebige Zahl, die später abgeglichen werden soll.
Dann weise ich das Routingsystem an, alle mit 2
gekennzeichneten Anfragen anhand einer bestimmten Tabelle weiterzuleiten .
ip rule add fwmark 2 table 3
Wieder die 3
ist nur eine willkürliche Zahl. Bitte achten Sie darauf, einen unbenutzten Tisch auszuwählen (sehen Sie einfach, ob etwas auf dem Tisch liegt, und wählen Sie mit ip route list table 3
).
Dann fülle ich die Tabelle 3
mit meiner Standardroute:
ip route add default dev ppp0 via proto static scope link metric 1024
Der letzte Schritt bestand darin, eine Maskierungsregel zu erstellen, deren Notwendigkeit ich nicht ganz verstehe:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Et voilà!