Здравствуйте, уважаемые форумчане и форумчанки (если такие имеются

)!
Пытаюсь для начала настроить шлюз для предоставления выхода в интернет для защищаемой сети. В будущем на этот же шлюз планирую установить прокси-сервер с целью предоставления доступа в доменную сеть (в основном для поднятия доменной сети меня сейчас удерживает именно выход в интернет), управления доступом и с целью организации защиты корпоративной сети.
Заранее попрошу не пинать в другие ветки и в другие темы, так как здесь я хочу рассмотреть конкретный пример, конкретные вопросы и конкретные проблемы.
Для начала опишу сеть. Имеются два провайдера и два клиентских оборудования. Первое оборудование работает в режиме роутера, оно же является точкой доступа Wi-Fi для предоставления свободного доступа в интернет по первому каналу (по-другому никак, так как это требование руководства), второе оборудование работает в режиме моста и предоставляет резервный канал для защищаемой сети.
Далее, в качестве ОС использую Ubuntu Server 12.10. Имеется три сетевых интерфейса, один из которых (eth0) смотрит в локальную защищаемую сеть, а остальные - в сеть провайдера (eth1 для WAN1 и eth2 для WAN2). Для WAN1 параметры сети указываю вручную, для WAN2 - по DHCP.
Далее пытаюсь настроить маршрутизацию, чтобы была возможность работать с двумя каналами и организовать скрипт по переключению каналов. Проблема пока на этом этапе.
Делаю по пользовательскому руководству
http://habrahabr.ru/post/54748/. Мне не понятен момент, для чего необходимо создавать две дополнительные таблицы, если маршруты в них дублируют маршруты, которые генерируются ядром в главной таблице, а дефолтный шлюз потом меняется соотношением использования шлюзов?
Если делаю так, как описано в руководстве, немного подкорректировав - убрав глобальную запись шлюзов и одно условие (так как мне необходимо только резервирование) и используя в качестве адреса назначения для проверки 8.8.8.8, то имитируя пропадания основного канала, переключение происходит, но сайты не грузятся.
Сначала подумал, что на момент переключения второй канал был не поднят, но проверил - все нормально. Потом прочитал в инете, что желательно очищать кеш маршрутов. Исправил, добавил запись. Все равно. Сайты не грузятся. Но! При этом пинг идет и трассировку маршрута можно выполнить. То есть маршрутизация с клиентской машины выполняется верно.
Подскажите, пожалуйста, что я делаю не так?

Чуть позже опишу как я представляю себе таблицу маршрутов и вообще опишу все, что я делаю.
P.S. Сильно не пинайте, я недавно начал разбираться с серверными ролями на линуксе. Ну и еще я админ-самоучка.
Пользователь решил продолжить мысль 31 Января 2013, 10:54:17:
Как и сказал выше, прикладываю переделанный мною скрипт.
#!/bin/bash
# Интерфейс локальной сети
LAN_interface="eth0"
# Интерфейс сети провайдера 1
WAN1_interface="eth1"
# Интерфейс сети провайедра 2
WAN2_interface="eth2"
# IP-адрес интерфейса eth1
WAN1_IP="192.168.0.2"
# IP-адрес интерфейса eth2
WAN2_IP="`ip addr show $WAN2_interface | grep inet | awk '{print $2}'`"
# Gateway провайдера 1
WAN1_Gateway="192.168.0.1"
# Gateway провайдера 2
WAN2_Gateway="192.168.1.1"
# Локальная сеть
LAN="192.168.2.0/24"
# Сеть провайдера 1
WAN1_network="192.168.0.0/24"
# Сеть провайдера 2
WAN2_network="192.168.1.0/24"
# Таблица маршрутизации в сеть провайдера 1
Table1="ISP1"
# Таблица маршрутизации в сеть провайдера 2
Table2="ISP2"
# Запись создания таблиц опускаю, так как создаю руками. Вообще, в скрипт не должно быть включено,
# так как таблицы создаются один раз
#echo "1 ISP1" >> /etc/iproute2/rt_tables
#echo "2 ISP2" >> /etc/iproute2/rt_tables
# Запись параметра опускаю, так как делаю это руками
# echo "1" > /proc/sys/net/ipv4/ip_forward
# Маршруты в таблице ISP1
ip route add default via $WAN1_Gateway table $Table1 > /dev/null 2>&1
ip route add $WAN1_network dev $WAN1_interface src $WAN1_IP table $Table1 > /dev/null 2>&1
ip route add $LAN_network dev $LAN_interface table $Table1 > /dev/null 2>&1
ip route add $WAN2_network dev $WAN2_interface table $Table1 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo table $Table1 > /dev/null 2>&1
# Маршруты в таблице ISP2
ip route add default via $WAN2_Gateway table $Table2 > /dev/null 2>&1
ip route add $WAN2_network dev $WAN2_interface src $WAN1_IP table $Table2 > /dev/null 2>&1
ip route add $LAN_network dev $LAN_interface table $Table2 > /dev/null 2>&1
ip route add $WAN1_network dev $WAN1_interface table $Table2 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo table $Table2 > /dev/null 2>&1
# Маршруты в главной таблице
ip route add default via $WAN1_Gateway > /dev/null 2>&1
ip route add $WAN1_network dev $WAN1_interface src $WAN1_IP > /dev/null 2>&1
ip route add $WAN2_network dev $WAN2_interface src $WAN1_IP > /dev/null 2>&1
# Правила маршрутизации
ip rule add from $WAN1_IP table $Table1 > /dev/null 2>&1
ip rule add from $WAN2_IP table $Table2 > /dev/null 2>&1
# Перенаправление, предоставление доступа для локальной сети
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s $LAN_network -o $WAN1_interface -j MASQUERADE
iptables -t nat -A POSTROUTING -s $LAN_network -o $WAN2_interface -j MASQUERADE
STAT1=0
STAT2=0
while true; do
ping -c 3 -s 100 8.8.8.8 -I $WAN1_interface > /dev/null
if [ $? -ne 0 ]; then
echo "Отсутствует выход в интернет по первому каналу!"
STAT1_New=0
else
STAT1_New=1
fi
ping -c 3 -s 100 8.8.8.8 -I $WAN2_interface > /dev/null
if [ $? -ne 0 ]; then
echo "Отсутствует выход в интернет по второму каналу!"
STAT2_New=0
else
STAT2_New=1
fi
if (( ($STAT1_New!=$STAT1) || ($STAT2_New!=$STAT2) )); then
echo "Изменение маршрутов!"
if (( ($STAT1_New==0) && ($STAT2_New==0) )); then
echo "Отсутствует выход в интернет по обоим каналам! Удаление шлюза по умолчанию!"
ip route delete default
elif (( ($STAT1_New==1) && ($STAT2_New==0) )); then
echo "Переключение на первый канал!"
ip route delete default
ip route add default via $WAN1_Gateway dev $WAN1_interface
elif (( ($STAT1_New==0) && ($STAT2_New==1) )); then
echo "Переключение на второй канал!"
ip route delete default
ip route add default via $WAN2_Gateway dev $WAN2_interface
fi
fi
STAT1=$STAT1_New
STAT2=$STAT2_New
sleep 5
done
В этом скрипте по сути все тоже самое, что и в скрипте по ссылке, просто я изменил для своего удобства наименование параметров и изменил блоки условий.
В самом начале, еще до применения скрипта, я раскомментировал параметр net.ipv4.ip_forward в /etc/sysctl.conf. Вручную создал таблицы.
Потом применяю часть скрипта до части с проверкой доступности. И дальше уже вручную переключаю.
Я не могу понять сейчас, зачем дублировать маршруты в двух дополнительных таблицах и зачем добавлять записи в главную таблицу, которые автоматически генерируются ядром?
А, и еще мелкий вопрос, простите, за тупость, но что значит выражение "> /dev/null 2>&1"?