Дохренища текста покотцано. Давай рассматривать первый вариант.
вариант с балансировкой
#!/bin/sh
echo "Balancing 2 ISP start...."
# Описываем переменные, используемые в скрипте
IP_LOCAL1="192.168.0.1" # адрес нашего маршрутизатора в локальной сети.
IP_INET1="217.15.26.98" # адрес нашего маршрутизатора в сети Futers.
IP_INET2="192.168.1.3" # адрес нашего марщрутизатора в сети WebPlus.
IF_LOCAL1="eth2" # имя интерфейса на локальную сеть
IF_INET1="eth0" # имя интерфейса на Futers.
IF_INET2="eth3" # имя интерфейса на WebPlus.
NET_LOCAL1="192.168.0.0/24" # локальная сеть.
NET_INET1="217.15.26.0/30" # адрес сети в которой гейт Futers'а
NET_INET2="192.168.1.0/24" # адрес сети в которой гейт WebPlus'а(а точнее Dlink-роутер).
GW_INET1="217.15.26.97" # гейт Futers.
GW_INET2="192.168.1.1" # гейт WebPlus.
# Затираем все маршруты в ноль.
ip route del all > /dev/null
ip route flush all > /dev/null
# Создаем заново, но табличка теперь только одна.
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 #закидываем в первую таблицу инфу о сети первого провайдера
ip route add $NET_LOCAL1 dev $IF_LOCAL1 src $IP_LOCAL1 #закидываем в первую таблицу инфу о том, что у нас существует локальная сеть
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 #закидываем в первую таблицу инфу о том, что у нас существует еще одна сеть
ip route add 127.0.0.0/8 dev lo #закидываем в первую таблицу инфу о существовании лупбека
ip route del default > /dev/null
# Расскидываем трафик 50/50
ip route add default scope global equalize nexthop via $GW_INET1 dev $IF_INET1 weight 1 nexthop via $GW_INET2 dev $IF_INET2 weight 1
ip route flush cache #ну и на последок очистить кеш
# Принудительно задаем маршруты на 2 ip чтобы проверять живой канал или нет.
route add -host 212.188.4.10 gw GW_INET1 IF_INET1
route add -host 195.34.32.116 gw GW_INET2 IF_INET2
# Очистка таблиц и цепочек
iptables --flush
iptables --delete-chain
iptables --table nat --flush
iptables --table filter --flush
iptables --table mangle --flush
iptables --table nat --delete-chain
iptables --table filter --delete-chain
iptables --table mangle --delete-chain
# Назначение глобальных политик фаервола
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
echo "1" > /proc/sys/net/ipv4/ip_forward # Разрешаем форвардинг
echo "1" > /proc/sys/net/ipv4/ip_dynaddr # Разрешаем форвардинг для VPN
# MASQUERADE
iptables -A POSTROUTING -t nat -o IF_INET1 -j MASQUERADE
iptables -A POSTROUTING -t nat -o IF_INET2 -j MASQUERADE
echo "Balancing done.."
/home/ol-admin/iptables/fw # Загрузка правил фаервола
exit 0
ну вроде все в порядке. equalize можно убрать, в доках на русском про эту опцию ничего нет

Но у мя работало.
echo "1" > /proc/sys/net/ipv4/ip_forward # Разрешаем форвардинг
Забавно включать фовардинг ДО загрузки фаервола. т.е. если вдруг отвалится фаервол, тогда все ломануться куда вздумается и как вздумается. Т.к. у вас включен маскарад и фовардинг в одном месте

Далее. Если запустить данный скрипт без фаервола, уже должны включиться оба канала одновременно. проверить можно
mtr ya.ru
У вас через некоторое время появится в списке 2 шлюза.
На данном этапе будет все работать ну 1000%, если не ошибиться в ip и интерфейсах.
Убираем все лишнее из фаера.
надо ли подгружать модули, если они сами подгружаются?

modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp
Объясните, зачем разрешать уже разрешенное ? по умолчанию все ACCEPT
# Разрешаем все ранее запрошенные/установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $IF_INET1 -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $IF_INET2 -j ACCEPT
iptables -A FORWARD -i $IF_INET1 -o $IF_LOCAL1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $IF_INET2 -o $IF_LOCAL1 -m state --state ESTABLISHED,RELATED -j ACCEPT
Если бы оставшееся дропнули, я бы еще понял.
Но из всего скрипта дропится только это:
# Закрываем известные троянские порты:
iptables -A FORWARD -p udp -m multiport --sport 16355,21111,1349,26274,29891,31337,31338,47262 -j DROP
iptables -A FORWARD -p tcp -m multiport --sport 555,666,1001,1025,1026,1028,1243,2000,5000,6667,6670,6711 -j DROP
iptables -A FORWARD -p tcp -m multiport --sport 6969,7000,12345,123456,21554,22222,27374,29559,31337,31338 -j DROP
А вот это меня убивает
так вот, после загрузки скриптов делаю
ping -I eth3 ya.ru
т.е. через прова2 пингую - нет пинга, хотя из дома подключен по ssh сразу и через прова1 и через прова2 к серверу(2 сессии)
мы же вроде договорились, что пинговать будем только 2 хоста с привязанными маршрутами, разве я не прав?
# Принудительно задаем маршруты на 2 ip чтобы проверять живой канал или нет.
route add -host 212.188.4.10 gw GW_INET1 IF_INET1
route add -host 195.34.32.116 gw GW_INET2 IF_INET2
вот так:
ping -I eth0 212.188.4.10
ping -I eth3 195.34.32.116
Вроде все. Этот вариант ну самый простой и не требует усилий.
2й вариант
У вас так выглядит?
$ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
10 T1 # это наши таблицы
11 T2 #
Вот эту строчку уберите, мне кажется она вам кровь пьет. Вы все пакеты тупо метите как 10. даже если у Вас ранее стояла другая метка

iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -j MARK --set-mark 10
доверьтесь лучше default route, а метьте только избранные пакеты по портам или еще как нибудь.
PS: Уф. Надеюсь поможет