Enam tahun kemudian saya sampai pada pertanyaan ini dan hampir mengecewakannya berdasarkan jawaban yang diterima. Sampai hari ini, tidak rumit, menggunakan perutean kebijakan. Semua detail tersedia di situs yang sama ini, di https://serverfault.com/a/389004/70774.
Dalam kasus saya, pertama-tama saya harus memastikan bahwa vpn bukanlah rute default. Cara Anda mencapainya bergantung pada jenis pengelola koneksi yang Anda gunakan.
Proksi (tinyproxy) berjalan dengan penggunanya sendiri, jadi saya menandai semua paket yang berasal dari pengguna ini dengan perintah
iptables -t mangle -A OUTPUT -m owner --uid-owner 125 -j MARK --set-mark 2
di mana 125
adalah uid dari pengguna tinyproxy dan 2
adalah nomor arbitrer, untuk dicocokkan nanti.
Kemudian saya menginstruksikan sistem perutean untuk menggunakan tabel khusus untuk merutekan semua permintaan yang ditandai dengan 2
.
ip rule add fwmark 2 table 3
Sekali lagi, 3
hanyalah angka arbitrer. Berdoa saja untuk memilih meja yang tidak terpakai (lihat saja apakah ada sesuatu di meja yang Anda pilih dengan ip route list table 3
).
Kemudian saya mengisi tabel 3
dengan rute default saya:
ip route add default dev ppp0 via proto static scope link metric 1024
Langkah terakhir adalah membuat aturan penyamaran, yang saya tidak sepenuhnya mengerti perlunya:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Et voila!