MULTIWAN mikrotik

Оригинал статьи

Введение

Данная статья предназначена для начинающих администраторов Mikrotik RouterOS (далее ROS). Он охватывает маршрутизацию с отказоустойчивостью для нескольких несвязанных многодомных интернет-каналов AS, работающих по протоколу IPv4. Он также включает в себя настройки для базовой безопасности. В статье не описывается «автоматический» баланс трафика по каналам из-за того, что реализация его с такими исходными данными предполагает ряд компромиссов и ограничений, которые требуют отдельного рассмотрения. В статье представлены инструменты для «ручного» балансирования, а представленные настройки служат прочной основой для добавления «автоматического» балансирования по крайней мере полудюжиной методов.

Отправная точка

Например, мы выбрали пятипортовый маршрутизатор Mikrotik с ROS v6.45+ или v7+. Он будет направлять трафик между двумя локальными сетями (LAN1 и LAN2) и тремя провайдерами (ISP1, ISP2, ISP3). Подключение к ISP1 имеет статический частный адрес, ISP2 — это публичный адрес, полученный через DHCP, а ISP3 — это публичный адрес с разрешением PPPoE. Диаграмма соединения проиллюстрирована на рисунке:

 +------------------------------------------------------------------+
 |                             Internet                             |
 +-----------+---------------------+-------------------+------------+
            /                      |                    \
   +----------------+     +----------------+    +----------------+
   |      ISP1      |     |      ISP2      |    |      ISP3      |
   | 100.66.66.1/30 |     |  Public IPv4   |    |   Public IPv4  |
   +-------+--------+     +-------+--------+    +-------+--------+
           |                      |                     |
           |                      |                     |
           |                      |                     |
           |                      |                     |
.....................................................................
. +--------+----------+ +---------+---------+ +---------+---------+ .
. |      Ether1       | |      Ether2       | |       Ether3      | .
. |  100.66.66.2/30   | |       DHCP        | |        PPPoE      | .
. +-------------------+ +-------------------+ +-------------------+ .
. +-------------------+                       +-------------------+ .
. |      Ether4       |                       |      Ether5       | .
. | 192.168.88.254/24 |       MikroTik        |   172.16.1.0/23   | .
. +---------+---------+                       +---------+---------+ .
.....................................................................
            |                                           |
            |                                           |
            |                                           |
            |                                           |
   +--------+--------+                         +--------+--------+
   |       LAN1      |                         |       LAN2      |
   | 192.168.88.0/24 |                         |  172.16.0.0/23  |
   +-----------------+                         +-----------------+

Задачи заключаются в следующем:

  1. Включите автоматическую отказоустойчивость для резервного провайдера. Основным провайдером является ISP2, ISP1 в качестве первой резервной копии и ISP3 в качестве второго резервного копирования.
  2. Настройка доступа сети LAN1 к Интернету исключительно через ISP1.
  3. Разрешить приоритетную маршрутизацию трафика из локальных сетей в Интернет через выбранного провайдера на основе адресного списка.
  4. Включите возможность публикации услуг из локальной сети в Интернет (DSTNAT).
  5. Настройте фильтр брандмауэра для обеспечения минимального уровня безопасности от Интернета.
  6. Включите маршрутизатор отправку собственного трафика через любого из трех провайдеров, в зависимости от выбранного исходного адреса.
  7. Убедитесь, что пакеты ответов направляются обратно через канал, из которого они возникли, включая LAN.

NoteПримечание: Мы будем настраивать маршрутизатор с нуля, чтобы убедиться, что нет никаких сюрпризов из-за изменений в конфигурациях по умолчанию «из коробки», которые могут варьироваться от версии к версии. Настройки будут применяться с помощью команд в терминале Winbox. Физическое соединение для конфигурации будет осуществляться через прямое подключение к интерфейсу Ethereum5.

Основной задачей при внедрении мульти-WAN является обеспечение правильной маршрутизации трафика. В частности, независимо от того, на какой канал (каналы) указывает маршрут по умолчанию на нашем маршрутизаторе, он должен вернуть ответ через тот же канал, из которого был получен пакет. Задача ясна. Итак, в чем проблема? В простой локальной сети задача одна и та же, но никто не беспокоится о дополнительных настройках, и проблем нет. Разница в том, что любой маршрутизируемый узел в Интернете доступен через каждый из наших каналов, а не только по одному конкретному каналу, как в простой локальной сети. «Проблема» возникает, когда запрос поступает на IP-адрес для ISP3, но в нашем случае ответ будет выходить через канал ISP2, так как именно там указан шлюз по умолчанию. Он будет отправлен, а затем отброшен провайдером как недействительный.

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

Давайте разберемся с решением на три этапа:

  1. Предварительная установка: на этом этапе мы определим основные конфигурации маршрутизатора, включая локальную сеть, брандмауэр, списки адресов, шпильку NAT и многое другое.
  2. Конфигурация Multi-WAN: На этом этапе мы будем отмечать и сортировать требуемые соединения в таблицы маршрутизации. Это включает в себя определение и классификацию трафика для обеспечения его маршрутизации через правильный интернет-провайдер на основе таких критериев, как адреса источника или назначения.
  3. Подключение к интернет-провайдеру: на этом заключительном этапе мы настроим интерфейсы, которые обеспечивают подключение к Интернету, реализуют маршрутизацию и активируем механизм резервного копирования интернет-канала.

Примечание: Выбор трех различных типов соединений ISP является преднамеренным, чтобы проиллюстрировать, что настройка конфигураций multi-WAN с динамическими адресами не является непреодолимой, и для демонстрации одного из подходов к решению.

Важно! Механизм переключения канала, определяемый distanceрасстоянием стоимости маршрута, использует механизм контрольного шлюза. Сценарии, приведенные в статье, не связаны с бронированием канала, а предназначены для автоматизации разрешения динамических проблем IP на каналах ISP2 и ISP3.

1. 1. Предварительная установка

1.1. Начните с очистки конфигурации маршрутизатора с помощью команды:

