Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Балансировка канала между 3-мя WAN-интерфейсами  (Прочитано 3841 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kneker

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Добрый день, уважаемые форумчане!

Настраиваю балансировку трафика между тремя каналами "наружу".
Действую по указанному мануалу: http://habrahabr.ru/post/54748/

который даже попал на help.ubuntu.ru как "второй способ" https://help.ubuntu.ru/wiki/ip_balancing:

В указанном примере используется 2 канала, а у меня их, как сказано выше - 3.

В ходе самостоятельной адаптации скриптов натолкнулся на одну неопределенность, прошу Вашего совета.

Вот выдержка:
Теперь напишем скрипт, который будет прописывать все необходимые маршруты и правила файрвола:
cat /etc/balance/routing.sh

ip route add $P0_NET   dev $IF0 table $TBL1 > /dev/null 2>&1
ip route add $P2_NET   dev $IF2 table $TBL1 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo  table $TBL1 > /dev/null 2>&1

ip route add $P0_NET   dev $IF0 table $TBL2 > /dev/null 2>&1
ip route add $P1_NET   dev $IF1 table $TBL2 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo  table $TBL2 > /dev/null 2>&1

Как видим, при добавлении маршрута в сеть "P2_NET" мы обращаемся к таблице "TBL1".
И, соответственно, наоборот.

Вопросы следующие:
1) Правильно ли в приведенном примере задаются маршруты (и главное - чтобы сам сообразил, и больше о таких вещах не спрашивал - почему)?
Не должно ли быть как-то так:

ip route add $P0_NET   dev $IF0 table $TBL2 > /dev/null 2>&1
ip route add $P2_NET   dev $IF2 table $TBL2 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo  table $TBL2 > /dev/null 2>&1

2) И как в таком случае нужно поправить этот кусок в случае задействования не 2-х, а 3-х каналов.

Прошу прощения за фундаментальные вопросы, честно - сам "не въехал" как надо.

Оффлайн kneker

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Вот еще один момент, так сказать - вопрос вдогонку:

Пробно настроил (по вышеуказанному мануалу) балансировку между 2-мя интерфейсами (третий пока лежит без дела, ну да ладно).
Все заработало.
Однако при открытии ресурсов, особенно - работающих по https, стали наблюдаться тормоза. Без балансировки все работает быстро.

На что следует обращать внимание применительно к данной проблеме? Где что проверять?

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Например, у меня уже не первый год, на домашнем роутере TP-LINK TL-MR3220 прошитый OpenWrt Attitude Adjustment 12.09-rc1.
Работает multiwan на 3 WiFi провайдера - в работе , Nanostatnon 2,  Nanostatnon LOCO M2 + китайский USB свисток.
Работает хорошо, т.е. гораздо лучше, чем все мои предидущие изгаления по писательству собственных настроек.

multiwan это просто шелл скрипт и без проблем может быть адартирован на любую Linux систему.
Скрипт настраивает, мониторит и если требуется перезагружает интерфейсы.
Кроме того, позволяет настроить роутинг на определённые сайты (IP) , через определённые интерфейсы.
Это актуально для работы с банковскими системами.
« Последнее редактирование: 24 Января 2014, 21:14:36 от golota »
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн kneker

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
С адаптацией скриптов под 3 канала вместо двух - разобрался сам. Все работает.
Но тупит с открытием сайтов по https (см. второе сообщение в этой теме). Также тупит доступ к FTP-ресурсам.
Что делать - уже не знаю. Пинги ровные.

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Но тупит с открытием сайтов по https (см. второе сообщение в этой теме). Также тупит доступ к FTP-ресурсам.
Что делать - уже не знаю. Пинги ровные.
Пинги куда ?
Трейсы до Certification authority для https смотрели ?
Для FTP попробуйте passive mode.
Поверьте настройки DNS и по возможности, принудительно запустите DNS запросы по самому быстрому каналу.
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн kneker

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Пинги куда ?
Ну до того же яндекса, мэйла, местных (региональных) ресурсов.

Трейсы до Certification authority для https смотрели ?
Это как смотреть?
Подразумевается трассировка до серверов, подтверждающих подлинность сертификатов?
Если это так, приведите примеры куда (и возможно - как правильно, если есть особенности) трассировать.

Для FTP попробуйте passive mode.
Пробовал. Не канает.

Поверьте настройки DNS и по возможности, принудительно запустите DNS запросы по самому быстрому каналу.
ДНС локальный (бинд9), стоит форвард на внешние сервера.
Правильно я понимаю, что для запуска днс-запросов по самому быстрому каналу, надо забить жесткие маршруты до днс-серверов, указанных в конфиге бинда?
Типа так:
ip route add 8.8.8.8/32 via 192.168.135.2 dev eth4
(пусть не смущает шлюз, указанный в виде фейкового адреса. Это для примера написано.)

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Можно прдробнее, что такое "тупит" ?
Задержка открытия коннекции или уменьшается скорость закачки контента ?

