LINUX.ORG.RU
ФорумAdmin

Баллансировка нагрузки на пограничном роутере


0

1

Возможно такая тема уже поднималась, но я не нашел. Компания - маленький интернет провайдер. У нас есть пограничный роутер, пока что без BGP. Он получает два канала от двух разных провайдеров. Шеф просит сделать баллансировку нагрузки. Я пока что в замешательстве и поэтому тупо разбросал клиентов статически при помощи ip rule + ip route. Что-то мне подсказывает, что в таких условиях сделать нормальную балансировку не выйдет. Подкиньте идей.

★★

Например:
default
nexthop via пров1 dev eth1 weight толщина1
nexthop via пров2 dev eth2 weight толщина2
либо маркировать в iptdbles что-то типа " -m statistic --mode random --probability толщина" и правила по fwmark

Без PI-адресов ничего хорошего из этого не выйдет

madcore ★★★★★
()
Ответ на: комментарий от t184256

Идея? Что-то я сомневаюсь. А кот, да, серое инкогнито же.

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

Да что то пытался я сделать через nexthop, но у меня вообще никуда пинги не ходили. А идея с iptables тоже какая то кривая как мне кажется.

Мне просто интересно услышать мнения по типу: 1. Да, это реально, чувак, так все делают; 2. Нет, это невозможно, скажи своему шефу, чтоб отвязался.

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

да, это реально, но если у вас нет блока своих адресов+бгп то будет через жопу.

ventilator ★★★
()
Ответ на: комментарий от grouzen

>идея с iptables тоже какая то кривая как мне кажется.

для домашнего применения - самое то. Если для продакшена - самый оптимальный(но геморройный поначалу) вариант - AS+блок ip адресов+все это по BGP

Pinkbyte ★★★★★
()

Раз уж настроил по ip, то посмотри статистику нагрузки:

  • если всё хорошо, то и нормально.
  • если немного от нормы, то поправь правила.
  • а если уж совсем плохо, то и начинай думать что не так. И применять другие методы.
AlexVR ★★★★★
()
Ответ на: комментарий от Pinkbyte

т.е вы хотите сказать, что при наличии ASN можно будет сделать динамическую баллансировку? Если да, то не можете ли вы кинуть линк на статейку, где это описано.

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

Сейчас все именно так и работает. Смотрю в cacti на статистику загрузки обоих каналов и ручками перекидываю. Меня то впринципе все устраивает, но шеф хочет динамическую баллансировку. Пообщавшись с умными людьми в жаббере, я пришел к выводу, что в данной ситуации правильнее всего делать статическую.

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

>при наличии ASN можно будет сделать динамическую баллансировку

и да и нет. точную балансировку сделать ты в любом случае не сможешь, по крайней мере в Linux(с Cisco и Juniper не работал, так что как обстоят там дела - хз). Зато сможешь сбалансировать трафик по ASN/сетям и выставить приоритет входящего на твою сеть трафика

Pinkbyte ★★★★★
()
Ответ на: комментарий от grouzen

вот тебе как вариант:

0: from all lookup local
60: from all to 192.168.0.0/16 lookup main
70: from all to 10.0.0.0/8 lookup main
80: from all fwmark 0x5 lookup 5
90: from all fwmark 0xa lookup 10
100: from 80.80.xx.xx lookup 5
110: from 192.168.3.1 lookup 10
32766: from all lookup main
32767: from all lookup default

Здесь 80.80.xx.xx - ip, который смотрит на первого провайдера, 192.168.3.1 - на второго. 192.168.0.0/16 и 10.0.0.0/8 - локалка.

Маршруты в доп. таблицах маршрутизации:

mini-router ~ # ip route show table 5
default via 80.80.111.70 dev ppp999
mini-router ~ # ip route show table 10
default via 192.168.3.3 dev tap_vpn

вот правила iptables(таблица mangle)

:SET_MARK - [0:0]
-A SET_MARK -j CONNMARK --restore-mark
-A SET_MARK -i ppp999 -j IMQ --todev 0
-A SET_MARK -j ACCEPT
:FIRST - [0:0]
-A FIRST -j CONNMARK --set-mark 5
-A FIRST -j SET_MARK
:SECOND - [0:0]
-A SECOND -j CONNMARK --set-mark 10
-A SECOND -j SET_MARK
:PREROUTING ACCEPT [0:0]
-A PREROUTING -m conntrack --ctstate NEW -m statistic --mode nth --every 2 -j SECOND
-A PREROUTING -m conntrack --ctstate NEW -j FIRST
-A PREROUTING -j SET_MARK

Соответственно FIRST - цепочка для 1 провайдера, SECOND - для второго. На -j IMQ не обращай внимания - это шейпер входящего трафика(точнее полисер, ибо шейпить входящий трафик как известно в полном понимании этого слова нельзя).

Данная настройка работает у меня уже второй месяц. Есть косяки с vkontakte.ru, livejournal(я на них исключения вбил) и некоторыми сайтами, которые особо лютым образом привязываются к IP(а в данном случае каждый второй запрос отправляется на второго провайдера)

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

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

grouzen ★★
() автор топика

Ах да, еще есть такая штука, называется Vyatta и там вроде как все есть из коробки. Я даже нашел скринкаст какого-то чувака, который как раз рассказывал про баллансировку нагрузки, но у него в схеме не было ната(такую баллансировку любой дурак без проблем поднимет). Вопрос: Vyatta сможет разрулить мою проблему или это просто красивая оболочка для тех же линуксовых iproute2 и iptables?

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

В вяте оно работает, на основе конфигов генерятся правила с "-m statistic --mode random --probability" и соответственно рулесы по fmark.
Но, как уже не раз говорилось, без PI-адресов с динамической балансировкой будет сплошная попоболь.

madcore ★★★★★
()
Ответ на: комментарий от grouzen

PI + BGP не дает балансировку нагрузки как таковую, а гарантирует доступность твоей сети при отвале одного из аплинков. Причем все автоматически, без твоего участия происходит. Ровную балансировку между несколькими аплинками под линуксом тебе могуть дать патчи Юлиана Анастасова, routes называется. Если не заморачиваться с патчами, то можно сделать в точности как в LARTC: ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

А кеш маршрутов периодически сбрасывать по крону

LARTC, Раздел 4.2.2

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