http://www.astalavista.ru
Тематические форумы для компьютерных клубов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

FreeBSD и балансировка трафика 2-х провайдеров

 
Начать новую тему   Ответить на тему    Список форумов http://www.astalavista.ru -> Общие вопросы (ASV2)
Предыдущая тема :: Следующая тема  
Автор Сообщение
Aintmod



Зарегистрирован: 21.10.2009
Сообщения: 5
Откуда: Krasnodar

СообщениеДобавлено: Ср Окт 21, 2009 3:14 pm    Заголовок сообщения: FreeBSD и балансировка трафика 2-х провайдеров Ответить с цитатой

Уважаемые форумчане, уж очень интересует как на FreeBSD можно балансировать трафик 2-х провайдеров!

Вот нашёл вот это...

natd -p 8668 -a ip1
natd -p 8669 -a ip2

ipfw add divert 8668 ip from any to ip1 recv if1
ipfw add divert 8669 ip from any to ip2 recv if2
ipfw add check-state
ipfw add prob 0.5 divert 8668 ip from 192.168.0.0/16 to any xmit if1 keep-state
ipfw add divert 8669 ip from 192.168.0.0/16 to any xmit if1 keep-state
ipfw add fwd gw1 ip from ip1 to any out xmit if1
ipfw add fwd gw2 ip from ip2 to any out xmit if2

работает, но не совсем то что нужно!
Хотелось бы чтоб упор шёл на определённый канал, а при его загруженности, на второй!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vis
Site Admin


Зарегистрирован: 18.05.2002
Сообщения: 3830

СообщениеДобавлено: Ср Окт 21, 2009 7:34 pm    Заголовок сообщения: Ответить с цитатой

советую смотреть в сторону pf :

Балансировка нагрузки на каналы при помощи PF

Опции ядра:

device pf
device pflog
device pfsync
options ALTQ

Конфигурационный файл /etc/pf.conf:

lan_net = "192.168.0.0/24"
int_if = "dc0"
ext_if1 = "fxp0"
ext_if2 = "fxp1"
ext_gw1 = "68.146.224.1"
ext_gw2 = "142.59.76.1"

# правила nat для исходящих соединений на каждом внешнем интерфейсе
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)

# default deny
block in from any to any
block out from any to any

# пропускаем все исходящие пакеты на внутреннем итерфейсе
pass out on $int_if from any to $lan_net
# пропускаем (quick) пакеты предназначенные самому шлюзу
pass in quick on $int_if from $lan_net to $int_if
# балансировка исходящего tcp трафика идущего из внутренней сети
pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
proto tcp from $lan_net to any flags S/SA modulate state
# балансировка исходящего icmp и udp трафика идущего из внутренней сети
pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
proto { udp, icmp } from $lan_net to any keep state

# основные "выпускаюшие" правила на внешнем интерфейсе
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state

# маршрутизация пакетов идущих с любого IP на $ext_if1 через $ext_gw1 и
# пакетов идущих на $ext_if2 через $ext_gw2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any

Автозагрузка /etc/rc.conf:

pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Aintmod



Зарегистрирован: 21.10.2009
Сообщения: 5
Откуда: Krasnodar

СообщениеДобавлено: Ср Окт 21, 2009 8:48 pm    Заголовок сообщения: Ответить с цитатой

одновременно использовать и PF и IPFW?
или правила Astalavist'ы можно использовать и на PF?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aintmod



Зарегистрирован: 21.10.2009
Сообщения: 5
Откуда: Krasnodar

СообщениеДобавлено: Ср Окт 21, 2009 8:57 pm    Заголовок сообщения: Ответить с цитатой

да и к тому же... алгоритм round-robin подразумевает циклическую смену шлюза, то есть первое соединение будет использовать rl0, второе – rl1, третье – снова rl0 и так далее.

Цель состоит в том, чтоб при полной загрузки одного из каналов, подключался второй!
Я перекурил много мануалов... такого не встречал! так полагаю надо будет самому писать скрипты.