/system reset-configuration skip-backup=yes no-defaults=yes

Согласен с «Опасно! Перезагрузить в любом случае? [y/N]: » и после перезагрузки подключиться через Winbox с помощью MAC. На этом этапе конфигурация и пользовательская база очищены.

1.2. В ROS 6.49+ откажитесь от смены пароля для пользователя по умолчанию (выберите «Отменить» в Winbox и нажмите «Ctrl+C» в терминале). Создать нового пользователя:

/user add group=full name=knight password=ultrasecret comment="Not horse"

Войдите в систему как этот пользователь и удалите один по умолчанию:

/user remove admin

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

1.3. Создайте базовые списки интерфейсов для более легкого управления в брандмауэре, настройках обнаружения и других MAC-серверах:

/interface list add name=WAN comment="For Internet"
/interface list add name=LAN comment="For Local Area"

Интерфейсы этикетки с комментариями:

/interface ethernet set ether1 comment="to ISP1"
/interface ethernet set ether2 comment="to ISP2"
/interface ethernet set ether3 comment="to ISP3"
/interface ethernet set ether4 comment="to LAN1"
/interface ethernet set ether5 comment="to LAN2"

И заполнять списки интерфейсов:

/interface list member add interface=ether1 list=WAN comment="to ISP1"
/interface list member add interface=ether2 list=WAN comment="to ISP2"
/interface list member add interface=ether3 list=WAN comment="to ISP3"
/interface list member add interface=ether4 list=LAN comment="to LAN1"
/interface list member add interface=ether5 list=LAN comment="to LAN2"

Примечание: Написание четких комментариев стоит времени и в значительной степени помогает в понимании конфигурации. По соображениям безопасности рекомендуется добавить интерфейс ether3 в список интерфейса «WAN», даже если он не будет нести трафик IP-протокола. Не забудьте добавить интерфейс PPP в список «WAN», как только он будет настроен.

1.4. Скрыть маршрутизатор от обнаружения и управления по MAC от сетей провайдеров:

/ip neighbor discovery-settings set discover-interface-list=!WAN
/tool mac-server set allowed-interface-list=LAN
/tool mac-server mac-winbox set allowed-interface-list=LAN

1.5. Создайте минимальный набор правил фильтрации брандмауэра для защиты маршрутизатора:

/ip firewall filter add action=accept chain=input \
comment="Related Established Untracked Allow" \
connection-state=established,related,untracked

(Разрешает установленные, связанные и неотслеживаемые соединения, инициированные из подключенных сетей или самим маршрутизатором.)

/ip firewall filter add action=accept chain=input \
comment="ICMP from ALL" protocol=icmp

(Разрешает весь трафик ICMP, полезный для устранения неполадок MTU.)

/ip firewall filter add action=drop chain=input comment="All other WAN Drop" \
in-interface-list=WAN

(Выбрасывает весь другой входящий трафик из Интернета.)

/ip firewall filter add action=accept chain=forward \
comment="Established, Related, Untracked allow" \
connection-state=established,related,untracked

(Разрешает установленные и связанные соединения, проходящие через маршрутизатор.)

/ip firewall filter add action=drop chain=forward comment="Invalid drop" \
connection-state=invalid

(Сбрасывает недействительные соединения, проходящие через маршрутизатор. Рекомендовано Mikrotik, но может блокировать законный трафик в некоторых сценариях маршрутизации.)

/ip firewall filter add action=drop chain=forward \
comment="Drop all from WAN not DSTNATed" connection-nat-state=!dstnat \
connection-state=new in-interface-list=WAN

(Предотвращает пакеты из Интернета, которые не прошли через DSTNAT, от прохождения через маршрутизатор, защищая локальные сети от внешних угроз.)

NoteПредположим, что LAN1 и LAN2 являются надежными сетями, и трафик между ними и из них не фильтруется.

1.6. Создать список немаршрутизируемых сетей:

/ip firewall address-list
add address=0.0.0.0/8 comment="\"This\" Network" list=BOGONS
add address=10.0.0.0/8 comment="Private-Use Networks" list=BOGONS
add address=100.64.0.0/10 comment="Shared Address Space. RFC 6598" list=BOGONS
add address=127.0.0.0/8 comment=Loopback list=BOGONS
add address=169.254.0.0/16 comment="Link Local" list=BOGONS
add address=172.16.0.0/12 comment="Private-Use Networks" list=BOGONS
add address=192.0.0.0/24 comment="IETF Protocol Assignments" list=BOGONS
add address=192.0.2.0/24 comment=TEST-NET-1 list=BOGONS
add address=192.168.0.0/16 comment="Private-Use Networks" list=BOGONS
add address=198.18.0.0/15 comment="Network Interconnect Device Benchmark Testing"\
 list=BOGONS
add address=198.51.100.0/24 comment=TEST-NET-2 list=BOGONS
add address=203.0.113.0/24 comment=TEST-NET-3 list=BOGONS
add address=224.0.0.0/4 comment=Multicast list=BOGONS
add address=192.88.99.0/24 comment="6to4 Relay Anycast" list=BOGONS
add address=240.0.0.0/4 comment="Reserved for Future Use" list=BOGONS
add address=255.255.255.255 comment="Limited Broadcast" list=BOGONS

(Этот список включает адреса и сети, не являющиеся маршрутизируемыми в Интернете, и мы будем придерживаться этой конвенции.)

Примечание: Этот список может измениться, поэтому желательно периодически проверять наличие обновлений.

1.7. Настройка DNS для маршрутизатора:

/ip dns set servers=1.1.1.1,8.8.8.8

Примечание: В текущей версии ROS статистически назначенные DNS-серверы имеют приоритет над теми, которые предоставляются динамически. Система отправляет запрос на разрешение имени на первый сервер в списке, переходя на следующий сервер, если текущий недоступен. Тайм-аут значителен — в течение 5 секунд — и система автоматически не возвращается на ранее недоступный сервер, как только он возвращается в сеть. Учитывая такое поведение и наличие мульти-WAN, автор рекомендует не использовать DNS-серверы, предоставляемые интернет-провайдерами.

