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
Quanto sopra non richiede alcuna marcatura dei pacchetti con ipfilter. Funziona perché i pacchetti in uscita (di risposta) avranno l'indirizzo IP originariamente utilizzato per connettersi alla seconda interfaccia come indirizzo di origine (da) sul pacchetto in uscita.
I seguenti comandi creano una tabella di instradamento alternativa tramite eth1
per i pacchetti che hanno il contrassegno 1 (eccetto i pacchetti per localhost). Il ip
il comando proviene dalla suite iproute2 (Ubuntu:iproute Installa iproute http://bit.ly/software-small, iproute-doc Installa 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'altra metà del lavoro consiste nel riconoscere i pacchetti che devono ottenere il contrassegno 1; quindi usa iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
su questi pacchetti per farli instradare attraverso la tabella di instradamento 1. Penso che dovrebbe farlo quanto segue (sostituire 1.2.3.4 con l'indirizzo dell'interfaccia non-default-route):
iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1
Non sono sicuro che sia sufficiente, forse è necessaria un'altra regola sui pacchetti in arrivo per dire al modulo conntrack di tracciarli.
Ho avuto problemi con i pacchetti generati localmente con la soluzione suggerita da Peter, ho scoperto che quanto segue lo corregge:
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
NOTA: Potresti incorrere in problemi di sintassi con la quarta riga sopra. In questi casi la sintassi per il 4° comando potrebbe essere questa:
ip rule add iif <interface> table isp2 priority 1000