Балансировка WAN-каналов#

Описание#

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

Минимально необходимая конфигурация для балансировки WAN каналов должна включать:

  • определенный сетевой интерфейс маршрутизатора с заданным адресом и адресом следующего узла;

  • одно правило балансировки с заданными сетевыми интерфейсами LAN (inbound-interface) и WAN (interface) соответственно.

Примечание

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

Правила балансировки#

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

В следующем примере демонстрируется создание правила балансировки, которому может быть назначен номер в интервале от 1 до 9999.

fakel@fakel# set load-balancing wan rule 1
Possible completions:
description             Description for this rule
> destination           Destination
exclude                 Exclude packets matching this rule from wan load balance
failover                Enable failover for packets matching this rule from wan load balance
inbound-interface       Inbound interface name (e.g., "eth0") [REQUIRED]
+> interface            Interface name [REQUIRED]
> limit                 Enable packet limit for this rule
per-packet-balancing    Option to match traffic per-packet instead of the default, per-flow
protocol                Protocol to match
> source                Source information

Вес сетевого интерфейса#

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

set load-balancing wan rule 1 interface eth0 weight 2
set load-balancing wan rule 1 interface eth1 weight 1

Таким образом 66% исходящего трафика будет перенаправляться через сетевой интерфейс eth0, а 33% - через сетевой интерфейс eth1.

Ограничение пропускной способности#

Пропускная способность для исходящего трафика может быть искусственно ограничена посредством использования параметра limit для отдельного правила балансировки.

set load-balancing wan rule <rule> limit <parameter>

Дополнительно с параметром limit могут быть указаны следующие параметры:

  • threshold - пороговое значение пропускной способности. Указывается в формате ДО (below) и ОТ (above) определенного значения;

  • period - период времени, за который выполняется расчет. Возможные значения - second (по умолчанию), minute, hour;

  • burst - количество сетевых пакетов, допустимое для превышения порогового значения пропускной способности в рамках заданного периода времени (period);

  • rate - количество сетевых пакетов. Значение по умолчанию - 5.

Балансировка пакетов или потоков#

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

Балансировка пакетов для исходящего трафика позволяет достичь лучших показателей, но только в случае, если нарушение порядка пакетов не влияет на работоспособность сетевой инфраструктуры. Данный режим может быть активирован для отдельного правила балансировки с помощью параметра per-packet-balancing.

set load-balancing wan rule <rule> per-packet-balancing

Исключение трафика из балансировки#

В некоторых случаях может возникнуть необходимость исключить трафик из балансировки. Это может быть сделано посредством использования параметра exclude для отдельного правила балансировки.

set load-balancing wan rule <rule> exclude

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

Контроль работоспособности#

Работоспособность WAN каналов (сетевых интерфейсов и путей прохождения трафика), используемых сервисом балансировки, периодически проверяется посредством:

  • Отправки сообщения ICMP Echo Request удаленным хостам

  • Контроля времени жизни сетевого пакета (TTL)

  • Выполнения специального пользовательского скрипта.

Если WAN канал не проходит проверку, он исключается из списка используемых сервисом балансировки. Для включения проверки WAN канала необходимо использовать команду set load-balancing wan interface-health <interface>.

fakel@fakel# set load-balancing wan interface-health <interface>
Possible completions:
failure-count    Failure count
nexthop          Outbound interface nexthop address. Can be 'dhcp or ip address' [REQUIRED]
success-count    Success count
+> test          Rule number

Для обеспечения выполнения проверки необходимо указать адрес шлюза, через который будет доступен хост-получатель. Параметр ipv4-address может принимать значение dhcp.

set load-balancing wan interface-health <interface> nexthop <ipv4-address>

Необходимо также задать количество неудачных результатов проверки, по достижении которого WAN канал будет помечен, как недоступный, и количество успешных проверок, по достижению которого WAN канал будет снова отмечен, как доступный. Количество данных проверок задается с помощью параметров failure-count` и success-count` соответственно. Допустимые значения данных параметров находятся в диапазоне от 1 до 10. Значение по умолчанию - 1.

set load-balancing wan interface-health <interface> failure-count <number>
set load-balancing wan interface-health <interface> success-count <number>

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

fakel@fakel# set load-balancing wan interface-health eth1 test 0
Possible completions:
resp-time    Ping response time (seconds)
target       Health target address
test-script  Path to user defined script
ttl-limit    Ttl limit (hop count)
type         WLB test type

При настройке тестов необходимо задать следующие параметры:

  • resp-time - максимальное время ожидания ответа на сообщение ICMP Echo Request в секундах. Допустимые значения находятся в диапазоне от 1 до 30. Значение по умолчанию - 5;

  • target - идентификатор хоста-получателя, в адрес которого будут отправляться сообщения ICMP Echo Request. Допустимые значения - адрес IPv4 или символьное имя хоста;

  • test-script - пользовательский скрипт, описывающий характер проверки. Скрипт должен возвращать 0 для обозначения успешного результата и отличное от 0 значение - для неудачного результата. Стандартное расположение скриптов - /config/scripts. При использования нестандартного расположения необходимо указывать полный путь до файла скрипта;

  • ttl-limit - количество переходов между каждой парой шлюзов на пути к хосту-получателю, которое используется для тестов с использованием протокола UDP и атрибута TTL. Критерием успешности является получение в ответ сообщения ICMP Time Expired. Значение по умолчанию - 1;

  • type - тип теста. Допустимое значение - одно из списка (ping, ttl, script).

Трансляция адреса отправителя#

По умолчанию при балансировке WAN каналов IP адрес отправителя каждого исходящего сетевого пакета с запросом заменяется IP адресом соответствующего сетевого интерфейса для того, чтобы обеспечить получение ответа на тот же сетевой интерфейс. Это достигается за счет автоматической генерации правил трансляции адреса отправителя (SNAT), которые применяются только к трафику, к которому был применен механизм балансировки. В случаях, когда такое поведение является нежелательным, механизм автоматической генерации правил SNAT может быть отключен.

set load-balancing wan disable-source-nat

Привязанные соединения#

Входящие соединения могут некорректно обрабатываться WAN каналами при отправке ответа на запрос клиента.

При получении на определенном сетевом интерфейсе входящего сетевого пакета с запросом от клиента может потребоваться, чтобы пакет с ответом отправлялся с того же сетевого интерфейса. Это достигается за счет использования параметра sticky-connections при настройке балансировке WAN каналов.

set load-balancing wan sticky-connections inbound

Отказоустойчивость#

В режиме отказоустойчивости один из WAN каналов и соответствующий ему сетевой интерфейс объявляется активным, а остальные - резервными. В этом случае вместо балансировки трафика между всеми работоспособными WAN каналами трафик передается только по активному. В случае отказа активного WAN канала на эту роль выбирается другой из списка резервных на основе состояния и веса интерфейса. Оставшиеся WAN каналы становятся резервными по отношению к новому активному. Роли WAN каналов и соответствующих им интерфейсов могут быть также выбраны на основе порядка правил балансировки, для которых необходимо указывать параметр failover.

set load-balancing wan rule <number> failover

Так как перераспределение установленных ранее сессий между активным и резервными WAN каналами автоматически не выполняется, необходимо производить очистку таблицы соединений с помощью команды flush-connections при каждом изменении состояния соединения.

set load-balancing wan flush-connections

Предупреждение

Очистка таблица соединений приведет к тому, что будет выполняться балансировка пакетов вместо балансировки потоков до момента повторного установления соединений.

Настройка#

Пример настройки#

В качестве примера рассмотрим ситуацию, когда есть два сетевых интерфейса WAN, сконфигурированных по протоколу DHCP, и один LAN интерфейс (eth2).

set load-balancing wan interface-health eth0 nexthop 'dhcp'
set load-balancing wan interface-health eth1 nexthop 'dhcp'
set load-balancing wan rule 1 inbound-interface 'eth2'
set load-balancing wan rule 1 interface eth0
set load-balancing wan rule 1 interface eth1

Список команд#

Основные настройки#

set load-balancing wan interface-health <interface>#

Активирует механизм проверки WAN канала для внешнего интерфейса маршрутизатора <interface>.

set load-balancing wan interface-health <interface> nexthop <address|dhcp>#

Задает адрес следующего маршрутизатора <address|dhcp>, который будет использован для проверки состояния канала.

set load-balancing wan rule <rule>#

Создает правило <id> для балансировки WAN интерфейсов.

set load-balancing wan rule <rule> inbound-interface <interface>#

Определяет внутренний LAN интерфейс <interface> для правила балансировки <rule>.

set load-balancing wan rule <rule> interface <interface>#

Определяет внешний WAN интерфейс <interface> для правила балансировки <rule>.

set load-balancing wan rule <rule> interface <interface> weight <number>#

Задает вес <number> внешнего WAN интерфейса <interface> для правила балансировки <rule>.

set load-balancing wan rule <rule> limit <parameter>#

Задает значение <parameter> ограничения пропускной способности для исходящего трафика в правиле балансировки <rule>.

set load-balancing wan rule <rule> per-packet-balancing#

Активирует механизм балансировки пакетов для исходящего трафика в определенном правиле балансировки <rule>

set load-balancing wan rule <rule> exclude#

Исключает трафик, определенный в правиле <rule> из балансировки.

set load-balancing wan interface-health <interface> failure-count <number>#

Задает количество неудачных результатов проверки <number>, по достижении которого WAN канал будет помечен, как недоступный. Допустимые значения данного параметра находятся в диапазоне от 1 до 10. Значение по умолчанию - 1.

set load-balancing wan interface-health <interface> success-count <number>#

Задает количество успешных результатов проверки <number>, по достижению которого WAN канал будет снова отмечен, как доступный. Допустимые значения данного параметра находятся в диапазоне от 1 до 10. Значение по умолчанию - 1.

set load-balancing wan interface-health <interface> test <number>#

Создает тест <number> для проверки работоспособности канала внешнего интерфейса маршрутизатора <interface>.

set load-balancing wan interface-health <interface> test <id> resp-time <number>#

Задает значение максимального времени ожидания ответа на сообщение ICMP Echo Request в секундах. Допустимые значения находятся в диапазоне от 1 до 30. Значение по умолчанию - 5.

set load-balancing wan interface-health <interface> test <id> target <text>#

Задает идентификатор хоста-получателя, в адрес которого будут отправляться сообщения ICMP Echo Request. Допустимые значения - адрес IPv4 или символьное имя хоста.

set load-balancing wan interface-health <interface> test <id> test-script <text>#

Добавляет пользовательский скрипт <text>, описывающий характер проверки. Скрипт должен возвращать 0 для обозначения успешного результата и значение отличное от 0 - для неудачного результата. Стандартное расположение скриптов - /config/scripts. При использования нестандартного расположения необходимо указывать полный путь до файла скрипта.

set load-balancing wan interface-health <interface> test <id> ttl-limit <number>#

Определяет количество переходов между каждой парой шлюзов на пути к хосту-получателю, которое используется для тестов с использованием протокола UDP и атрибута TTL. Критерием успешности является получение в ответ сообщения ICMP Time Expired. Значение по умолчанию - 1;

set load-balancing wan interface-health <interface> test <id>  type <ping|ttl|script>#

Определяет тип теста. Допустимое значение - ping, ttl, script.

set load-balancing wan disable-source-nat#

Отключает настройки правил SNAT для механизма балансировки WAN каналов.

set load-balancing wan sticky-connections inbound#

Активирует механизм привязки соединения к конкретному интерфейсу. При получении на определенном сетевом интерфейсе входящего сетевого пакета с запросом от клиента, пакет с ответом отправлялся с того же сетевого интерфейса.

set load-balancing wan rule <number> failover#

Активирует режим отказоустойчивости для правила балансировки <number>.

set load-balancing wan flush-connections#

Выполняет очистку таблицы соединений при изменении состояния активного канала WAN.

restart wan-load-balance#

Выполняет перезапуск сервиса балансировки.

Мониторинг#

show wan-load-balance#

Выводит информацию о работе сервиса балансировки, включая типы тестов и список хостов-получателей.

При выводе на экран соответствующей информации используются следующие символы для обозначения результатов тестов:

  • + - тест пройден успешно;

  • - - тест не пройден из-за ошибки;

  • пустое значение - ни один из тестов не пройден

    Пример работы команды show wan-load-balance:

admin@fakel:~$ show wan-load-balance
Interface:  eth0
Status:  failed
Last Status Change:  Tue Jun 11 20:12:19 2019
- Test:  ping  Target:
    Last Interface Success: 55s
    Last Interface Failure: 0s
    # Interface Failure(s): 5

Interface:  eth1
Status:  active
Last Status Change:  Tue Jun 11 20:06:42 2019
+ Test:  ping  Target:
    Last Interface Success: 0s
    Last Interface Failure: 6m26s
    # Interface Failure(s): 0
show wan-load-balance connection#

Выводит информацию о трафике, к которому был применен механизм балансировки.

Пример работы команды show wan-load-balance connection:

fakel@fakel:~$ show wan-load-balance connection
conntrack v1.4.2 (conntrack-tools): 3 flow entries have been shown.
Type    State           Src                     Dst                     Packets Bytes
tcp     TIME_WAIT       10.1.1.13:38040         203.0.113.2:80          203.0.113.2  192.168.188.71
udp                     10.1.1.13:41891         198.51.100.3:53         198.51.100.3 192.168.188.71
udp                     10.1.1.13:55437         198.51.100.3:53         198.51.100.3 192.168.188.71