Задача: реализовать сбалансированную нагрузку на двух провайдеров интернет с учетом входящего трафика.
Реализовывать будем на роутере Mikrotik. В качестве двух каналов интернет будут использованы профессиональные роутеры Tandem-4GL-OEM с 4G мобильным интернетом.
Первоначальная настройка роутера подробно описана в статье Настройка роутера Mikrotik
В качестве интернет - интерфейсов WAN будут 2 DHCP-клиента с разными IP адресами
Итак, 2 канала интернет работают, локальная сеть и Wi-Fi объединены в Bridge.
1. Создаем новые маршруты.
Перейдите в меню IP - Routes, Нажмите + (Добавить новый маршрут)
Требуется поставить "маркер" на маршруты каждого интернет-канала.
Заполните все поля как на картинке ниже, в поле Gateway введите шлюз вашего провайдера
Требуется поставить "маркер" на маршруты каждого интернет-канала.
Заполните все поля как на картинке ниже, в поле Gateway введите шлюз вашего провайдера
Сейчас нужно создать маршруты локальной сети с "маркерами" каждого интернет-канала
Нажимаем +, вводим данные как на картинке.
- В поле Dst. Address вводим пул адресов вашей локальной сети. (192.168.10.0/24 означает пул 192.168.10.0 - 192.168.10.255)
- В поле Gateway выбираем Bridge вашей локальной сети
Создайте еще один маршрут аналогично, за исключением Routing Mark: isp1.
В итоге должно получиться 4 новых маршрута
2. Настройка Firewall Mangle. Для обработки маркированных пакетов в RouterOS Mikrotik использется утилита Mangle.
Перейдите в меню IP - Firewall - вкладка Mangle.
Здесь нужно создать 3 правила. Нажмите + и заполните поля как на картинке. Данные вводятся на вкладках General и Action.
В поле Dst. Address введите пул адресов вашей локальной сети.
Добавьте еще одно правило. Нажмите + и заполните поля как на картинке. Данные вводятся на вкладках General и Action.
Первое правило обнаруживает все не промаркированные (новые) подключения, которые идут не в нашу локальную сеть, а следовательно пойдут через WAN интерфейс и маркирует их нужной меткой. Второе правило подключениям с нужной меткой назначает марк роутинга. Comment служит для того что бы мы могли найти это правило скриптом.
3. Создание скрипта сравнения загруженности каналов.
Переходим в меню System - Scripts и создаем новый скрипт кнопкой +. В поле Name вводим имя скрипта
В поле Source впишите скрипт:
:global rx1 "0"
:global rx2 "0"
/interface monitor WAN1 once do={
:global rx1 $("rx-bits-per-second");
}
/interface monitor WAN2 once do={
:global rx2 $("rx-bits-per-second");
}
:local one 20000000
:local two 8000000
:global wan1 ($one / $rx1)
:global wan2 ($two / $rx2)
if ($wan1>$wan2) do={/ip firewall mangle set [find comment=multiwan] new-routing-mark=isp1} else={/ip firewall mangle set [find comment=multiwan] new-routing-mark=isp2}
Сначала мы обнуляем переменные, потом получаем в эти переменные данные о загруженности интерфейсов (количество получаемых бит в секунду, за что отвечает параметр rx-bits-per-second). Далее в переменные one и two вписываем ширину каждого интернет-канала в битах, и получаем относительную загруженность. Затем сравниваем: если число больше у первого WAN то в наш Mangle вписываем Router mark для WAN1, иначе к WAN2.
4. Задаем периодичность выполнения скрипта
- Перейдите в меню System - Sheduler и нажмите +.
- Введите имя задержки выполнения в поле Name.
- В поле Interval введите интервал повторения скрипта. Мы установили 5 секунд
- В поле On Event введите: /system script run erazel_balancing
Теперь мы имеем полностью автоматическую систему балансировки нагрузки на внешние интерфейсы в зависимости от их относительной загруженности.