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
Ce qui précède ne nécessite aucun marquage de paquet avec ipfilter. Cela fonctionne parce que les paquets sortants (réponse) auront l'adresse IP qui a été utilisée à l'origine pour se connecter à la 2ème interface comme adresse source (de) sur le paquet sortant.
Les commandes suivantes créent une table de routage alternative via eth1
pour les paquets portant la marque 1 (sauf les paquets vers localhost). Le ip
La commande provient de la suite 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
L'autre moitié du travail consiste à reconnaître les paquets qui doivent obtenir la note 1 ; puis utilisez iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
sur ces paquets pour les faire acheminer via la table de routage 1. Je pense que ce qui suit devrait le faire (remplacez 1.2.3.4 par l'adresse de l'interface non-default-route):
iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1
Je ne sais pas si cela suffit, peut-être qu'une autre règle est nécessaire sur les paquets entrants pour indiquer au module conntrack de les suivre.
J'ai eu des problèmes avec les paquets générés localement avec la solution suggérée par Peter, j'ai trouvé que ce qui suit corrige cela :
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
REMARQUE : Vous pouvez rencontrer des problèmes de syntaxe avec la 4ème ligne ci-dessus. Dans de tels cas, la syntaxe de la 4ème commande peut être celle-ci :
ip rule add iif <interface> table isp2 priority 1000