1.8. Setting Up the Local Network

1.8.1. Настройка статических IP-адресов в интерфейсах локальной сети:

/ip address add interface=ether4 address=192.168.88.254/24 comment="LAN1 IP"
/ip address add interface=ether5 address=172.16.1.0/23 comment="LAN2 IP"

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

Для ROS6:

/ip route rule add dst-address=192.168.88.0/24 table=main comment="to LAN1"
/ip route rule add dst-address=172.16.0.0/23 table=main comment="to LAN2"

Для ROS7:

/routing/rule/add action=lookup dst-address=192.168.88.0/24 table=main comment="to LAN1"
/routing/rule/add action=lookup dst-address=172.16.0.0/23 table=main comment="to LAN2"

Примечание: Это простой и быстрый способ доступа к локальным сетевым адресам с использованием внешних IP-адресов интерфейсов маршрутизатора, независимо от того, по какому каналу ведет маршрут по умолчанию.

1.8.3. При необходимости включить Hairpin NAT для LAN1 и LAN2:

/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN1" out-interface=ether4 src-address=192.168.88.0/24 to-addresses=192.168.88.254
/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN2" out-interface=ether5 src-address=172.16.0.0/23 to-addresses=172.16.1.0

Примечание: Это позволяет пользователям из LAN1 и LAN2 получать доступ к серверам в одном и том же сетевом сегменте через внешний IP (dtnat).

1.9. (Применимо для ROS7) Создать пользовательские таблицы маршрутизации для каждого провайдера:

/routing/table/add disabled=no fib name=to_isp1
/routing/table/add disabled=no fib name=to_isp2
/routing/table/add disabled=no fib name=to_isp3

Примечание: В ROS7 был переосмыслен подход к маркировке и таблицам маршрутизации. Например, в ROS6 опция новой маршрутизации в действии маршрутизации правила множественного правила непосредственно создала новую отметку и связанную с ней таблицу маршрутизации в системе. В ROS7, сродни iproute2 в Linux, пользовательские таблицы должны быть созданы заранее. Только после этого операции с ними становятся доступными в соответствующих правилах.

2. Multi-WAN configuration

2.1. Marking Incoming Connections from Each ISP

For ISP1:

/ip firewall mangle add action=mark-connection chain=prerouting \
comment="Connmark in from ISP1" connection-mark=no-mark in-interface=ether1 \
new-connection-mark=conn_isp1 passthrough=no

Для ISP2:

/ip firewall mangle add action=mark-connection chain=prerouting \
comment="Connmark in from ISP2" connection-mark=no-mark in-interface=ether2 \
new-connection-mark=conn_isp2 passthrough=no

For ISP3:

/ip firewall mangle add action=mark-connection chain=prerouting \
comment="Connmark in from ISP3" connection-mark=no-mark in-interface=pppoe-isp3 \
new-connection-mark=conn_isp3 passthrough=no

NoteПримечание: Если вы следите за этими настройками шаг за шагом, вы можете столкнуться с ошибкой при вводе третьей команды из-за отсутствия интерфейса «pppoe-isp3», который будет настроен позже в разделе 3.3.2. На данный момент вы можете заменить «pppoe-isp3» на «ether3». Не забудьте обновить это до правильного имени интерфейса после заполнения раздела 3.3.2.

Использование connect-mark-not-mark вместо соединения-состояния = new является более универсальным подходом, чтобы избежать маркировки уже обозначенных соединений.

passthrough=no используется, потому что в этом способе реализации повторное маркирование исключается, и обработка может быть остановлена после первого соответствия правил, чтобы ускорить процесс.

Имейте в виду, что на данном этапе мы еще не вмешиваемся в саму маршрутизацию. Эти шаги являются подготовительными. Следующий этап будет включать обработку транзитных перевозок, возвращающихся через установленные соединения к получателям в локальной сети, т.е. пакеты, которые следовали по пути: «Интерфейс ввода» => «Передача» => «Решение о маршрутизации» => «Решение о маршруте» => «Вперед» => «Постная маршрутизация» => «Передача вывода» и достигли места назначения в локальной сети.

Important! In RouterOS, there is no logical distinction between external and internal interfaces. If we trace the path of a response packet, it follows the same logical route as the request: “Input Interface” => “Prerouting” => “Routing Decision” => “Forward” => “Post Routing” => “Output Interface”, with the only difference being that the “Input Interface” for the request is an ISP interface, and for the response, it’s a LAN interface.

2.2. Routing the return transit traffic through the appropriate routing tables

To direct the return transit traffic through the corresponding routing tables, the following commands are used in the RouterOS firewall mangle section:

Для трафика, возвращающегося через ISP1:

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Routemark transit out via ISP1" connection-mark=conn_isp1 \
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp1 passthrough=no

Для трафика, возвращающегося через ISP2:

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Routemark transit out via ISP2" connection-mark=conn_isp2 \
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp2 passthrough=no

Для трафика, возвращающегося через ISP3:

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Routemark transit out via ISP3" connection-mark=conn_isp3 \
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp3 passthrough=no

Примечание: in-interface-list=! WAN указывает, что мы имеем дело только с трафиком из локальной сети, и dst-адрес-тип=! локально гарантирует, что мы не ориентируемся на трафик, предназначенный для собственных интерфейсов маршрутизатора.

The same principle applies to local packets that have reached the router through the path:

“Input Interface” => “Prerouting” => “Routing Decision” => “Input” => “Local Process”

Important!: The response will follow the path:

“Local Process” => “Routing Decision” => “Output” => “Post Routing” => “Output Interface”

2.3. Directing the return local traffic through the appropriate routing tables

To ensure the return local traffic is directed through the correct routing tables, the following commands are set up in the RouterOS firewall mangle section:

Для местного трафика, возвращающегося через ISP1:

/ip firewall mangle add action=mark-routing chain=output \
comment="Routemark local out via ISP1" connection-mark=conn_isp1 \
dst-address-type=!local new-routing-mark=to_isp1 passthrough=no

