Динамическая и статическая маршрутизация в MikroTik
Для регулирования последовательностью движения трафика, в свойствах маршрута(route) есть атрибут Distance. Значением этого атрибута и нужно манипулировать для указания в какой из интернет каналов в будет убегать трафик.
Настройка находится в IP->Routes
При появлении 2-ого провайдера нужно контролировать значение Distance. Есть два пути для этого действия:
Создание статического маршрута
На примере DHCP client: необходимо зафиксировать шлюз, который указан в динамическом маршруте.
Отключить добавление маршрута по умолчанию
Настройка находится в IP->DHCP client
Создать статический маршрут, где
Dst. Address = 0.0.0.0/0;
Gateway = зафиксированный шлюз.
Настройка находится в IP->Routes
Также этот способ является методом по умолчанию описания свойств интернет подключения для статического IP адреса.
Указать Distance в типе подключения
- PPPoe
- DHCP клиент
Настройка находится в PPP->Interface
Автоматическое переключение между двумя провайдерами в MikroTik
Это пример будет состоять из двух линий интернета – основной и резервной. Резервная линия будет включать лишь тогда, когда основная будет недоступной.
В маршрутизаторах(роутерах) MikroTik чаще всего используют два самых распространённых метода по ограничиванию скорости для локальных подключений:
- С резервированием канала. Имеет популярность в QOS трафике – звук и видео, тем самым не позволяет создавать прерывания при загрузке общего канала.
- Равномерное распределение ширины канала на всех участников. Продуктивный способ использования интернет канала на всю ширину.
И масса других вариантов, когда можно комбинировать оба способа в разной последовательности. В рамках данной статьи рассмотрим п.2, как более часто встречаемое в частном и корпоративном сегменте.
Для использования метода для автоматического переключения, маршруты нужно привести значением:
Провайдер-1 Distance = 1;
Настройка находится в IP->Routes
Провайдер-2 Distance = 2.
Методы указания Distance возлагаются на фантазию специалиста по настройке MikroTik.
Как работает автоматическое переключение интернета в MikroTik
Как было уже описано ранее, в основе конфигурации две линии интернета – основная и резервная. Штатная работа маршрутизации заключается в полном использовании основной линии, в то время как резервная будет простаивать.
Настройка находится в IP->Routes
Но как только основная линия станет недоступной, на основании значения Distance произойдет переключение на резервную линию. Резервная линия будет оставаться в работе до тех пора, пока интернет на основной линии не восстановится. Это полностью автоматический процесс.
Не работает автоматические переключение интернета в MikroTik
Достаточная большая часть статических маршрутов с указанным Distance и параметром Ping может не отработать при отсутствии интернета на основном канале. В этом случае стоит обратиться к утилите Netwatch, которая лучше отработает сценарий при изменении состояния интерфейса с UP на DOWN и в обратную сторону. Как правильно настроить правила для переключения между провайдера используя утилиту Netwatch в MikroTik рассмотрено в статье “Настройка резервирования интернета в MikroTik, автопереключение провайдера через Netwatch →”
Одновременное использование двух провайдеров в MikroTik
Будет рассмотрена ситуация, когда нужно использовать одновременно две линии интернета по принципу:
- Группа-1(192.168.0.2-192.168.0.100) – через провайдера-1;
- Группа-2(192.168.0.101-192.168.0.200) – через провайдера-2;
Различные варианты это схемы чаще всего используются для серверов, но также и популярны в сетях с большой нагрузкой.
Для удобства редактирования групп будут созданы Address List, в которые необходимо добавлять или удалять узлы, которые будут назначать или провайдеру-1 или провайдеру-2.
Настройка находится в IP->Firewall-Address Lists
Подготовленные адрес листы, а точнее маршруты в интернет нужно промаркировать с помощью Mangle
Маркировка маршрутов Mangle
Настройка находится в IP->Firewall-Mangle
/ip firewall mangle add action=mark-routing chain=prerouting dst-address=!192.168.0.0/24 \ new-routing-mark=Group-1-Route passthrough=yes src-address-list=Group-1
Аналогичную маркировку в разделе Mangle нужно создать для Group-2.
Создание статического маршрута для маркированных узлов
Настройка находится в IP->Routes
/ip route add gateway=10.10.10.10 routing-mark=Groupe-1-Route add gateway=11.11.11.11 routing-mark=Groupe-2-Route
Стоит обратить внимание на параметр Distance, в этой схеме он не участвует. Но если нужно расширить эту схему автоматическим переключением на резервную линию между провайдерами, достаточно добавить два статических маршрута со значением distance 1 и 2.
Балансировка нагрузки между двумя интернет провайдерами в MikroTik
Пропускная способность канала и его стабильность выносятся за рамки данной настройки. Предположим есть две линии интернета по 100мб.
Настройка находится в IP->Routes
Суть этого правила в том, что первый узел будет переадресован к провайдеру-1, а второй – к провайдеру-2. Если ширина каналов не равномерная, к примеру у первого провайдера 50Мб, а у второго 100Мб, то правило можно привести к виду
Балансировка и резервирование в MikroTik используя NTH
Можно также применить схему, в которой каждое соединение будет промаркировано по принципу:
четный-пакет = провайдер-1
нечетный-пакет = провайдер-2
/ip firewall mangle add dst-address=!192.168.0.0/24 src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=Groupe-1-Route nth=2,1 add dst-address=!192.168.0.0/24 src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=Groupe-2-Route nth=2,2 /ip route add distance=1 gateway=10.10.10.10 routing-mark=Groupe-1-Route check-gateway=ping add distance=1 gateway=11.11.11.11 routing-mark=Groupe-2-Route check-gateway=ping add distance=2 gateway=11.11.11.11 routing-mark=Groupe-1-Route add distance=2 gateway=10.10.10.10 routing-mark=Groupe-2-Route
Такой подход к балансировке будет совмещать два свойства: балансировка + резервирование.
Балансировка. Когда оба провайдера будут работать, нагрузка будет распределяться 50:50.
Резервирование. Если один из провайдеров перестанет работать – его нагрузка будет назначена второму провайдеру.
Балансировка 2 провайдеров используя Mangle
Этот пример от всех остальных будет отличаться тем, чтобы в рамках настройки внимание также будет уделено соединениям. Переключение станет более мягким и незаметным и это будет достигнуто благодаря маркировке соединений и частичную их очистку при переключении между провайдерами.
Когда работают оба провайдеры, нагрузка распределяется согласно ручному распределению в Address list.
ISP-1=Down & ISP-2=Up → соединения Group-1 очищаются и начинают работать через ISP-2. При этом соединения Group-2 остаются не тронутыми. При восстановлении связи с ISP-1, соединения Group-1 также очищаются и трафик вместо ISP-2 начинает проходить через ISP-1.
ISP-1=Up & ISP-2=Down → соединения Group-2 очищаются и начинают работать через ISP-1. При этом соединения Group-1 остаются не тронутыми. При восстановлении связи с ISP-2, соединения Group-2 также очищаются и трафик вместо ISP-1 начинает проходить через ISP-2.
- ethe1 – провайдер со статическим IP;
- ethe8 – провайдер с динамическим IP.
Разделение сети на два диапазона
/ip firewall address-list add address=192.168.88.25-192.168.88.90 list=Group-1 add address=192.168.88.91-192.168.88.200 list=Group-2 add address=192.168.88.0/24 list=Local-Subnet
Маркировка соединений
#Для входящих и исходящих подключений
/ip firewall mangle add action=mark-connection chain=input in-interface=ether1 new-connection-mark=From-ISP-1 passthrough=yes add action=mark-routing chain=output connection-mark=From-ISP-1 new-routing-mark=To-ISP-1 passthrough=yes add action=mark-connection chain=input in-interface=ether8 new-connection-mark=From-ISP-2 passthrough=yes add action=mark-routing chain=output connection-mark=From-ISP-2 new-routing-mark=To-ISP-2 passthrough=yes
#Маркировка маршрутов для двух отдельных групп
add action=mark-connection chain=prerouting dst-address-list=!Local-Subnet new-connection-mark=To-ISP-1-Connection passthrough=yes src-address-list=Group-1 add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection new-routing-mark=To-ISP-1 passthrough=no src-address-list=Group-1 add action=mark-connection chain=prerouting dst-address-list=!Local-Subnet new-connection-mark=To-ISP-2-Connection passthrough=yes src-address-list=Group-2 add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection new-routing-mark=To-ISP-2 passthrough=no src-address-list=Group-2
Автоматическое добавление маршрутов при изменении шлюза
/ip dhcp-client add add-default-route=no disabled=no interface=ether8 script="{\r\ \n:local rmark \"ISP-2\"\r\ \n:local count [/ip route print count-only where comment=\"ISP-2\"]\r\ \n:if (\$bound=1) do={\r\ \n:if (\$count = 0) do={\r\ \n/ip route add gateway=\$\"gateway-address\" comment=\"ISP-2\" distance=2\ \r\ \n/ip route add gateway=\$\"gateway-address\" comment=\"Netwatch-2\" dista\ nce=1 dst-address=8.8.4.4\r\ \n/ip route add gateway=\$\"gateway-address\" comment=\"Group-2\" distance\ =1 routing-mark=To-ISP-2\r\ \n} else={\r\ \n:if (\$count = 1) do={\r\ \n:local test [/ip route find where comment=\"ISP-2\"]\r\ \n:if ([/ip route get \$test gateway] != \$\"gateway-address\") do={\r\ \n/ip route set \$test gateway=\$\"gateway-address\"\r\ \n}\r\ \n} else={\r\ \n:error \"Multiple routes found\"\r\ \n}\r\ \n}\r\ \n} else={\r\ \n/ip route remove [find comment=\"ISP-2\"]\r\ \n/ip route remove [find comment=\"Netwatch-2\"]\r\ \n/ip route remove [find comment=\"Group-2\"]\r\ \n}\r\ \n}" use-peer-dns=no use-peer-ntp=no
Настройка статической маршрутизации
/ip route add comment=Group-1-1 distance=1 gateway=111.158.227.1 routing-mark=To-ISP-1 add comment=Group-2-1 disabled=yes distance=2 gateway=200.45.147.1 \ routing-mark=To-ISP-1 add comment=Group-2-2 distance=1 gateway=200.45.147.1 routing-mark=To-ISP-2 add comment=Group-1-2 disabled=yes distance=2 gateway=111.158.227.1 \ routing-mark=To-ISP-2 add comment=ISP-1 distance=1 gateway=111.158.227.1 add comment=ISP-2 distance=2 gateway=200.45.147.1 add comment=Netwatch-2 distance=1 dst-address=8.8.4.4/32 gateway=200.45.147.1 add comment=Netwatch-1 distance=1 dst-address=8.8.8.8/32 gateway=\ 111.158.227.1
Настройка netwatch
/tool netwatch add down-script="/ip route disable [find comment=\"ISP-2\"]\r\ \n/ip route disable [find comment=\"Group-2-2\"]\r\ \n/ip route enable [find comment=\"Group-1-2\"]\r\ \nlog warning (\"ISP-2 IS DOWN\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\ onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.4.4 \ up-script="/ip route enable [find comment=\"ISP-2\"]\r\ \n/ip route enable [find comment=\"Group-2-2\"]\r\ \n/ip route disable [find comment=\"Group-1-2\"]\r\ \nlog warning (\"ISP-2 IS UP\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\ onnection\"] do={ /ip firewall connection remove \$i }" add down-script="/ip route disable [find comment=\"ISP-1\"]\r\ \n/ip route disable [find comment=\"Group-1-1\"]\r\ \n/ip route enable [find comment=\"Group-2-1\"]\r\ \nlog warning (\"ISP-1 IS DOWN\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\ onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.8.8 \ up-script="/ip route enable [find comment=\"ISP-1\"]\r\ \n/ip route enable [find comment=\"Group-1-1\"]\r\ \n/ip route disable [find comment=\"Group-2-1\"]\r\ \nlog warning (\"ISP-1 IS UP\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\ onnection\"] do={ /ip firewall connection remove \$i }"
Контроль ICMP запросов через нужный интерфейс
/ip firewall filter add action=drop chain=output comment=Netwatch-1 dst-address=8.8.8.8 out-interface=!ether1 protocol=icmp add action=drop chain=output comment=Netwatch-2 dst-address=8.8.4.4 out-interface=!ether8 protocol=icmp
Одновременный проброс с двух провайдеров в MikroTik
Входящая задача: сделать проброс портов таким образом, чтобы сервер отвечал с того провайдера, с которого пришёл запрос. На практике это может быть Web сервер(443\https), у которого объявлены две DNS записи с двумя внешними IP роутера MikroTik.
/ip firewall mangle add chain=forward action=mark-connection new-connection-mark=From-ISP-1 passthrough=no in-interface=ether1 add chain=prerouting action=mark-routing new-routing-mark=To-ISP-1 connection-mark=From-ISP-1 in-interface=bridge add chain=forward action=mark-connection new-connection-mark=From-ISP-2 passthrough=no in-interface=ether2 add chain=prerouting action=mark-routing new-routing-mark=To-ISP-2 connection-mark=From-ISP-2 in-interface=bridge