p.s. Если в чём-то ошибся или кто-то знает решение этой задачи... отпишитесь тут или в личку (варианты скопирую сюда, вдруг кто еще будет с такой же задачей).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vis
Site Admin


Зарегистрирован: 18.05.2002
Сообщения: 3830

СообщениеДобавлено: Чт Окт 22, 2009 2:34 pm    Заголовок сообщения: Ответить с цитатой

1. правила асты могут быть любые
и для pfctl тоже очевидно

2.
угу, циклическое
но можно указывать из последовательность
т.е. указав 2 раза чаще rl0 - на него нагрузка будет в 2 раза больше Smile

а по теме перекитывание превышения на второй...
наверное нужно на скриптах как-то делать снятие параметра нагрузки на канал в цикле и просто в зависимости от нагрузки подменять правила pf "на лету"
pf , кстати, оч грамотно умеет на лету менять всю картину
т.е. установившиеся сессии затронуты не будут
только для новых будут применяться изменённые правила
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Aintmod



Зарегистрирован: 21.10.2009
Сообщения: 5
Откуда: Krasnodar

СообщениеДобавлено: Чт Окт 22, 2009 4:19 pm    Заголовок сообщения: Ответить с цитатой

можно поподробнее по поводу правил асты для PF. не очень хочеться использовать и PF и IPFW одновременно!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vis
Site Admin


Зарегистрирован: 18.05.2002
Сообщения: 3830

СообщениеДобавлено: Чт Окт 22, 2009 10:47 pm    Заголовок сообщения: Ответить с цитатой

использование их обоих - нормальная тема кстати
учет и вкл-выкл инета делать на ipfw. например
а управление каналами через pf
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Aintmod



Зарегистрирован: 21.10.2009
Сообщения: 5
Откуда: Krasnodar

СообщениеДобавлено: Пт Окт 23, 2009 2:12 pm    Заголовок сообщения: Ответить с цитатой

с этим разобрался...
Я где-то в мануале видел что есть скрипты правил для Linux! не мог бы ты где-нибудь написать мануал, или хотя бы просто скрипты(предполагаю они для IPTABLES)!
Заранее спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Bucher



Зарегистрирован: 23.09.2002
Сообщения: 12

СообщениеДобавлено: Чт Ноя 26, 2009 11:23 pm    Заголовок сообщения: Ответить с цитатой

Вот пример скрипта под linux (расширение .txt заменить на .pm)
Скрипт запускается на маршрутизаторе
Сеть - 172.20.1.0/24
Нумерация клиентских компьютеров с 1-го.
Под свой клуб нужно затачивать.
Если несколько каналов можно использовать iproute2

_________________
Деньги - на пиво, ёлку - на сдачу
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
rustamxp



Зарегистрирован: 26.10.2009
Сообщения: 2

СообщениеДобавлено: Вс Фев 14, 2010 8:47 pm    Заголовок сообщения: Ответить с цитатой

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

у меня в клубе 2 канала интернета. 1-й синхронный канал 1мбит на вход и 1мбит на выход, 2-й асинхронный ADSL ОГО 2мбит на вход и какие-то слезы на выходе.

1-й канал используется для игр, общения в скайпе и т.д. и т.п.
2-й канал используется для серфинга сайтов и обновления игр

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

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

все это построено на OpenBSD/FreeBSD + pf

ext_if1 - интернет для игр
gate1 - шлюз интернета для игр
ext_if2 - интернет для серфинга
gate2 - шлюз интернета для серфинга
int_if - внутренний интерфейс

pass in on $int_if route-to ($ext_if1 $gate1) from $int_if:network to any keep state
pass in on $int_if route-to ($ext_if2 $gate2) inet proto tcp from $int_if:network to any port {80 27030} keep state

это указан не весь конфиг фаервола, а только та часть, которая отвечает за выбор канала

если есть вопросы, пишите в ICQ 7-139-491
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов http://www.astalavista.ru -> Общие вопросы (ASV2) Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Rambler's Top100 Яндекс цитирования