Для местного трафика, возвращающегося через ISP2:

/ip firewall mangle add action=mark-routing chain=output \
comment="Routemark local out via ISP2" connection-mark=conn_isp2 \
dst-address-type=!local new-routing-mark=to_isp2 passthrough=no

Для местного трафика, возвращающегося через ISP3:

/ip firewall mangle add action=mark-routing chain=output \
comment="Routemark local out via ISP3" connection-mark=conn_isp3 \
dst-address-type=!local new-routing-mark=to_isp3 passthrough=no

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

Отличным «побочным» эффектом такой конфигурации является возможность для переадресации портов DstNAT работать одновременно с обоими интернет-провайдерами (ISP2, ISP3), за исключением ISP1, где у нас есть немаршрутизный адрес. Эта функция имеет решающее значение для таких сценариев, как почтовый сервер с двумя записями MX, указывающими на разные интернет-каналы, или услуга, доступная через DNS-имя, которая разрешает IP-адреса обоих провайдеров.

Для устранения нюансов во взаимодействии локальных сетей с внешними IP-адресами маршрутизатора могут использоваться решения из разделов 1.8.2 и 3.1.2.6.

Furthermore, this marking tool can also be employed to address task 3. This can be implemented as follows:

2.4. Directing traffic from local clients in address lists to the appropriate routing tables

Для маршрутизации трафика от местных клиентов, указанных в списках адресов, к соответствующим таблицам маршрутизации используйте следующие команды в разделе RouterOS:

Для трафика, предназначенного для прохождения через ISP2:

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Address List via ISP1" dst-address-list=!BOGONS new-routing-mark=to_isp1 \
passthrough=no src-address-list=Via_ISP1

Для трафика, предназначенного для прохождения через ISP3:

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Address List via ISP3" dst-address-list=!BOGONS new-routing-mark=to_isp3 \
passthrough=no src-address-list=Via_ISP3

Примечание: Эти правила приведены в качестве примеров. Важно учитывать следующее:
Имея всего два интернет-канала, разумно установить только одно правило для резервного канала.
— С несколькими каналами не имеет смысла создавать правило для основного провайдера.
— Текущие настройки отказоустойчивости позволяют пометить трафику через канал(ы) резервного копирования, если «целевой» интернет-канал выходит из строя.
Помните, что правила обрабатываются последовательно, в том порядке, в котором они написаны. Это имеет решающее значение, если различные списки адресов содержат перекрывающиеся адреса/сети. Без прохода первое правило соответствия вступит в силу; с проходом, последнее будет. Имейте это в виду при указании перекрывающихся сетевых диапазонов в различных «адресных списках», чтобы избежать непреднамеренного поведения маршрутизации.

3.2. Настройка соединений ISP и реализация маршрутизации на основе отметок

3.2.1. Setting up the connection to ISP1:

3.1.1. Configure a static IP address:

/ip address add interface=ether1 address=100.66.66.2/30 comment="ISP1 IP"

3.1.2. Установите статический маршрут:

3.1.2.1. Добавьте маршрут по умолчанию «Экстренный»:

/interface bridge add name=br-lo comment="Loopback interface"
/ip route add distance=254 gateway=br-lo comment="Emergency route"

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

Чтобы улучшить инструмент проверки шлюза для более глубокого анализа состояния канала, рассмотрите возможность использования рекурсивных маршрутов. Суть этого метода заключается в указании маршрута через промежуточный шлюз. Следовательно, проверочный шлюз будет проверять наличие этого промежуточного шлюза, а не шлюза ISP. Для ISP1, ISP2 и ISP3 «испытательные» шлюзы будут 4.2.2.1, 4.2.2.2 и 4.2.2.3, соответственно (это публичные адреса уровня 3DNS). Вы можете выбрать любые другие доступные адреса на основе ваших предпочтений.

3.1.2.2. Set a route to the «Test» address:

/ip route add check-gateway=ping comment="For recursion via ISP1" \
distance=1 dst-address=4.2.2.1 gateway=100.66.66.1 scope=11

Note: In ROS7, the conditions for constructing recursive routes have changed slightly from ROS6. A universal solution suitable for both versions involves ensuring the ‘scope’ value of the «base route» is higher than the ‘target-scope’ and equal to the ‘target-scope’ of the recursive route.

3.1.2.3. Default recursive route for unmarked traffic:

/ip route add check-gateway=ping comment="Unmarked via ISP1" \
distance=2 gateway=4.2.2.1 target-scope=11

Примечание: Использование расстояния = 2 в конфигурациях маршрутизации является преднамеренным, так как ISP1 назначается первым поставщиком резервного копирования в соответствии с требованиями задачи.

3.1.2.4. По умолчанию рекурсивный маршрут для движения с отметкой маршрута «to_isp1»:

Для ROS6:

/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1 \
routing-mark=to_isp1 target-scope=11

Для ROS7 (заменить «маршрутизный маршрут» на «маршрутизный стол»):

/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1 \
routing-table=to_isp1 target-scope=11

Примечание: Здесь мы начинаем использовать подготовительную работу, проделанную в разделе 22. По этому маршруту весь трафик, отмеченный «to_isp1», будет направлен к шлюзу первого провайдера, независимо от текущего активного шлюза по умолчанию в основной таблице.

3.1.2.5. First backup default recursive route for marked traffic of ISPs ISP2 and ISP3:

Для ROS6:

/ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1 \
routing-mark=to_isp2 target-scope=11
/ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1 \
routing-mark=to_isp3 target-scope=11

Для ROS7 (заменить «маршрутизный маршрут» на «маршрутизный стол»):

/ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1 \
routing-table=to_isp2 target-scope=11
/ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1 \
routing-table=to_isp3 target-scope=11

Примечание: Эти маршруты также необходимы для резервного копирования трафика из локальных сетей, которые являются членами адресного списка «to_isp». * *

3.1.2.6. Set a route for local router traffic to the Internet via ISP1:

