Делал примерно так: (в начале прописываются таблицы T1 и T2 в /etc/iproute2/rt_tables)
Переменные -
LOCAL=локальная сеть
LOCAL_GW=IP в локальной сети
LOCAL_ETH=Локальный интерфейс
I1_ETH/I1_GW/I1_IP - интерфейс, шлюз и IP на интерфейсе
Аналогично для 2-го.
Выдирал из рабочего скрипта (4 таблица сейчас ;) ) - может чего и упустил. :)
ip route flush table T1 #обнуляем первую таблицу маршрутов
ip route flush table T2 #обнуляем вторую таблицу маршрутов
ip rule delete table T1 #удаляем наши таблицы, если они присутствуют в текущей конфигурации (вдруг мы просто перезапускаем скрипт?)
ip rule delete table T2 #аналогично для второй.
ip rule add from $I1_IP table T1
ip route add $LOCAL src $LOCAL_GW dev $LOCAL_ETH table T1
ip route add default via $I1_GW table T1 metric 1000
ip route add default via $I2_GW table T1 metric 1200
ip rule add fwmark 1 table T1 #все пакеты, которые имеют метку 1 маршрутизировать по таблице T1
ip rule add from $I2_IP table T2
ip route add $LOCAL src $LOCAL_GW dev $LOCAL_ETH table T2
ip route add default via $I2_GW table T2 metric 1000
ip route add default via $I1_GW table T2 metric 1200
ip rule add fwmark 2 table T2 #все пакеты, которые имеют метку 2 маршрутизировать по таблицу T2
iptables -t mangle -N I2_RULE
iptables -t mangle -A I2_RULE -i $I1_ETH -j CONNMARK --set-mark 1
iptables -t mangle -A I2_RULE -i $I2_ETH -j CONNMARK --set-mark 2
iptables -t mangle -A FORWARD -m state --state NEW -j I2_RULE
iptables -t mangle -A PREROUTING -m state --state ESTABLISHED -j CONNMARK --restore-mark