echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 prio 1
ip route add default via <gateway_IP> dev <interface> table isp2
Di atas tidak memerlukan penandaan paket dengan ipfilter. Ini berfungsi karena paket keluar (balasan) akan memiliki alamat IP yang awalnya digunakan untuk terhubung ke antarmuka ke-2 sebagai alamat sumber (dari) pada paket keluar.
Perintah berikut membuat tabel perutean alternatif melalui eth1
untuk paket yang bertanda 1 (kecuali paket ke localhost). ip
perintah dari iproute2 suite (Ubuntu:iproute Install iproute http://bit.ly/software-small, iproute-doc Install iproute-doc http://bit.ly/software-small).
ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth1
Separuh pekerjaan lainnya adalah mengenali paket yang harus mendapatkan tanda 1; lalu gunakan iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
pada paket-paket ini untuk mengarahkannya melalui tabel perutean 1. Saya pikir yang berikut harus melakukannya (ganti 1.2.3.4 dengan alamat antarmuka rute non-default):
iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1
Saya tidak yakin apakah itu cukup, mungkin diperlukan aturan lain pada paket yang masuk untuk memberi tahu modul conntrack untuk melacaknya.
Saya memiliki masalah dengan paket yang dihasilkan secara lokal dengan solusi yang disarankan oleh Peter, saya telah menemukan bahwa yang berikut ini memperbaikinya:
echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 priority 900
ip rule add from dev <interface> table isp2 priority 1000
ip route add default via <gateway_IP> dev <interface> table isp2
ip route add <interface_prefix> dev <interface> proto static scope link src <interface_IP> table isp2
CATATAN: Anda mungkin mengalami masalah sintaks dengan baris ke-4 di atas. Dalam kasus seperti itu, sintaks untuk perintah ke-4 mungkin seperti ini sekarang:
ip rule add iif <interface> table isp2 priority 1000