Для ROS6:

/ip route rule add comment="From ISP1 IP to Inet" src-address=100.66.66.2 table=to_isp1

Для ROS7:

/routing/rule/add action=lookup comment="From ISP1 IP to Inet" \
src-address=100.66.66.2 table=to_isp1

Примечание: В сочетании с правилами раздела 1.8.2 это обеспечивает выходы трафика по намеченному каналу с указанным источником. Это имеет решающее значение для создания туннелей (EoIP, IP-IP, GRE, L2TP и т.д.), где указан IP-адрес локальной стороны. Поскольку правила маршрута выполняются сверху донизу до первого матча, это правило должно быть установлено после правил раздела 1.8.2.

3.1.3. Настройте правило NAT для исходящего трафика:

/ip firewall nat add action=src-nat chain=srcnat comment="NAT via ISP1" \
ipsec-policy=out,none out-interface=ether1 to-addresses=100.66.66.2

Примечание: NAT весь исходящий трафик, за исключением того, что соответствует политике IPsec. Предпочитате использовать «src-nat» вместо «маскарада», когда это возможно, поскольку «маскарад» медленнее и ресурсоемк, потому что он пересчитывает адрес NAT для каждого нового соединения. Однако помните, что «маскарад» имеет такие функции, как очистка соединений, если канал падает, и нюансы относительно выбора адреса, если в интерфейсе есть несколько адресов из разных сетей.

3.1.4. Прямые клиенты из списка, которым запрещено выходить через других провайдеров, прямо в шлюз ISP1

/ip firewall mangle add action=route chain=prerouting \
comment="Address List via ISP1 only" dst-address-list=!BOGONS passthrough=no \
route-dst=100.66.66.1 src-address-list=Via_only_ISP1 place-before=0

Примечание: Действие = маршрут имеет более высокий приоритет и применяется до других правил маршрутизации. Место-до=0 помещает это правило в верхнюю часть списка, гарантируя, что оно обработано в первую очередь.

3.2. Настройка соединения с ISP2

Поскольку ISP2 обеспечивает настройки через DHCP, практично обрабатывать конфигурацию и любые потенциальные изменения через скрипт, вызванный событиями DHCP-клиента. Этот подход гарантирует, что любые обновления, предоставляемые ISP2, такие как изменения в IP-адресе, маске подсети или шлюзе, автоматически применяются без необходимости ручного вмешательства.

ROS6:

/ip dhcp-client
add add-default-route=no disabled=no interface=ether2 script=":if (\$bound=1) do={\r\
    \n   /ip route remove [ find gateway=\"4.2.2.2\" ]; /ip route remove [ find where \
dst-address ~\"4.2.2.2\" ]\r\
    \n   /ip route add check-gateway=ping comment=\"For recursion via ISP2\" distance=1 \
dst-address=4.2.2.2/32 gateway=\$\"gateway-address\" scope=11\r\
    \n   /ip route add check-gateway=ping comment=\"Unmarked via ISP2\" \
distance=1 gateway=4.2.2.2 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP2 Main\" distance=1 gateway=4.2.2.2 \
routing-mark=to_isp2 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP1 Backup1\" distance=2 gateway=4.2.2.2 \
routing-mark=to_isp1 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP3 Backup2\" distance=3 gateway=4.2.2.2 \
routing-mark=to_isp3 target-scope=11\r\
    \n   :if [:tobool ([/ip firewall nat find comment=\"NAT via ISP2\"])] do={\r\
    \n   /ip firewall nat set [find comment=\"NAT via ISP2\"] action=src-nat \
chain=srcnat ipsec-policy=out,none out-interface=\$\"interface\" \
to-addresses=\$\"lease-address\" \r\
    \n    } else={/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=\$\"interface\" to-addresses=\$\"lease-address\" \
    comment=\"NAT via ISP2\"}\r\
    \n   :if [:tobool ([/ip route rule find comment=\"From ISP2 IP to Inet\"])] do={\r\
    \n      /ip route rule set [find comment=\"From ISP2 IP to Inet\"] \
src-address=\$\"lease-address\" table=to_isp2\r\
    \n    } else={/ip route rule add comment=\"From ISP2 IP to Inet\" \
src-address=\$\"lease-address\" table=to_isp2}\r\
    \n} else={\r\
    \n   /ip route remove [find gateway=\"4.2.2.2\"]; /ip route remove [find where \
dst-address ~\"4.2.2.2\"]\r\
    \n   /ip firewall nat remove  [find comment=\"NAT via ISP2\"]\r\
    \n   /ip route rule remove [find comment=\"From ISP2 IP to Inet\"]\r\
    \n}\r\
    \n" use-peer-dns=no use-peer-ntp=no

РОСС7:

/ip dhcp-client
add add-default-route=no dhcp-options=clientid,clientid interface=ether2 \
script=":if (\$bound=1) do={\r\
    \n   /ip route remove [ find gateway=\"4.2.2.2\" ]; /ip route remove \
[ find where dst-address ~\"4.2.2.2\" ]\r\
    \n   /ip route add check-gateway=ping comment=\"For recursion via ISP2\" distance=1 \
dst-address=4.2.2.2/32 gateway=\$\"gateway-address\" scope=11\r\
    \n   /ip route add check-gateway=ping comment=\"Unmarked via ISP2\" \
distance=1 gateway=4.2.2.2 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP2 Main\" distance=1 gateway=4.2.2.2 \
routing-table=to_isp2 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP1 Backup1\" distance=2 gateway=4.2.2.2 \
routing-table=to_isp1 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP3 Backup2\" distance=3 gateway=4.2.2.2 \
routing-table=to_isp3 target-scope=11\r\
    \n   :if [:tobool ([/ip firewall/nat/ find comment=\"NAT via ISP2\"])] do={\r\
    \n   /ip firewall nat set [find comment=\"NAT via ISP2\"] action=src-nat \
chain=srcnat ipsec-policy=out,none out-interface=\$\"interface\" \
to-addresses=\$\"lease-address\" \r\
    \n    } else={/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=\$\"interface\" to-addresses=\$\"lease-address\" \
comment=\"NAT via ISP2\"}\r\
    \n    :if [:tobool ([/routing/rule find comment=\"From ISP2 IP to Inet\"])] do={\r\
    \n      /routing/rule/set [find comment=\"From ISP2 IP to Inet\"] \
action=lookup src-address=\$\"lease-address\" table=to_isp2\r\
    \n    } else={/routing/rule/add action=lookup comment=\"From ISP2 IP to Inet\" \
src-address=\$\"lease-address\" table=to_isp2 }\r\
    \n} else={\r\
    \n   /ip route remove [find gateway=\"4.2.2.2\"]; /ip route remove [find where \
dst-address ~\"4.2.2.2\"]\r\
    \n   /ip firewall nat remove  [find comment=\"NAT via ISP2\"]\r\
    \n   /routing/rule/remove [find comment=\"From ISP2 IP to Inet\"]\r\
    \n}\r\
    \n" use-peer-dns=no use-peer-ntp=no