Для всех WAN интерфейсов открыт порт 53 (tcp/udp) на bind ?
В sysloge bind нету криков типа - too many timeouts resolving или network unreachable resolving ?
bind кеширует ?
(Нажмите, чтобы показать/скрыть)

Откуда берутся сертификаты, можно в Firefox посмотреть -
Right click -> View page info -> Security ->  View Certificate -> Details ->
Certificate -> Extensions -> CLR Distribution points

По поводу FTP, иногда помогает
(Нажмите, чтобы показать/скрыть)
Т.к некоторые FTP сервера лезут на ident и тормозят.

Это всё, если открытие коннекции тормозит.

Если уменьшается скорость, вплоть до зависания.
Перво-наперво надо попробовать -
(Нажмите, чтобы показать/скрыть)
Погуглите Path MTU Discovery - станет понятно зачем.
« Последнее редактирование: 26 Января 2014, 19:52:23 от golota »
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн kneker

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Можно прдробнее, что такое "тупит"?
Открываем любой сайт - открывается практически одним щелчком.
Открываем любой https-сайт (https://sberbank.ru, опять же интерфейс гуглопочты работает по https  и т.д.) - браузер ждет загрузки, доооолго ждет, похоже - выжидает некий таймаут (около 30 сек.), потом страница начинает медленно (по баннеру, по капельке) выгружаться.
Прямо как в старом советском приколе: "Инженер включил рубильник, и ток меееедлееенно пошел по проводам"

Открывается конечно, но с такими тормозами, что без балансировки намного лучше.

Для всех WAN интерфейсов открыт порт 53 (tcp/udp) на bind ?
В sysloge bind нету криков типа - too many timeouts resolving или network unreachable resolving
Бинд работает корректно, на фаере в цепочках INPUT и OUTPUT:
iptables -A INPUT -i lo -j ACEPT
iptables -A OUTPUT -o lo -j ACCEPT

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

Бинд настроен стандартно как кэширующий по данному стандартному мануалу:
https://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D0%B0_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B8%D0%BC%D0%B5%D0%BD/configuration

bind кеширует ?
(Нажмите, чтобы показать/скрыть)
Да, кэширует. Содержимое named_dump.db думаю приводить не надо

Откуда берутся сертификаты, можно в Firefox посмотреть -
Right click -> View page info -> Security ->  View Certificate -> Details ->
Certificate -> Extensions -> CLR Distribution points
Ну например для https://sberbank.ru
GeoTrust Global CA
И что теперь? Пробовал его экспортировать - не помогает.

По поводу FTP, иногда помогает
(Нажмите, чтобы показать/скрыть)
Т.к некоторые FTP сервера лезут на ident и тормозят.
Не помогает. Однако, представленная Вами информация для меня в новинку. Ни разу не встречался с идентификацией через ident на FTP-сервере.
Да и проблема выявилась на открытых серверах (с анонимным доступом), например на ftp://ftp.dlink.ru/pub

Если уменьшается скорость, вплоть до зависания.
Перво-наперво надо попробовать -
(Нажмите, чтобы показать/скрыть)
Погуглите Path MTU Discovery - станет понятно зачем.
С проблемой Path MTU Discovery ранее сталкиваться приходилось.

Вы это имеете в виду?:

Вся работа сводилась к задействованию правила в iptables:
(Нажмите, чтобы показать/скрыть)
А указанный Вами параметр: echo "1" > /proc/sys/net/ipv4/ip_no_pmtu_disc
я вообще вижу первый раз. Спасибо а новую информацию, буду курить мануалы и экспериментировать.

UPDATE:
Пробный эксперимент с такими настройками:
(Нажмите, чтобы показать/скрыть)
Взято вот отсюда:
(Нажмите, чтобы показать/скрыть)
Показал хорошие результаты.

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

Смутило только одно:
Рекомендации, вообще-то дают такие:
(Нажмите, чтобы показать/скрыть)
Т.е. таблица mangle
А тут:
(Нажмите, чтобы показать/скрыть)
таблица filter.

Как будет "православнее" с точки зрения мануала по iptables?

« Последнее редактирование: 27 Января 2014, 07:24:16 от kneker »

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Вернёмся к началу разговора.
В своё время, я долго тибидохался с load balancing
которым пользуетесь вы. Т.Е ip route nexthop

load balancing из OpenWRT MultiWAN используют чисто возможности iptables
Вот мой фрагмент из mangle -
(Нажмите, чтобы показать/скрыть)
И это реально работает.
Выбирать вам ...
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн kneker

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Вернёмся к началу разговора.
В своё время, я долго тибидохался с load balancing
которым пользуетесь вы. Т.Е ip route nexthop

load balancing из OpenWRT MultiWAN используют чисто возможности iptables
Вот мой фрагмент из mangle -
(Нажмите, чтобы показать/скрыть)
И это реально работает.
Выбирать вам ...
Заинтриговали. Тем более что эксперимент на трех каналах удачей так и не завершился.
 
Проверил на виртуальной машине Ubuntu 12.04.3 LTS - указанные Вами команды применяются, что говорит о наличии необходимых модулей в ядре, которые задействует Netfilter в работе.
Т.е. уже на боевой (не виртуальной) машине все указанное Вами при вводе как минимум будет принято NetFilter`ом.

Сообщите пожалуйста еще несколько моментов:
1) Параметры подобного рода: --set-xmark 0x10/0xffffffff
скорее всего задаются в некоей человекочитабельной форме, а уже в iptables-save идут в таком вот машинном виде.
Не осталось ли у Вас команд в явном виде (задаваемых, например, из скрипта)?

2) Вот это вот:
(Нажмите, чтобы показать/скрыть)
Это Вы так задали приоритезацию интерфейсов (через какую веревку пускать больше траффика)?
На чем основывались при выборе коэффициентов? Ширина канала, его надежность или задержка в прохождении пакета?


UPD: можете не отвечать на этот вопрос. Вспомнил ТерВер и доехал сам почему такие коэффициенты:
Вероятность попадания пакета
в 1-е правило: 0.33
во 2-е правило будет уже 0.50*(1-0.33) = 0.335
а в 3-е правило 1*(1-0.33-0.335) = 0.335
В итоге получаем распределение сильно приближенное к равномерному.
При необходимости изменения интенсивности нагружения каналов, начинаем двигать коэффициенты добиваясь нужного результата.

3) Судя по вот этому:
(Нажмите, чтобы показать/скрыть)
PMTU Вы решили все-таки не вырубать? Судя по всему все работает корректно?

4) Ну и самое интересное: что показывает
ip route show
?
Назначен ли какой-нибудь из маршрутов шлюзом по умолчанию?
Как ядро решает, куда будет совершен следующий хоп:
  • по таблице маршрутизации
  • по атрибутам пакетов, которые модифицируются в таблице mangle
  • по тому и другому во взаимном хитром взаимодействии
?
« Последнее редактирование: 27 Января 2014, 21:56:49 от kneker »

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Начну с того, что с Unix системами я закончил профессионально работать 6-7 лет назад.
И программирую на cobol на OS370 ,это настояшие мейнфреймы типа советских ЕС ЭВМ
Да и раньше, больше имел дела с IBM AIX/RS6000, SUN Solaris и SUSE
Текущий рецидив связан с тем, что меня забодало пару знакомых и что-бы облегчить себе жизнь
и пересадил их с воидозы на Ubuntu.
Так-что не расчитывайте на углублённые и подробные ответы.
Если что-то у меня начало хорошо работать, то ковырять это у меня нет желания...

1. Х.Е.З в скриптах multiwan особо не ковырялся.

2. Есть формула для вычисления коэффициентов равномерного распределения:
   например для четырех интерфейсов коэффициенты последовательных "срабатываний" - 1/4, 1/3, 1/2, 1,
   для n - 1/n, 1/(n-1), ... 1

3. "Не виноватая я !" это multiwan генерил.

4. ip route show
(Нажмите, чтобы показать/скрыть)
netstat -rn
(Нажмите, чтобы показать/скрыть)

br-lan - внутренняя сетка
br-wan - стандартный WAN порт (Nanostation 2)
eth0.4 - VLAN на котором сидит второй WAN (Nanostation LOCO M2)
wlan1  - третий WAN (USB свисток)
На всякий случай полный выхлоп iptables-save -
(Нажмите, чтобы показать/скрыть)

Результаты работы балансера -
(Нажмите, чтобы показать/скрыть)
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн kneker

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Все работает по приведенному примеру из OpenWRT.

Надо отметить, что в балансировке участвует только таблица mangle, т.е. из приведенного примера:
1) Выкидываем все, кроме mangle
2) Подписываем названия своих наружных интерфейсов (между которыми собственно балансим)

При необходимости правила легко дописываются под нужное количество внешних каналов.

Тему закрываем.

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Все работает по приведенному примеру из OpenWRT.
Я-бы даже сказал, что хорошо работает !

Небольшое дополнение.
Что-бы принудительно завернуть хост на нужный интерфейс надо добавить -

-A MultiWanRules -d xxx.xxx.xxx.xxx/32 -m mark --mark 0x0 -j FW3MARK
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн kneker

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Что-бы принудительно завернуть хост на нужный интерфейс надо добавить -

-A MultiWanRules -d xxx.xxx.xxx.xxx/32 -m mark --mark 0x0 -j FW3MARK

Да, работает.
Заворачивать можно также жестким маршрутом.

 

Страница сгенерирована за 0.059 секунд. Запросов: 25.