LINUX.ORG.RU
ФорумAdmin

смена default gw без потери активных соединений (два разных провайлера)


0

0

Есть шлюз, с одной стороны которого локальная сеть с пользователями, с другой - два независимых канала к провайдерам.

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

Сейчас это делается обыкновенной сменой default gw (точнее изменением метрики на одной из default gw записи в роутинге)


NAT по условию ESTABLISHED,RELATED поможет?
Только придется кроме смены default gateway менять еще правило в iptables.

Gelin
()
Ответ на: комментарий от eightn

Опоздал. А то у меня тут еще мысль интересная родилась:
Ставить iptablesами метки (mark) на пакеты established,related и делать policy routing для этих марков. Тогда надо будет только править два маршрута, а iptables не трогать.

Gelin
()
Ответ на: комментарий от Gelin

А поподробнее?

У меня сейчас метками пакаты направляются в разные HTB цепочки для шейпинга трафика. Возможно как то совместить mark для htb-фильтров и mark-и для роутинга?

eightn
() автор топика
Ответ на: комментарий от eightn

Уфф, я сам для энтого дела перерыл кучу доков.
Примерно так:

ip route replace 192.168.1.0/24 dev eth1 src 192.168.1.1 table Prov2
ip route replace 192.168.2.0/24 dev eth2 src 192.168.2.1 table Prov2
ip route replace default via $PROV2_GW dev $PROV2_IF table Prov2

ip rule del fwmark $MARK
ip rule add fwmark $MARK table Prov2
ip route flush cache

При этом в файле /etc/iproute2/rt_tables должна быть строчка вида:
100 Prov2

Мы создаем новую таблицу маршрутизации с названием Prov2, прописываем там локальные интерфейсы (это важно!), по виду того, что нам выдаст ip route list (основная таблица маршрутизации), задаем маршрут по умолчанию.
Затем добавляем (перед этим удаляем, это чтобы скрипт можно было повторно запускать, и он все переписывал) правило, что пакеты с такими-то марками должны роутится не по основной таблице маршрутизации, а по нашей Prov2.
Соответственно, маршруты по умолчанию можно оперативно менять.
Рекомендую делать все это аккуратно, имея физический доступ к машине, я пару раз так роутеры "терял", по ssh так мухлюя.

Вообще, начни отсюда: http://www.opennet.ru/base/net/adv_route_qos.txt.html

Gelin
()
Ответ на: комментарий от Gelin

Спасибо.

Но основной вопрос был в том, как совмещать уже промаркированный трафик для HTB с маркировкой трафика для принятия решения о роутинге :)

Т.к. если пакет уже промаркирован для HTB, то очередной mark (для роутинга) снимит метку для HTB (и наоборот). Засада именно тут.

eightn
() автор топика
Ответ на: комментарий от eightn

Не знаю, какие марки используются в HTB (шейпингом ( :-) !) сильно не занимался), но в ip rule add fwmark ставится тот самый марк, который ставится iptablesами с помощью действия MARK. Соответственно можно заиметь собственные таблицы маршрутизации для каждого марка.

Gelin
()
Ответ на: комментарий от Gelin

>> в HTB (шейпингом ( :-) !) сильно не занимался), ;-)))

Это одни и те же марки.

В предыдущей теме http://www.linux.org.ru/jump-message.jsp?msgid=505840 я задавал такой вопрос:

--------------------------- Существует ли нормальная документацая по iproute2? Где более подробно рассказывается о всех ключевых словах для tc, примерах оптимизации и тд?

Нужно создать правило для u32 match (ip src 10.0.0.0/24 _и_ ip src 20.0.0.0/20) _но_не_ (ip src 30.0.0.0/24 _и) ip src 40.0.0.0/20) ... flowid 1:31

Допустим, первые скобки можно раскрыть, написав два аналогичных правила (в первом будет подсеть 10.., во втором - 20..). Но если в первых скобках будет уже 10 различных адресов?

В общем, есть ли правила группировки, а так же объединений по И ИЛИ НЕ всех этих match ? ----------------------------

Единственный найденный мною способ (точнее его подсказали в ru.linux), это использовать структуру цепочек iptables, что бы сформировать нужные правила для вышеописанных match, в конце которых пакеты, прошедшие по цепочкам помечаются с помощью -j mark.

Ну а в tc используется уже tc flowid исходя из номера Mark пакета.

eightn
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.