Вот содержание клиентского сценария DHCP для ROS6 и ROS7, ориентируясь на корпус скрипта:

:if ($bound=1) do={
/ip route remove [ find gateway="4.2.2.2" ]; /ip route remove [ find where \
dst-address ~"4.2.2.2" ]
/ip route add check-gateway=ping comment="For recursion via ISP2" distance=1 \
dst-address=4.2.2.2/32 gateway=$"gateway-address" scope=11
/ip route add check-gateway=ping comment="Unmarked via ISP2" distance=1 \
gateway=4.2.2.2 target-scope=11
/ip route add comment="Marked via ISP2 Main" distance=1 gateway=4.2.2.2 \
routing-mark=to_isp2 target-scope=11
/ip route add comment="Marked via ISP1 Backup1" distance=2 gateway=4.2.2.2 \
routing-mark=to_isp1 target-scope=11
/ip route add comment="Marked via ISP3 Backup2" distance=3 gateway=4.2.2.2 \
routing-mark=to_isp3 target-scope=11
:if [:tobool ([/ip firewall nat find comment="NAT via ISP2"])] do={
/ip firewall nat set [find comment="NAT via ISP2"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=$"interface" to-addresses=$"lease-address"
} else={ /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=$"interface" to-addresses=$"lease-address" comment="NAT via ISP2"}
:if [:tobool ([/ip route rule find comment="From ISP2 IP to Inet"])] do={
/ip route rule set [find comment="From ISP2 IP to Inet"] \
src-address=$"lease-address" table=to_isp2
} else={ /ip route rule add comment="From ISP2 IP to Inet" \
src-address=$"lease-address" table=to_isp2}
} else={
/ip route remove [find gateway="4.2.2.2"]; /ip route remove [find where \
dst-address ~"4.2.2.2"]
/ip firewall nat remove [find comment="NAT via ISP2"]
/ip route rule remove [find comment="From ISP2 IP to Inet"]
}
:if ($bound=1) do={
/ip route remove [ find gateway="4.2.2.2" ]; /ip route remove \
[ find where dst-address ~"4.2.2.2" ]
/ip route add check-gateway=ping comment="For recursion via ISP2" distance=1 \
dst-address=4.2.2.2/32 gateway=$"gateway-address" scope=11
/ip route add check-gateway=ping comment="Unmarked via ISP2" distance=1 \
gateway=4.2.2.2 target-scope=11
/ip route add comment="Marked via ISP2 Main" distance=1 gateway=4.2.2.2 \
routing-table=to_isp2 target-scope=11
/ip route add comment="Marked via ISP1 Backup1" distance=2 gateway=4.2.2.2 \
routing-table=to_isp1 target-scope=11
/ip route add comment="Marked via ISP3 Backup2" distance=3 gateway=4.2.2.2 \
routing-table=to_isp3 target-scope=11
:if [:tobool ([/ip firewall/nat/ find comment="NAT via ISP2"])] do={
/ip firewall nat set [find comment="NAT via ISP2"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=$"interface" to-addresses=$"lease-address"
} else={ /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=$"interface" to-addresses=$"lease-address" comment="NAT via ISP2" }
:if [:tobool ([/routing/rule find comment="From ISP2 IP to Inet"])] do={
/routing/rule/set [find comment="From ISP2 IP to Inet"] action=lookup \
src-address=$"lease-address" table=to_isp2
} else={ /routing/rule/add action=lookup comment="From ISP2 IP to Inet" \
src-address=$"lease-address" table=to_isp2 }
} else={
/ip route remove [ find gateway="4.2.2.2" ]; /ip route remove [ find where \
dst-address ~"4.2.2.2" ]
/ip firewall nat remove [find comment="NAT via ISP2"]
/routing/rule/remove [find comment="From ISP2 IP to Inet"]
}

Примечание: Первая часть сценария выполняется после успешного приобретения аренды DHCP, а вторая часть после освобождения в аренду.note 2

Важно! В некоторых случаях шлюз может не отвечать на запросы ICMP, которые могут возникать с соединениями LTE в режиме пропускания или если провайдер фильтрует ICMP на шлюзе. В таких сценариях для маршрута «Для рекурсии через ISP(x)», вместо check-gateway=ping можно использовать check-gateway=arp.

3.3. Настройка подключения к ISP3

Учитывая, что ISP3 обеспечивает динамические настройки, имеет смысл внедрять необходимые изменения через скрипты, которые запускаются после того, как интерфейс PPP идет вверх и вниз.

Примечание: Интерфейс PPP может быть указан как шлюз вместо IP-адреса. Однако в таком случае использование рекурсивного маршрута становится неосуществимым. Таким образом, мы фиксируем боковой IP-адрес провайдера в переменной и используем его так же, как и для других поставщиков.

3.3.1. Настройка профиля ppp

Для ROS7:

/ppp profile
add comment="for PPPoE to ISP3" interface-list=WAN name=isp3_client \
on-down="/ip route remove [find gateway=\"4.2.2.3\"]\r\
    \n/ip route remove [find where dst-address ~\"4.2.2.3\"]\r\
    \n/ip firewall nat remove  [find comment=\"NAT via ISP3\"]\r\
    \n/ip route rule remove [find comment=\"From ISP3 IP to Inet\"]" \
on-up="/ip route remove [find gateway=\"4.2.2.3\"]; \r\
    \n/ip route remove [find where dst-address ~\"4.2.2.3\"]\r\
    \n/ip route add check-gateway=ping comment=\"For recursion via ISP3\" distance=1 \
dst-address=4.2.2.3/32 gateway=\$\"remote-address\" scope=11\r\
    \n/ip route add check-gateway=ping comment=\"Unmarked via ISP3\" \
distance=3 gateway=4.2.2.3 target-scope=11\r\
    \n/ip route add comment=\"Marked via ISP3 Main\" distance=1 gateway=4.2.2.3 \
routing-mark=to_isp3 target-scope=11\r\
    \n/ip route add comment=\"Marked via ISP1 Backup2\" distance=3 gateway=4.2.2.3 \
routing-mark=to_isp1 target-scope=11\r\
    \n/ip route add comment=\"Marked via ISP2 Backup2\" distance=3 gateway=4.2.2.3 \
routing-mark=to_isp2 target-scope=11\r\
    \n/ip firewall mangle set [find comment=\"Connmark in from ISP3\"] \
in-interface=\$\"interface\"\r\
    \n:if [:tobool ([/ip firewall nat find comment=\"NAT via ISP3\"])] do={\r\
    \n  /ip firewall nat set [find comment=\"NAT via ISP3\"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=\$\"interface\" to-addresses=\$\"local-address\"} \
else={\r\
    \n  /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=\$\"interface\" to-addresses=\$\"local-address\" \
comment=\"NAT via ISP3\"}\r\
    \n:if [:tobool ([/ip route rule find comment=\"From ISP3 IP to Inet\"])] \
do={\r\
    \n  /ip route rule set [find comment=\"From ISP3 IP to Inet\"] \
src-address=\$\"local-address\" table=to_isp3} else={\r\
    \n  /ip route rule add comment=\"From ISP3 IP to Inet\" \
src-address=\$\"local-address\" table=to_isp3 }"

Для ROS7:

/ppp profile
add interface-list=WAN name=isp3_client on-down=\
    "/ip route remove [find gateway=\"4.2.2.3\"]\r\
    \n/ip route remove [find where dst-address ~\"4.2.2.3\"]\r\
    \n/ip firewall nat remove  [find comment=\"NAT via ISP3\"]\r\
    \n/routing/rule/ remove [find comment=\"From ISP3 IP to Inet\"]" \
on-up="/ip route remove [find gateway=\"4.2.2.3\"]; \r\
    \n/ip route remove [find where dst-address ~\"4.2.2.3\"]\r\
    \n/ip route add check-gateway=ping comment=\"For recursion via ISP3\" distance=1 \
dst-address=4.2.2.3/32 gateway=\$\"remote-address\" scope=11\r\
    \n/ip route add check-gateway=ping comment=\"Unmarked via ISP3\" \
distance=3 gateway=4.2.2.3 target-scope=11\r\
    \n/ip route add comment=\"Marked via ISP3 Main\" distance=1 gateway=4.2.2.3 \
routing-table=to_isp3 target-scope=11\r\
    \nip route add comment=\"Marked via ISP1 Backup2\" distance=3 gateway=4.2.2.3 \
routing-table=to_isp1 target-scope=11\r\
    \nip route add comment=\"Marked via ISP2 Backup2\" distance=3 gateway=4.2.2.3 \
routing-table=to_isp2 target-scope=11\r\
    \nip firewall mangle set [find comment=\"Connmark in from ISP3\"] \
in-interface=\$\"interface\"\r\
    \n:if [:tobool ([/ip firewall/nat/ find comment=\"NAT via ISP3\"])] do={\r\
    \n  /ip firewall nat set [find comment=\"NAT via ISP3\"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=\$\"interface\" to-addresses=\$\"local-address\"} \
else={\r\
    \n  /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=\$\"interface\" to-addresses=\$\"local-address\" \
comment=\"NAT via ISP3\"}\r\
    \n:if [:tobool ([/routing/rule/ find comment=\"From ISP3 IP to Inet\"])] do={\r\
    \n  /routing/rule/ set [find comment=\"From ISP3 IP to Inet\"] action=lookup \
src-address=\$\"local-address\" table=to_isp3} else={\r\
    \n  /routing/rule/ add action=lookup comment=\"From ISP3 IP to Inet\" \
src-address=\$\"local-address\" table=to_isp3 }"

Вот содержание для скрипта профиля PPP для ROS6 и ROS7, в котором подробно описаны действия, когда интерфейс PPP поднимается и опускается.

/ip route remove [find gateway="4.2.2.3"]; 
/ip route remove [find where dst-address ~"4.2.2.3"]
/ip route add check-gateway=ping comment="For recursion via ISP3" distance=1 \
dst-address=4.2.2.3/32 gateway=$"remote-address" scope=11
/ip route add check-gateway=ping comment="Unmarked via ISP3" distance=3 \
gateway=4.2.2.3 target-scope=11
/ip route add comment="Marked via ISP3 Main" distance=1 gateway=4.2.2.3 \
routing-mark=to_isp3 target-scope=11
/ip route add comment="Marked via ISP1 Backup2" distance=3 gateway=4.2.2.3 \
routing-mark=to_isp1 target-scope=11
/ip route add comment="Marked via ISP2 Backup2" distance=3 gateway=4.2.2.3 \
routing-mark=to_isp2 target-scope=11
/ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"interface"
:if [:tobool ([/ip firewall nat find comment="NAT via ISP3"])] do={
/ip firewall nat set [find comment="NAT via ISP3"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=$"interface" to-addresses=$"local-address"} else={
/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=$"interface" to-addresses=$"local-address" comment="NAT via ISP3"}
:if [:tobool ([/ip route rule find comment="From ISP3 IP to Inet"])] do={
/ip route rule set [find comment="From ISP3 IP to Inet"] \
src-address=$"local-address" table=to_isp3} else={
/ip route rule add comment="From ISP3 IP to Inet" src-address=$"local-address" \
table=to_isp3 }
/ip route remove [find gateway="4.2.2.3"]
/ip route remove [find where dst-address ~"4.2.2.3"]
/ip firewall nat remove [find comment="NAT via ISP3"]
/ip route rule remove [find comment="From ISP3 IP to Inet"]
/ip route remove [find gateway="4.2.2.3"]; 
/ip route remove [find where dst-address ~"4.2.2.3"]
/ip route add check-gateway=ping comment="For recursion via ISP3" distance=1 \
dst-address=4.2.2.3/32 gateway=$"remote-address" scope=11
/ip route add check-gateway=ping comment="Unmarked via ISP3" distance=3 \
gateway=4.2.2.3 target-scope=11
/ip route add comment="Marked via ISP3 Main" distance=1 gateway=4.2.2.3 \
routing-table=to_isp3 target-scope=11
ip route add comment="Marked via ISP1 Backup2" distance=3 gateway=4.2.2.3 \
routing-table=to_isp1 target-scope=11
ip route add comment="Marked via ISP2 Backup2" distance=3 gateway=4.2.2.3 \
routing-table=to_isp2 target-scope=11
ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"interface"
:if [:tobool ([/ip firewall/nat/ find comment="NAT via ISP3"])] do={
/ip firewall nat set [find comment="NAT via ISP3"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=$"interface" to-addresses=$"local-address"} else={
/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=$"interface" to-addresses=$"local-address" comment="NAT via ISP3"}
:if [:tobool ([/routing/rule/ find comment="From ISP3 IP to Inet"])] do={
/routing/rule/ set [find comment="From ISP3 IP to Inet"] action=lookup \
src-address=$"local-address" table=to_isp3} else={
/routing/rule/ add action=lookup comment="From ISP3 IP to Inet" \
src-address=$"local-address" table=to_isp3 }
/ip route remove [find gateway="4.2.2.3"]
/ip route remove [find where dst-address ~"4.2.2.3"]
/ip firewall nat remove [find comment="NAT via ISP3"]
/routing/rule/ remove [find comment="From ISP3 IP to Inet"]

Примечание : Линия /ip firewall mangle set [find comment=«Connmark in from ISP3»] in-interface=$«interface»;обеспечивает правильную обработку переименования интерфейса, работая с его ID, а не с именем отображения. Этот подход поддерживает правильную связь знаков подключения с динамическим интерфейсом PPP, необходимый для последовательного применения политики в переподключении интерфейса.

3.3.2. Теперь, используя профиль, мы создаем соединение PPPoE:

/interface pppoe-client add allow=mschap2 comment="to ISP3" disabled=no \
interface=ether3 name=pppoe-isp3 password=isp3_pass profile=isp3_client \
add-default-route=no user=isp3_client

Примечание: Некоторые поставщики могут «забыть» отправить параметр «дистанционный адрес». В таких случаях скрипт конфигурации может работать неправильно, и вы можете увидеть такую ошибку в журналах:
pppoe,ppp,info pppoe-isp3: could not determine remote address, using xxx.xxx.xxx.xxx
Чтобы решить эту проблему, отключите контрольно-шлюз для маршрута с комментарием «Для рекурсии через ISP3» и установите любой фиктивный IP-адрес в профиле PPP:

/ip route unset [find comment="For recursion via ISP3"] check-gateway
/ppp profile set isp3_client remote-address=169.254.69.96

Линия
/ip firewall mangle set [find comment=«Connmark in from ISP3»] in-interface=$«interface»;
обеспечивает правильную обработку переименования интерфейса, работая с идентификатором системы, а не с его отображаемым именем.

Final Touch — Настройка часов:

ROS6:

/system ntp client set enabled=yes \
server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org

РОСС7:

/system ntp client set enabled=yes \
servers=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org



Для тех, кто читает до конца:

Представленный здесь метод реализации мульти-WAN является личным предпочтением автора и не является единственным возможным способом. Инструментарий RouterOS является обширным и гибким, что, хотя и потенциально пугает для начинающих, также объясняет его популярность. Продолжайте исследовать, экспериментировать и открывать новые инструменты и решения. Например, в этой реализации с несколькими WAN вы можете заменить Check-шлюзу рекурсивными маршрутами с помощью Netwatch. Кроме того, для повышения надежности вы можете использовать каскад рекурсивных маршрутов, уменьшая количество ложных переключателей во время временной недоступности хоста, выбранного в качестве «базы». Даже при сверхнадежных адресах любых трансляций такие инциденты могут иногда возникать.

Заметки

Вернуться к оглавлению

1. 1. Чек-шлюз

Check-шлюз — это механизм, который позволяет деактивировать маршрут после двух последовательных неудачных проверок доступности шлюза. Проверка выполняется каждые 10 секунд, плюс тайм-аут отклика, в результате чего фактическое время переключения варьируется от 20 до 30 секунд. Если это время переключения недостаточно, одним из вариантов является использование инструмента Netwatch, который позволяет настроить ручную настройку контрольного таймера и использовать пользовательские скрипты для более детального анализа состояния. Механизм чек-шлюза не запускается с периодическими потерями пакетов в канале.
Важно! Активация/деактивация маршрута механизмом контрольного шлюза приводит к активации/деактивации всех других маршрутов, проходящих через тот же шлюз. Поэтому нет необходимости включать контрольно-шлюз для всех связанных маршрутов.

2. 2. DHCP

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

3. 3. ECMP

(Equal Cost Multi-Path) — ROS позволяет устанавливать маршрут с несколькими швами и одинаковым расстоянием. В этом случае соединения будут распределены по каналам с использованием кругового алгоритма, пропорционального количеству заданных шлюзов.