The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Два шлюза по умолчанию с различной метрикой"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Два шлюза по умолчанию с различной метрикой"  
Сообщение от max (??) on 04-Фев-06, 09:38 
Простая задачка, а где-то грабли. Имею два линка в нет. Делаю два маршрута по умолчанию с различными метриками:
route add -net 0.0.0.0 netmask 0.0.0.0 metric 1 dev eth0
route add -net 0.0.0.0 netmask 0.0.0.0 metric 2 dev eth1
Т.е. идея такова, что пока работает первый линк, то все пакеты идут через него (eth0), как только падает, то через eth1.
Беру, выдергиваю шнурок из eth0.. Но пакеты через eth1 не идут. Мож я что-то не то делаю?
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Два шлюза по умолчанию с различной метрикой"  
Сообщение от Tangar (ok) on 06-Фев-06, 11:29 
Тут тебе надо LARTC (Linux Advanced Routing & Traffic Control HOWTO), http://gazette.linux.ru.net/rus/articles/lartc/index.html

штука с виду сильно замароченая, но на самом деле когда разберешься - очень простая и удобная.

щас ниже опишу как у меня сделано.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Два шлюза по умолчанию с различной метрикой"  
Сообщение от Tangar (ok) on 06-Фев-06, 11:42 
Я наверное чуток с LARTC погорячился, если только ИЛИ/ИЛИ можно проще.
LARTC будет нужен только для полноценного ответа сервера с обоих каналов.

Обший смысл: небольшой скрипт каждые 2 минуты проверяет доступность например www.ya.ru через определенный канал, это делается пингом с указанием с какого интерфейса это делать, и меняет default route. Я так полагаю что у тебя не только сам сервер в инет смотрит, но и пользователи за NAT'ом, т.е. надо ещё менять правила NAT.

Чтобы сервак отвечал с обоих каналов:
#!/bin/bash

/sbin/ip route add IP1/IP1_MASK dev eth1 src IP1 table T1
/sbin/ip route add IP2/IP2_MASK dev eth2 src IP2 table T1
/sbin/ip route add 192.168.0.0/24 dev eth0 table T1
/sbin/ip route add 127.0.0.0/8 dev lo table T1
/sbin/ip route add default via GW1 table T1

/sbin/ip route add IP1/IP1_MASK dev eth1 src IP1 table T2
/sbin/ip route add IP2/IP2_MASK dev eth2 src IP2 table T2
/sbin/ip route add 192.168.0.0/24 dev eth0 table T2
/sbin/ip route add 127.0.0.0/8 dev lo table T2
/sbin/ip route add default via GW2 table T2

/sbin/ip rule add from IP1 table T1
/sbin/ip rule add from IP2 table T2

смысл сей комбинации в том, чтобы если пакет пришёл на IP1 то сервак и отвечал через него, а не через default gw.

/// продолжение следует

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Два шлюза по умолчанию с различной метрикой"  
Сообщение от Tangar (ok) on 06-Фев-06, 15:36 
Это для клиентов:

/sbin/ip route add 192.168.0.0/24 dev eth0 src 192.168.0.3 table T3
/sbin/ip route add IP1/IP1_MASK dev eth1 src IP1 table T3
/sbin/ip route add IP2/IP2_MASK dev eth2 src IP2 table T3
/sbin/ip route add 127.0.0.0/8 dev lo table T3
/sbin/ip route add default via GW1 table T3

/sbin/ip rule add from 192.168.0.0/24 table T3

в этой табличке будем переключать через какой канал их пускать.

Скрипт (пример, внимательно разбиратья с ипишниками и интерфейсами), также есть чуток лишнего, т.к. у меня разные пользователи сидят через разные каналы, а вслучае падения все перебрасываются на какой-нибудь из:

#!/bin/bash

ping -c 3 213.180.204.8 -I eth1 >> /dev/null
if [ $? -ne 0 ]; then
echo "Not ping from PROV2 ! Try switch channel to PROV1 !"

ping -c 3 213.180.204.8 -I eth2 >> /dev/null
if [ $? -ne 0 ]; then
echo "Not ping from PROV2 ! 3,14zdec!"
else
/sbin/ip route replace default via GW1 table T3
/sbin/ip route replace default via GW1
/sbin/ip route flush cache
/sbin/iptables-restore /etc/iptables.nat.PROV1
fi
else
ping -c 3 213.180.204.8 -I eth2 >> /dev/null
if [ $? -ne 0 ]; then
echo "Not ping from PROV1! Try switch channel to PROV2!"

/sbin/ip route replace default via GW2 table T3
/sbin/ip route replace default via GW2
/sbin/ip route flush cache
/sbin/iptables-restore /etc/iptables.nat.PROV2
else
GRP1=`/sbin/ip ro show table T4|grep -c 'default via GW2'`
GRP2=`/sbin/ip ro show table T5|grep -c 'default via GW1'`
if [ $GRP1 -eq 0 ] || [ $GRP2 -eq 0 ]; then
echo "Work normal!"
/sbin/ip route replace default via GW1 table T3
/sbin/ip route replace default via GW1
/sbin/ip route flush cache
/sbin/iptables-restore /etc/iptables.nat
fi
fi
fi

Пример /etc/iptables.nat.PROV1:
# Generated by iptables-save v1.2.7a on Sat Jun  4 19:25:57 2005
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source IP1
COMMIT
# Completed on Sat Jun  4 19:25:57 2005


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Два шлюза по умолчанию с различной метрикой"  
Сообщение от NZ on 06-Фев-06, 17:20 
а какой смысл тогда заложен в возможности работы команды route с разными метриками - для чего нужна эта возможность?,  или это просто недоработка? тоже хотелось бы узнать у уважемого форума
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Два шлюза по умолчанию с различной метрикой"  
Сообщение от _KAV_ (ok) on 06-Фев-06, 18:43 
>а какой смысл тогда заложен в возможности работы команды route с разными
>метриками - для чего нужна эта возможность?,  или это просто
>недоработка? тоже хотелось бы узнать у уважемого форума
1 - в основном при работе с rip и прочими - тогда в таблицы маршрутизации могут добавиться несколько маршрутов на один хост, выбирается кратчайший.
Ставь routed в минимальном варианте - и заработает, а маршрутов можешь и не писать Ж8-) - если, конечно, тебе анонсы rip выдадут - что, впрочем, маловероятно.
2 - так, как ты хотел, тоже работать может, но с парой поправок -
а - изменить в настройках sysctl время, через которое система сделает "интерфейс лежит" - по умолчанию это 10 мин., что ли... была здесь статья
б - реально это не поможет - ибо эзернет как правило не ложится... а упадание рутера ровным образом ничего системе не скажет.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2023 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру