Балансировка нагрузки на WAN-линках встает довольно часто и у многих, и в отличие от других вещей, которые можно настроить на оборудовании MikroTik быстро и безболезненно – в случае настройки Load Balancing придется постараться. Тема относительно сложная, наличие нескольких WAN-линков и задача по настройке балансировки нагрузки включает в себя настройку нескольких шлюзов и маршрутов по умолчанию, множество правил трансляции NAT и так далее.
НАСТРОЙКА МАРШРУТИЗАТОРА
Итак, в наличие у нас имеется один маршрутизатор MikroTik 951Ui-2HnD, который подключен к двум провайдерам через антенны, на портах ether1 и ether2 соответственно, и локальной сетью. Трафик из локальной сети будет NATиться из обоих WAN портов и будет сбалансирован по нагрузке.
Настраиваем локальные IP-адреса:
/ip address add address=192.0.2.2/24 interface=ether1-isp-1 add address=198.51.100.2/24 interface=ether2-isp-2 add address=192.168.20.1/24 interface=bridge-local
Настраиваем шлюзы по умолчанию:
/ip route add dst-address=0.0.0.0/0 check-gateway=ping gateway=192.0.2.1,198.51.100.1
Настраиваем NAT на WAN портах для исходящего направления:
/ip firewall nat add action=masquerade chain=srcnat out-interface=ether1 add action=masquerade chain=srcnat out-interface=ether2
Если оставить только этот пример настройки, то если один из линков “отвалится”, то вместо него будет использоваться второй. Однако, никакой балансировки нагрузки здесь нет.
ИСХОДЯЩАЯ И ВХОДЯЩАЯ MANGLE МАРКИРОВКА
Одной из типичных проблем при использовании более одного WAN-соединения является то, что пакеты принятые на одном WAN интерфейсе, могут тут же быть отправлены через другой WAN-интерфейс, что может, к примеру, сломать VPN-based сеть. Нам нужно чтобы пакеты “принадлежащие” одному и тому же соединению принимались и отправлялись через один и тот же WAN порт. В случае аварии у одного из провайдеров, все подключения на порту “умрут” и затем будут переподключены на другом WAN порту. Для этого необходимо промаркировать соединения:
/ip firewall mangle add action=mark-connection chain=input in-interface=ether1 new-connection-mark="CON-IN-ISP-1" add action=mark-connection chain=input in-interface=ether2 new-connection-mark="CON-IN-ISP-2"
Это поможет маршрутизатору отслеживать порт для каждого входящего подключения.
Теперь мы будем использовать отметку подключения для входящих пакетов для вызова отметки маршрутизации. Это отметка маршрутизации будет использована позднее на маршруте, который будет сообщать подключению через какой WAN-порт необходимо слать пакеты наружу.
add action=mark-routing chain=output connection-mark="CON-IN-ISP-1" new-routing-mark="ROUTE-ISP-1" add action=mark-routing chain=output connection-mark="CON-IN-ISP-2" new-routing-mark="ROUTE-ISP-2"
Помеченные подключения затем получают метку маршрута, так что роутер сможет маршрутизировать пакеты так, как нам необходимо. В следующем шаге мы настроим роутер таким образом, чтобы помеченные пакеты отправлялись наружу из корректного WAN-подключения.
МАРКИРОВКА LAN МАРШРУТА
Понадобится также настроить несколько Mangle правил – они необходимы, чтобы сообщить роутеру о необходимости балансировки пакетов, которые отправляются из локальной сети. Сам механизм балансировки в этой статье не описывается, можно только сказать что происходить много операций хеширования – если же интересно копнуть глубже, то вы можете обратиться к официальной документации MikroTik. В соответствии с этими правилами маршрутизатор будет балансировать трафик приходящий на bridge-local, который направлен на любой нелокальный адрес в Интернете. Мы захватываем трафик в цепочке предварительной маршрутизации для перенаправления его на необходимый нам WAN-порт в соответствии с меткой маршрутизации.
Следующие команды балансируют трафик на LAN-интерфейсе через две группы:
add action=mark-routing chain=prerouting dst-address-type=!local in-interface=bridge-local new-routing-mark= "ISP-1-OUT" passthrough=yes per-connection-classifier= both-addresses-and-ports:2/0 add action=mark-routing chain=prerouting dst-address-type=!local in-interface=bridge-local new-routing-mark= "ISP-2-OUT" passthrough=yes per-connection-classifier= both-addresses-and-ports:2/1
Настройка меток маршрутизации выше была выполнена точно такие же как и в предыдущем шаге и соответствуют тем маршрутам, которые будут созданы в следующем шаге.
ОСОБЫЕ МАРШРУТЫ ПО УМОЛЧАНИЮ.
В данный момент у нас должны быть помечены соединения поступающие на WAN-порты и эти метки были использованы для создания меток маршрутизации. Балансировка нагрузки в LAN, описанная в предыдущем шаге, также создает метки маршрутизации в соответствии со следующим шагом, в котором будут созданы маршруты по умолчанию, которые будут захватывать трафик с данными метками маршрутизации.
/ip route add distance=1 gateway=192.0.2.1 routing-mark="ISP-1-OUT" add distance=1 gateway=198.51.100.1 routing-mark="ISP-2-OUT"
Данные маршруты используются только при наличии необходимой метки маршрутизации. Непомеченные пакеты используют обычный маршрут по умолчанию.
Маршруты, относящиеся к Тарс Телеком получают метку подключения, которая вызывает метку маршрутизации. Эта метка маршрутизации совпадает с меткой в маршруте выше и обратный пакет выходит из того же интерфейса, на котором был получен изначальный пакет.
Итого, теперь у нас настроена балансировка трафика для двух WAN-соединений.