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
Výše uvedené nevyžaduje žádné označování paketů pomocí ipfilter. Funguje to proto, že odchozí (odpovědní) pakety budou mít jako zdrojovou (od) adresu na odchozím paketu IP adresu, která byla původně použita pro připojení k 2. rozhraní.
Následující příkazy vytvoří alternativní směrovací tabulku pomocí eth1
pro pakety, které mají značku 1 (kromě paketů na localhost). ip
příkaz je ze sady iproute2 (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
Druhá polovina práce je rozpoznávání paketů, které musí dostat značku 1; pak použijte iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
na těchto paketech, aby byly směrovány přes směrovací tabulku 1. Myslím, že by to mělo udělat následující (nahradit 1.2.3.4 adresou rozhraní, které není výchozím směrováním):
iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1
Nejsem si jistý, jestli to stačí, možná je potřeba další pravidlo pro příchozí pakety, které řekne modulu conntrack, aby je sledoval.
Měl jsem problémy s lokálně generovanými pakety s řešením navrženým Petrem, zjistil jsem, že to opravuje následující:
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
POZNÁMKA: U čtvrtého řádku výše můžete narazit na problémy se syntaxí. V takových případech může být syntaxe 4. příkazu nyní tato:
ip rule add iif <interface> table isp2 priority 1000