The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Распределение трафика между двумя к..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Распределение трафика между двумя к..."  +/
Сообщение от auto_tips on 18-Авг-09, 14:05 
Во FreeBSD 7 появилась возможность задания множественных таблиц маршрутизаций. В ядре отвечает за это опция:

    options ROUTETABLES=[количество таблиц]

Распределения трафика будет осуществляться средствами пакетного фильтра ipfw.

Задаем маршруты по умолчанию:

    setfib 0 route add default 1.0.1.1 # таблица по умолчанию
    setfib 1 route add default 1.1.1.1 # новая таблица

Файл конфигурации для запуска ipfw:

    $cmd="/sbin/ipfw"
    $cmd add 10 check-state
    $cmd add 20 prob 0.5 setfib 0 tcp from 192.168.0.0/16 to not 192.168.0.0/16 keep-state
    $cmd add 30 prob 0.5 setfib 1 tcp from 192.168.0.0/16 to not 192.168.0.0/16 keep-state
    $cmd add 40 allow all from any to any

Таким образом мы задаем распределение трафика 50/50. Если каналы не равноценные то нужно выставить процентную весомость этих каналов.

Трансляция адресов (NAT).

Под эту задачу я выбрал ipnat, реализацию NAT от фаервола ipf.

пример /etc/ipnat.rules:

    map vlan0 192.168.0.0/16 -> 1.0.1.1/32
    map tun0 192.168.0.0/16 -> 1.1.1.1/32

Также можно выбрать демон natd или новый, работающий на уровне ядра, NAT, который появился во FreeBSD 7.


URL: http://bsd.ucd.uz/raspredelenie-trafika-mezhdu-2-mya-kanalam...
Обсуждается: https://www.opennet.ru/tips/info/2142.shtml

Ответить | Правка | Cообщить модератору

Оглавление

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

1. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от john doe on 18-Авг-09, 14:05 
А то-же самое, но для pf -- реализуемо?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от mr_gfd on 18-Авг-09, 14:19 
http://unix.derkeiler.com/Mailing-Lists/FreeBSD/net/2009-01/...

Рекомендуют все-же ipfw для этих целей.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от pehlle email on 18-Авг-09, 14:48 
там ошибка в скрипте, не $cmd="/sbin/ipfw",
а cmd="/sbin/ipfw"
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от shutdown now on 18-Авг-09, 14:52 
а почему два раза "prob 0.5", по идее, должно быть один раз, а то 1/4 трафика будет 40-ым правилом обрабатываться.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от terminus (ok) on 18-Авг-09, 15:05 
Проверяли, это нормально работает? Просто мне кажется что при таком конфиге TCP пакеты с вероятностью 1/2 будут прыгать между каналами, даже в случае когда обмен происходит в рамках одной сесии (IP:TCP <-> IP:TCP). Если потом пропускать еще и через нат, то в итоге IP_назначения будет получать TCP пакеты с двух IP.
ЕМНИП то дополнительные параметры такие как prob будут срабатывать даже при проходе через check-stale. У nuclight подробно было написано про это:
http://nuclight.livejournal.com/124348.html
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от pehlle email on 18-Авг-09, 15:23 
вы правильно говорите.
правильнее будет так:
$cmd add 20 prob 0.5 setfib 0 tcp from 192.168.0.0/16 to not 192.168.0.0/16 setup keep-state
$cmd add 30 setfib 1 tcp from 192.168.0.0/16 to not 192.168.0.0/16 setup keep-state
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от pehlle email on 18-Авг-09, 16:26 
сорри :(, оказывается такое не работает. заметку можно удалить или наоборот дополнить, может быть у кого нить что нибудь с данным направлением че нить получиться. Меня сбило с понтолыки, что пакетики бегали на обоих каналах, оказывается, при проверке когда в правило ставиш флаг setup, то при keep-state, оно должно как бы закэшироваться, но не кэшируется.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от shutdown now on 18-Авг-09, 16:54 
в 8-ой фре есть ECMP (Equal Cost Multipath Routing), он должен делить поровну.
А если ещё и NAT, то тогда вот - http://wiki.opennet.ru/FreeBSD_Balance
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от iZEN (ok) on 19-Авг-09, 00:14 
Насчёт балансировки трафика между двумя каналами есть статья в журнале "Системный администратор" №2(51)'2007, но там в основном про IPFW. Однако автор всё же обмолвился и про PF.
Алгоритм балансировки трафика round-robin между двумя каналами на PF:

pass in on ed0 route-to { (rl0 10.0.1.1), (rl1 10.1.1.1) } round-robin from 192.168.0.0/24 to any keep state

здесь: ed0 — внутренний интерфейс, смотрящий на клиентов; rl0 и rl1 — внешние интерфейсы, смотрящие на провайдеров; 10.0.1.1 — адрес шлюза провайдера А; 10.1.1.1 — адрес шлюза провайдера Б; 192.168.0.0/24 — локальная сеть.

    Этим правилом входящий трафик на внутреннем интерфейсе (т.е. исходящий для пользователей) будет распределяться между интерфейсами rl0 и rl1 с соответствующими шлюзами по алгоритму round-robin (то есть внешний интерфейс будет меняться циклически — первое соединение будет использовать rl0, второе — rl1, третье — снова rl0 и так далее). Опция keep state сохраняет состояние, благодаря чему все пакеты в рамках одного соединения будут использовать один и тот же шлюз. В итоге нагрузка будет распределяться между двумя каналами — нельзя сказать, что трафик поделится абсолютно поровну, но при рассмотрении за большой период времени можно считать, что балансировка будет приближаться к этому.

Для решения проблемы привязки соединений клиента к определённому IP-адресу, которое требуется для некоторых серверов (а в данном случае каждое новое соединение от одного и того же клиента к определённому серверу будет проходить с большой вероятностью через разные маршруты/интерфейсы), нужно использовать опцию sticky-address в правиле nat или route-to.

Чтобы распределять трафик между интерфейсами в определённой пропорции в правиле PF нужно использовать опцию probability.

Обсуждение: http://forum.lissyara.su/viewtopic.php?f=8&t=17906&p=166055

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

10. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от nanodaemon (ok) on 19-Авг-09, 04:07 
по каким же причинам рекомендуют ? pf в *BSD умел балансировать задолго до того как прикрутили мультипл роут тейблс во фрибсд. да и при помощи ipfw можно сделать по-человечески, я думаю, не прибегая ко мультипл роут тейблс. предназначение мультипл роут тейблс иное чем балансинг каналов.

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

11. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от XoRe (ok) on 19-Авг-09, 16:19 
Для раскидывания пакетов по двум каналам не обязательны множественные таблицы маршрутизации.
Достаточно двух fwd в ipfw и двух натов.

После некоторго исследования этой темы могу сказать свое имхо.

Если пакеты одного клиента будут лететь через двух разных провайдеров (пусть даже с сохранением сессии, т.е. до одного ip адреса - через один канал), все равно возникнут проблемы с порталами типа mail.ru, vkontakte и т.д.
Там может слетать авторизация, если запросы клиента будут приходить то с одного ip адреса, то с другого.
Помню, mail.ru ругалась, когда я примерно через такую систему на неё заходил.
То могут быть проблемы с любым более менее серьёзным интернет проектом, который имеет более одного ip адреса.

В конце концов, самый стабильный вариант - распределение юзеров по каналам.
Их просто можно сделать динамическим.
То есть написать скриптик, который анализирует загруженность каналов и пущает нового юзера через наименее загруженный канал.
Ну и запоминает, какой юзер через какой канал ходит.
И удаляет юзеров, которые не проявляли сетевой активности какое-то время (и которых не осталось открытых сессий).

Ну и плюс там пингование шлюзов и т.д.

Полной балансировки нагрузки, конечно, не получится.
Но я думаю, что к этому будет стремиться.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от XoRe (ok) on 19-Авг-09, 16:20 
>сорри :(, оказывается такое не работает. заметку можно удалить или наоборот дополнить,
>может быть у кого нить что нибудь с данным направлением че
>нить получиться. Меня сбило с понтолыки, что пакетики бегали на обоих
>каналах, оказывается, при проверке когда в правило ставиш флаг setup, то
>при keep-state, оно должно как бы закэшироваться, но не кэшируется.

Да ладно, рациональное зерно все равно есть)
Могу порекомендовать тот вариант, который я описал ниже.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

13. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от iZEN (ok) on 19-Авг-09, 19:40 
PF&ALTQ
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

14. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от Alive email(??) on 20-Авг-09, 13:58 
Согласен с товаришем XoRe. Без полноценного multipath routing правильную балансировку не сделаешь.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от XoRe (ok) on 21-Авг-09, 13:05 
>PF&ALTQ

А можно поподробнее?
Если честно, не понятно, о чем это вы)
Вы поддерживаете мою мысль и говорите, чем это можно сделать?
Или хотите сказать, что с помощью PF&ALTQ можно сделать балансировку без проблем с mail.ru?

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

16. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от XoRe (ok) on 21-Авг-09, 13:05 
>Согласен с товаришем XoRe. Без полноценного multipath routing правильную балансировку не сделаешь.
>

Я бы сказал, без своих IP адресов)

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

17. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от iZEN (ok) on 21-Авг-09, 16:16 
>>PF&ALTQ
>
>А можно поподробнее?
>Если честно, не понятно, о чем это вы)
>Вы поддерживаете мою мысль и говорите, чем это можно сделать?
>Или хотите сказать, что с помощью PF&ALTQ можно сделать балансировку без проблем
>с mail.ru?

Подробнее:
1. http://house.hcn-strela.ru/BSDCert/BSDA-course/apcs02.html#p...
2. http://house.hcn-strela.ru/BSDCert/BSDA-course/apcs02.html#p...


Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от XoRe (ok) on 22-Авг-09, 13:05 
>[оверквотинг удален]
>>
>>А можно поподробнее?
>>Если честно, не понятно, о чем это вы)
>>Вы поддерживаете мою мысль и говорите, чем это можно сделать?
>>Или хотите сказать, что с помощью PF&ALTQ можно сделать балансировку без проблем
>>с mail.ru?
>
>Подробнее:
>1. http://house.hcn-strela.ru/BSDCert/BSDA-course/apcs02.html#p...
>2. http://house.hcn-strela.ru/BSDCert/BSDA-course/apcs02.html#p...

Ход ваших мыслей мне понятен)
Во всяком случае, я на это надеюсь.
Хотя способ донесения мыслей - ссылками - несколько неприятен.

А ещё по ссылкам ничего не говорится о том, как такая конструкция будет себя вести на сайтах, где слетает авторизация, если запросы идут с разных ip адресов.
Ведь у сайта может быть несколько ip адресов.

Например:
$ host vkontakte.ru
vkontakte.ru has address 93.186.227.123
vkontakte.ru has address 93.186.227.124
vkontakte.ru has address 93.186.227.125
vkontakte.ru has address 93.186.227.126
vkontakte.ru has address 93.186.227.129
vkontakte.ru has address 93.186.227.130
vkontakte.ru has address 93.186.228.129
vkontakte.ru has address 93.186.228.130
vkontakte.ru has address 93.186.224.233
vkontakte.ru has address 93.186.224.234
vkontakte.ru has address 93.186.224.235
vkontakte.ru has address 93.186.224.236
vkontakte.ru has address 93.186.224.238
vkontakte.ru has address 93.186.224.239
vkontakte.ru has address 93.186.225.6
vkontakte.ru has address 93.186.225.211
vkontakte.ru has address 93.186.225.212
vkontakte.ru has address 93.186.226.4
vkontakte.ru has address 93.186.226.5
vkontakte.ru has address 93.186.226.129
vkontakte.ru has address 93.186.226.130
vkontakte.ru mail is handled by 10 mail.vkontakte.ru.

Плюс ещё всякие:
cs4214.vkontakte.ru
cs4171.vkontakte.ru
*.vkadre.ru

И т.д.
Можно сделать, чтобы фаерволл запоминал, какой ип адрес какому клиенту через какой канал давать.
Вы же не думаете, что балансировка типа round-robin (по очереди на канал) будет стопроцентно угадывать, через какой канал послать запрос клиента на новый ip адрес?

Хотя может я чего-то не знаю.
Буду рад услышать что-то ещё.
Буду рад, если это будут не только ссылки.

P.S.
Я и сам могу ошибаться.
Поэтому подниму freebsd на работе в виртуалке, дам ей два внешних ip адреса.
И попробую воспроизвести то, что описано по ссылкам.
Если сайты не будут ругаться и авторизация не будет спадать, то это реально.
А если нет, значит нет.

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

20. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от ro on 25-Авг-09, 20:50 
а можно сделать ,как в линуксе,чтобы в зависимости от нагрузки каналов распределял?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

21. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от XoRe (ok) on 31-Авг-09, 21:48 
>а можно сделать ,как в линуксе,чтобы в зависимости от нагрузки каналов распределял?
>

А можно поподробнее про "как в линуксе"? )

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

22. "Распределение трафика между двумя каналами во FreeBSD"  +/
Сообщение от Merridius on 19-Дек-10, 23:54 
>>а можно сделать ,как в линуксе,чтобы в зависимости от нагрузки каналов распределял?

А можно купить циску в которой есть и multipath routing и ip sla и не парить себе мозг.

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору


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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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