Mikrotik переключение на резервный канал. Mikrotik. Два провайдера. Автоматическое переключение между шлюзами (без скриптов)

В этой статье описана самая полная инструкция, как настроить роутер MikroTik на два провайдера.

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

Для обеспечения отказоустойчивого интернет-канала вам понадобится роутер, который поддерживает настройку на несколько провайдеров. Роутеры MikroTik прекрасно подходят для данной задачи.

Описание подключений

В примере мы будем использовать роутер MikroTik RB951Ui-2HnD .

В 1-ый порт роутера подключен кабель от 1-го провайдера, во 2-ой порт подключен кабель от 2-го провайдера, порты 3-5 и Wi-Fi используются для подключения компьютеров локальной сети.

1-й порт будет настроен на динамическое получение сетевых настроек от провайдера по DHCP. Провайдер выдает роутеру динамический IP-адрес 10.10.10.10

2-й порт будет настроен вручную на статический IP-адрес 20.20.20.20, шлюз 20.20.20.1 и маску 255.255.255.0

Сброс конфигурации по умолчанию

С помощью программы Winbox сбрасываем заводскую конфигурацию по умолчанию, чтобы настроить роутер MikroTik на два провайдера с нуля:


После перезагрузки в Winbox выберите в списке MAC адрес устройства, и подключитесь с пользователем admin без пароля.

Настройка 1-го WAN порта

Настраиваем 1-й порт на динамическое получение сетевых настроек от провайдера по DHCP.

  1. Откройте меню IP - DHCP Client ;
  2. В появившемся окне в списке Interface выберите интерфейс ether1 ;
  3. Add Default Route выберите No ;
  4. Нажмите кнопку OK .

Теперь мы получили IP адрес от провайдера, который отображается в столбце IP Address .

Проверим, что есть подключение к интернет. Откройте меню New Terminal и введите команду ping ya.ru . Как видите, пинг есть.

Настройка 2-го WAN порта

2-й порт настраиваем на статический IP-адрес 20.20.20.20, шлюз 20.20.20.1 и маску 255.255.255.0

  1. Откройте меню IP - Addresses ;
  2. Нажмите кнопку Add (синий крестик);
  3. В появившемся окне в поле Address пропишите статический IP адрес / маску подсети 20.20.20.20/24 ;
  4. В списке Interface выберите интерфейс ether2 ;
  5. Нажмите кнопку OK .

Настоим IP-адрес интернет шлюза:

  1. Откройте меню IP - Routes ;
  2. Нажмите кнопку Add (синий крестик);
  3. В появившемся окне в поле Gateway пропишите IP адрес шлюза 20.20.20.1 ;
  4. Нажмите кнопку OK .

Добавим IP-адрес DNS сервера:

  1. Откройте меню IP - DNS ;
  2. В поле Servers пропишите IP адрес DNS сервера, например 8.8.8.8 ;
  3. Уберите галочку Allow Remote Requests ;
  4. Нажмите кнопку OK .

Проверим, что есть подключение к интернет. Отключите кабель первого провайдера, откройте меню New Terminal и введите команду ping ya.ru .

Пинги идут, значит все настроено правильно. Можно подключить кабель первого провайдера обратно.

Настройка LAN портов 3-5 и Wi-Fi

LAN порты 3-5 будут объединены с Wi-Fi интерфейсом в единую локальную сеть, к которой будут подключаться компьютеры.

Объединяем LAN порты 3-5 в свитч

  1. Откройте меню Interface ;
  2. Сделайте двойной щелчок мыши по интерфейсу ether4;
  3. В списке Master Port выберите ether3 (главный порт нашего свитча);
  4. Нажмите кнопку ОК .

Повторите тоже самое для интерфейса ether5 .

Напротив портов ether4 и ether5 появится буква S (Slave - ведомый).

Создаем интерфейс Bridge-local и объединяем в нем LAN порты и Wi-Fi

Чтобы LAN порты 3-5 объединить с Wi-Fi в одну сеть, нужно создать bridge интерфейс, и добавить в него мастер порт свитча ether3 и Wi-Fi интерфейс wlan1 .

Создаем интерфейс bridge-local :

  1. Откройте меню Bridge ;
  2. Нажмите кнопку Add (синий крестик);
  3. В поле Name пропишите имя интерфейса bridge-local ;
  4. Нажмите кнопку OK .

Добавляем главный порт свитча ether3 в bridge-local :

  1. Перейдите на вкладку Ports и нажмите кнопку Add (синий крестик);
  2. В списке Interface выберите главный ethernet порт свитча ether3 ;
  3. В списке Bridge выберите интерфейс bridge-local ;
  4. Нажмите кнопку OK .

Добавляем Wi-Fi интерфейс в bridge-local :

  1. На вкладке Ports нажмите кнопку Add (синий крестик);
  2. В списке Interface выберите беспроводной интерфейс wlan1 ;
  3. В списке Bridge выберите интерфейс bridge-local ;
  4. Нажмите кнопку OK .

Назначаем IP-адрес интерфейсу bridge-local :

  1. Откройте меню IP - Addresses ;
  2. Нажмите кнопку Add (синий крестик);
  3. В поле Address введите IP-адрес и маску локальной сети 192.168.88.1/24 ;
  4. В списке Interface выберите интерфейс локальной сети bridge-local ;
  5. Нажмите кнопку OK .

Настраиваем DHCP сервер локальной сети.

Чтобы компьютеры, подключенные к роутеру, получали сетевые настройки автоматически, настроим DHCP сервер:


Настройка Wi-Fi

Сначала включим Wi-Fi:

  1. Откройте меню Wireless ;
  2. Нажмите левой кнопкой мыши на интерфейсе wlan1 и нажмите кнопку Enable (синяя галочка).

Создаем пароль для подключения к точке доступа MikroTik:

  1. Откройте вкладку Security Profiles и сделайте двойной щелчок левой кнопкой мыши по default ;
  2. В появившемся окне в списке Mode выберите dynamic keys ;
  3. Поставьте галочку напротив регистрации по протоколу WPA2 PSK ;
  4. В поле WPA2 Pre-Shared Key введите пароль для подключения к Wi-Fi точке;
  5. Нажмите кнопку OK .

Настраиваем параметры Wi-Fi точки MikroTik:

  1. Откройте вкладку Interfaces и сделайте двойной щелчок левой кнопкой мыши на Wi-Fi интерфейсе wlan1 , чтобы зайти в его настройки;
  2. Перейдите на вкладку Wireless ;
  3. В списке Mode выберите режим работы ap bridge ;
  4. В списке Band выберите 2GHz-B/G/N (в каких стандартах будет работать Wi-Fi точка);
  5. В списке Channel Width укажите ширину канала 20/40Mhz HT Above , чтобы беспроводные устройства смогли подключиться на максимальной скорости с шириной канала 40 МГц;
  6. В списке Frequency укажите, на какой частоте будет работать Wi-Fi;
  7. В поле SSID укажите имя Wi-Fi сети;
  8. Нажмите кнопку OK .

Настройка NAT

Чтобы компьютеры получили выход в интернет, необходимо настроить NAT.

Добавляем правило NAT для первого провайдера:


Добавляем правило NAT для второго провайдера:


Теперь на подключенных к роутеру компьютерах должен появиться интернет. Проверьте это.

Настройка переключения интернет каналов между двумя провайдерами

Для настройки переключения интернет каналов между двумя провайдерами будем использовать маршруты (Routes) и встроенную утилиту Netwatch .

У нас будет два маршрута, через которые может идти интернет трафик. Весь трафик будет идти по умолчанию через 1-го провайдера.

Если вдруг пропадет связь с 1-ым провайдером, то мы активируем 2-ой маршрут, и весь трафик пойдет через 2-го провайдера.

Как только восстановится связь через 1-го провайдера, мы деактивируем 2-ой маршрут, и весь трафик пойдет через 1-го провайдера.

Утилита Netwatch поможет пинговать ip-адрес в интернете и выполнять скрипты, если ip-адрес перестал пинговаться или снова начал. Она будет выполнять активацию и деактивацию маршрута.

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

  1. Откройте меню IP - Routes ;
  2. Кликните левой кнопкой мыши по маршруту первого провайдера со шлюзом 10.10.10.1 unrechable ;
  3. Нажмите кнопку удалить (красный минус).

Теперь изменим параметры маршрута второго провайдера:


  1. Откройте меню IP - DHCP Client ;
  2. Сделайте двойной щелчок левой кнопкой мыши на интерфейсе ether1 ;
  3. Перейдите на вкладку Status ;
  4. Выпишите IP-адрес шлюза из поля Gateway . Он будет нужен при создании маршрута через первого провайдера.

Теперь добавляем маршрут через первого провайдера:


3-й маршрут понадобится для того, чтобы сервер Google по умолчанию пинговался только через 1-го провайдера.


Также добавим в Firewall правило, которое запретит пинговать ip-адрес 8.8.4.4 через 2-го провайдера. Иначе утилита Netwatch подумает, что связь с 1-ым провайдером восстановилась, и будет постоянно переключать маршруты по кругу.


Netwatch будет проверять связь с интернетом путем пингования сервера Google с IP-адресом 8.8.4.4. Как только сервер перестанет пинговаться, выполнится скрипт, который активирует 2-й маршрут и трафик пойдет через 2-го провайдера. Как только связь через 1-го провайдера восстановится, то выполнится другой скрипт, который деактивирует 2-й маршрут и трафик пойдет через 1-го провайдера.


Проверка переключения интернета между двумя провайдерами

Проверим, как работает переключение между двумя провайдерами.


Настройка роутера MikroTik на два провайдера работает правильно. Теперь можно увеличить интервал пингования сервера Google.


На этом настройка маршрутизатора Микротик на два провайдера завершена.

Введение

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

Есть два основных способа настройки работы устройств МикроТик для работы с двумя провайдерами в режиме резервирования. Кратко их можно охарактеризовать, как "быстрый способ" и "комплексный способ". Первый способ является быстрым для настройки. Что явно следует из названия. Второй способ является более сложным в настройке, но при этом лишен недостатков, которые присущи первому способу.

Схема сети

Внешняя сеть:
Интернет-канал №1
IP-адреса маршрутизатора: 10.1.100.1
IP-адреса провайдера: 10.1.100.254
маска: 255.255.255.0

Интернет-канал №2
IP-адреса маршрутизатора: 10.1.200.1
IP-адреса провайдера: 10.1.200.254
маска: 255.255.255.0

Внутренняя сеть:
IP-адреса маршрутизатора: 192.168.15.1
маска: 255.255.255.0

Быстрый способ

Через графический интерфейс

Приведенные ниже манипуляции подразумевают, что вы уже настроили IP-адреса двум внешним интерфейсам, прописали маршруты и сделали правила masquerade.

Если у вас статические IP-адреса от обоих провайдеров, то простейшая настройка резервирования сводится к установке приоритетов маршрутов на первого и второго провайдера.

Зайти в IP => Routes и для маршрута на Провайдера-1 указываем Check Gateway=ping и Distance=5. В настройках маршрута на Провайдера-2 указываем Check Gateway=ping и Distance=10. Значения параметра Distance не обязательно должны быть такими. Важно, что бы значения для Провайдера-1 было меньше чем для Провайдера-2. Как правило, статические маршруты имеют приоритет (Distance ) равный единице. Для примера мы привели другое значение. При такой схеме весь трафик будет идти через Провайдера-1, путь через Провайдера-2 будет резервным. Шлюзы обоих провайдеров будут периодически пинговаться, и при недоступности шлюза Провайдера-1 маршрут на него будет отключен, а трафик пойдет по маршруту на Провайдера-2. После того, как шлюз Провайдера-1 станет опять доступным трафик опять пойдет через него.

Недостатком данной схемы является то, что в ней проверяется не наличие Интернета, а именно доступность следующего узла. Часто встречаются ситуации, когда оборудование провайдера (следующий узел) доступно, а интернета нет. Очень яркий пример это Интернет через ADSL-модем. Соседний узел (ADSL-модем) будет доступным, а Интернет нет.

Для первого Интернет-канала:


Для второго Интернет-канала:


Через консоль

Первый маршрутизатор:

/ip route
add check-gateway=ping distance=5 gateway=10.1.100.254

Второй маршрутизатор:

/ip route
add check-gateway=ping distance=10 gateway=10.1.200.254

Комплексный способ

Через графический интерфейс

Приведенные ниже манипуляции подразумевают, что вы уже настроили IP-адреса двум внешним интерфейсам, прописали маршруты и сделали правила NAT.

"Комплексный" способ основан на том, что с помощью встроенной утилиты "Netwatch", мы будем один раз в минуту проверять доступность интернета с помощью команды ping до узла 8.8.4.4 через первый интернет канал. Доступ до этого узла через второй Интернет-канал будет всегда закрыт. Таким образом если ping проходит - это значит, что первый канал находится в рабочем состоянии и он должен быть включен, а 2-ой канал должен быть выключен. И наоборот: если ping не проходит - это значит, что первый канал не работает и он должен быть выключен и включен 2-ой канал. Как только ping начнет проходить произойдет обратной переключение. Нужный маршрут утилита будет определять по комментарию, который мы назначим. Как видите этот способ лишен недостатка первого способа.

Добавить комментарии к маршрутам. К маршруту через первого провайдера добавить комментарий ISP1, к маршруту через второго провайдера добавить комментарий ISP2. Приведем пример для первого провайдера. Для второго действие делается аналогично.


Создать статический маршрут до 8.8.4.4. В IP => Routes создать маршрут до адреса 8.8.4.4 через шлюз 1-го интернет провайдера.


Добавить правило блокирующее доступ к 8.8.4.4 через 2-ой WAN-интерфейс.




Добавить условие переключения. В Tools => Netwatch на вкладке «Host» создать новый "Netwatch host". В графе "Host" указать отслеживаемый ip-адрес, в "Interval" - частоту осуществляемых проверок, а в "Timeout" - время недоступности хоста при котором сработает триггер.

Примечание: В примере указан адрес 8.8.8.8. Это опечатка. Должен быть адрес 8.8.4.4



На вкладке "Up" добавить скрипт следующего содержания:
/ip route set disabled=no
/ip route set disabled=yes


На вкладке "Down" добавить скрипт следующего содержания:
/ip route set disabled=yes
/ip route set disabled=no


Через консоль

/ip route
set comment=ISP1
set comment=ISP2

/ip route
add distance=1 dst-address=8.8.4.4/32 gateway=10.1.100.254

/ip firewall filter
add action=drop chain=output dst-address=8.8.4.4 out-interface=ether4-WAN2 protocol=icmp comment="Deny 8.8.4.4 through reserved internet-channel"

/tool netwatch
add down-script="/ip route set disabled=yes\r\
\n/ip route set disabled=no" host=8.8.4.4 \
up-script="/ip route set disabled=no\r\
\n/ip route set disabled=yes"

Проверка

Видеокурс по MikroTik

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

Д оброе время суток. Замарочился я на днях организацией отказоустойчивости своего CCR1036-8G-2S+. Перелопатил много материала в интернете, но большинство из них мне не подходило. И тут я наткнулся на полезную которая целиком и полностью подходит для решения моих задач. Изложенная ниже настройка 100% рабочий вариант.


Мы уже рассматривали вариант подключения двух провайдеров Интернет к одному маршрутизатору, под управлением операционной системы Mikrotik RouterOS . Однако, это был самый простой вариант. Который не всегда может подойти в тех или иных условиях. Поэтому сегодня, мы возьмем ряд конкретных примеров настройки маршрутизатора с условием подключения к двум провайдерам, и более подробно остановимся на некоторых нюансах настройки Firewall, NAT, маршрутизации и балансировки нагрузки или использования второго канала в качестве резервного.

И так как дальнейший рассказ будет с конкретными примерами, то и начнем его с конкретных условий. У нас есть 2 провайдера. Связь с обоими устанавливается посредством протокола PPPoE. Как настроить соединение с провайдером, подробно описано в этой статье, поэтому этот процесс мы пропустим. Обозначив лишь то, что провайдер №1 у нас подключен к порту Ether1, и имя его PPPoE подключения - ISP1. Провайдер №2, подключен к порту Ether2 и имеет имя PPPoE подключения - ISP2.

Единственный момент, это то, что мы в дальнейшем, будем самостоятельно создавать правила маршрутизации, поэтому при создании подключений к провайдерам, необходимо убрать галочку с пункта Add Default Route на вкладке Dial Out для PPPoE соединения.

NAT

Чтобы наша сеть правильно работала и имела доступ в интернет, нам необходимо настроить NAT. Для этого открываем раздел IP -> Firewall, переходим на вкладку NAT и кнопкой “+”, добавляем новое правило.

На вкладке General, цепучку Chain выбираем scrnat. Значение поля Out. Interface, в данном случае, мы оставляем не заполненным, так как у нас два провайдера, и соответственно 2 разных интерфейса.

Затем на вкладке Action, в качестве параметра для поля Action, ставим значение masquerade.

Сохраняем правило кнопкой OK. Настройку NAT, можно считать законченной.

Firewall

Следующий наш шаг, это настройка функции Firewall, которая призвана защитить нашу локальную сеть.

Переходим на вкладку Filter Rules, где нам предстоит создать ряд основных правил, согласно которым, будет организованно прохождение пакетов через наш маршрутизатор .

Если у вас есть в этом разделе какие либо правила, то их следует сперва удалить.

Новые правила, можно добавлять нажатием кнопки “+”, после чего, например для правила разрешающего ping - chain=input protocol=icmp action=accept, на вкладке General, мы выбираем цепочку Chain - input, а протокол Protocol - icmp.

После чего, на вкладке Action, в качестве параметра для поля Action, выбираем acept.

Это действие, необходимо повторить порядка 14 раз, для четырнадцати разных правил.
Разрешаем Ping

chain=input protocol=icmp action=accept

chain=forward protocol=icmp action=accept

Разрешаем установленные соединения

chain=input connection-state=established action=accept

chain=forward connection-state=established action=accept

Разрешаем родственные соединени я

chain=input connection-state=related action=accept

chain=forward connection-state=related action=accept

Запрещаем не удачные соединения

Chain=input connection-state=invalid action=drop

chain=forward connection-state=invalid action=drop

Разрешаем соединения по протоколу UDP

chain=input protocol=udp action=accept

chain=forward protocol=udp action=accept

Открываем доступ в Интернет для нашей локальной сети. Для тех, у кого префикс локальной сети, отличается от 192.168.0.0/24, поставить вместо этого, свои адрес.

chain=forward src-address=192.168.0.0/24 action=accept

Разрешаем доступ к роутеру, только из локальной сети, как и выше - 192.168.0.0/24 стоит заменить своим адресом.

chain=input src-address=192.168.0.0/24 action=accept

И в конце, запрещаем все остальное

chain=input action=drop

chain=forward action=drop

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

ip firewall filter add chain=input protocol=icmp action=accept

ip firewall filter add chain=forward protocol=icmp action=accept

ip firewall filter add chain=input connection-state=established action=accept

ip firewall filter add chain=forward connection-state=established action=accept

ip firewall filter add chain=input connection-state=related action=accept

ip firewall filter add chain=forward connection-state=related action=accept

ip firewall filter add chain=input connection-state=invalid action=drop

ip firewall filter add chain=forward connection-state=invalid action=drop

ip firewall filter add chain=input protocol=udp action=accept

ip firewall filter add chain=forward protocol=udp action=accept

ip firewall filter add chain=forward src-address=192.168.0.0/24 action=accept

ip firewall filter add chain=input src-address=192.168.0.0/24 action=accept

ip firewall filter add chain=input action=drop

ip firewall filter add chain=forward action=drop

Но каким бы методом, мы это не делали, в итоге, мы должны получить следующее.

Routing
Последним, но одним из самых важных действий, осталось создание маршрутов. Начнем с того, что пометим наши соединения с провайдером. Это необходимо для того, чтобы все пришедшие на интерфейс того или иного провайдера запросы, уходили именно на его интерфейс. Это довольно критично в том случае, если у нас за NAT, есть какие либо ресурсы, к которым необходимо обеспечить доступ из глобальной сети Интернет. Например web-сервер или почтовый сервер и т.д. О том как организовать работу таких сервисов, мы уже рассматривали в статье Расширенные настройки Mikrotik RouterOS : перенаправление портов - dstna t.

Для этого, нам необходимо создать два отдельных правила, для каждого провайдера в разделе IP -> Firewall на вкладке Mangle.

На вкладке General, выбираем цепочку Chain как forward, а в качестве In.Interface выбираем интерфейс PPPoE подключения первого провайдера ISP1.

А на вкладке Action, в качестве параметра Action, выбираем mark connection и в появившемся ниже поле New Connection Mark, вписываем имя метки для этого соединения, например ISP1-con.

То же самое, повторяем для второго провайдера. Только в качестве In.Interface выбираем ISP2, а в поле New Connection Mark, вписываем метку для второго соединения ISP2-con.

Теперь, чтобы отправить ответ на пришедший запрос через интерфейс того же провайдера, нам необходимо создать еще 2 правила, которые будут помечать маршруты.

Здесь же, создаем новое правило в котором в качестве цепочки Chain, выбираем значение prerouting, в поле Scr.Address вписываем префикс нашей локальной сети 192.168.0.0/24, а Cjnnection Mark выбираем метку соединения нашего первого провайдера ISP1-con.

Переходим на вкладку Action и в поле Action, выбираем mark routing, а в появившемся ниже поле New Routing Mark, присваиваем метку для маршрута этого провайдера, например ISP1-rt.

Точно такое же привило, создаем и для второго соединения. Только, соответственно, в качестве Connection Mark выбираем ISP2-con, а в качестве New Routing Mark, вписываем ISP2-rt.

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

Например у провайдера №2 - ISP2 есть локальные ресурсы имеющие диапазон адресов 181.132.84.0/22. А через провайдера №1, пинг к игровым серверам онлайн игр, гораздо меньше. И мы знаем что IP адреса этих серверов 90.231.6.37 и 142.0.93.168.

Переходим на вкладку Address Lists раздела IP -> Firewall. И по одному добавляем эти IP адреса или подсети целиком, с именами to-ISP1 или to-ISP2, в зависимости от того, через какого провайдера должно быть обращение к этим ресурсам.

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

А на вкладке Action, Action - mark routing, New Routing Mark - ISP1-rt.

Повторяем тоже самое, для списка адресов второго провайдера. Но соответственно в качестве Dst.Address List, указываем список адресов для второго провайдера to-ISP2. А в качестве метки для маршрута New Routing Mark - ISP2-rt.

И приступаем к самой основной части настройки маршрутизации - созданию статических правил маршрутизации в разделе IP -> Routes.

Если каналы наших обоих провайдеров, практически равны, то добавляем вот такой маршрут: но вкладке General, окна создания маршрута, для Dst.Address пишем 0.0.0.0/0, а в качестве Getway выбираем интерфейсы наших провайдеров ISP1 и ISP2. Все остальные параметры, оставляем без изменений.

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

Если же мы хотим сделать так, что бы второй провайдер у нас был запасным, и “включался” только в случае, когда не доступен или сильно загружен первый, то создаем два маршрута.

Первый Dst.Address - 0.0.0.0/0, Gateway - ISP1.

А второй Dst.Address - 0.0.0.0/0, Gateway - ISP2, Distance - 2.

И еще, необходимо создать два отдельных маршрута, для каждого из провайдеров, куда будут уходить помеченные нами ранее маршруты. Отличатся они будут тем, что в поле Routing Mark будет указана метка, которую мы присваивали ранее, для того или иного провайдера.

Первый будет иметь Dst.Address - 0.0.0.0/0, Gateway - ISP1, Routing Mark - ISP1-rt, а второй, соответственно Dst.Address - 0.0.0.0/0, Gateway - ISP2, Routing Mark - ISP2-rt


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

> Резервирование каналов на Mikrotik без скриптов

Mikrotik. Failover. Load Balancing

Когда у меня встала необходимость разобраться, как сделать failover или load balancing, имея два и более каналов в мир, я нашел множество статей и инструкций, в которых описывались рабочие конфигурации. Но почти нигде не нашел разъяснения, как все работает, и описания отличий разных вариантов. Хочу исправить эту несправедливость и собрать простейшие варианты построения failover и load balancing конфигураций в одной статье.

Итак, у нас есть роутер, который соединяет нашу локальную сеть и два канала в интернет (основной ISP1 и резервный ISP2).

Давайте рассмотрим что же мы можем сделать:

У нас появился резервный канал, в который можно направить трафик при отказе основного. Но как сделать, чтобы mikrotik понял, что канал упал?

Простейшее резервирование каналов

Простейший failover можно настроить, используя приоритет маршрута (distance у mikrotik/cisco, metric в linux/windows), а так же механизм проверки доступности шлюза - check-gateway.

В приведенной ниже конфигурации весь интернет трафик по умолчанию ходит через 10.100.1.254 (ISP1). Но как только адрес 10.100.1.254 станет недоступным (а маршрут через него неактивным) - трафик пойдет через 10.200.1.254 (ISP2).

конфигурация: простейший failover


# Настроим сети провайдеров:





###Обеспечение резервирования каналов традиционным способом###
# укажем 2 default gateway с разными приоритетами
/ip route add dst-address=0.0.0.0/0 gateway=10.100.1.254 distance=1 check-gateway=ping
/ip route add dst-address=0.0.0.0/0 gateway=10.200.1.254 distance=2 check-gateway=ping

Check-gateway=ping для mikrotik обрабатывается так:
Периодически (каждые 10 секунд) шлюз проверяется отсылкой на него ICMP пакета (ping). Потерянным пакет считается, если он не вернулся в течении 10 секунд. После двух потерянных пакетов шлюз считается недоступным. После получения ответа от шлюза он становится доступным и счетчик потерянных пакетов сбрасывается.

Обеспечение failover с более глубоким анализом канала.

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

Я знаю два варианта решения этой инженерной задачи. Первый и самый распространенный - использовать скрипты, но так как в этой статье мы скрипты не трогаем, остановимся подробнее на втором. Он подразумевает не совсем корректное использование параметра scope, но поможет нам прощупать канал провайдера глубже, чем до шлюза.
Принцип прост:
Вместо традиционного указания default gateway=шлюз провайдера, мы скажем роутеру что default gateway это какой-то из всегда_доступных_узлов (например 8.8.8.8 или 8.8.4.4) и он в свою очередь доступен через шлюз провайдера.

конфигурация: failover с более глубоким анализом канала

# Настроим сети провайдеров:
/ip address add address=10.100.1.1/24 interface=ISP1
/ip address add address=10.200.1.1/24 interface=ISP2
# Настроим локальный интерфейс
/ip address add address=10.1.1.1/24 interface=LAN
# скроем за NAT все что выходит из локальной сети
/ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat
###Обеспечение failover c более глубоким анализом канала###
#с помощью параметра scope укажем рекурсивные пути к узлам 8.8.8.8 и 8.8.4.4
/ip route add dst-address=8.8.8.8 gateway=10.100.1.254 scope=10
/ip route add dst-address=8.8.4.4 gateway=10.200.1.254 scope=10
# укажем 2 default gateway через узлы путь к которым указан рекурсивно
/ip route add dst-address=0.0.0.0/0 gateway=8.8.8.8 distance=1 check-gateway=ping
/ip route add dst-address=0.0.0.0/0 gateway=8.8.4.4 distance=2 check-gateway=ping

Теперь разберем, что происходит чуть подробнее:
Хитрость в том, что шлюз провайдера не знает о том, что 8.8.8.8 или 8.8.4.4 - это роутер и направит трафик по обычному пути.
Наш mikrotik считает, что по умолчанию весь интернет трафик нужно отправлять на 8.8.8.8, который напрямую не виден, но через 10.100.1.254 доступен. А если пинг на 8.8.8.8 пропадает (напомню что путь к нему у нас жестко указан через шлюз от ISP1) то mikrotik начнет слать весь интернет трафик на 8.8.4.4, а точнее на рекурсивно определенный 10.200.1.254 (ISP2).

На дистрибьютерском форуме юзер под ником Barvinok начал писать
цикл статей, пытаясь объединить и систематизировать накопленную базу
знаний по Mikrotik в целом и по теме двух провайдеров в частности. С его
позволения я копирну все к себе на страничку. Желающие могут сходить к
первоисточнику http://mikrotik.ru/forum/viewtopic.php?f=1 5&t=3280
Настройка роутера с нуля.
Этим разделом восполню скудность прикладной части.
Согласно названию темы я настраиваю роутер именно на двух провайдеров. Модель роутера я подразумеваю RB7xx series.
Источники:
Обзор и настройка Mikrotik RB751U-2HnD в режиме беспроводного роутера с подключением к сети Интернет.
Сергей Лаговский: MikroTik - Начальная настройка

Источника
читать обязательно. Я не будут писать руководство "Микротик для
домохозяек", типа "возьмите кабель в правую руку...". Здесь я обозначу
лишь вехи, ступени. А как именно это делать - в вышеозначенных
источниках.
Я пользуюсь командной строкой терминала через Winbox и все примеры буду приводить именно в таком виде.
1. Сбрасываем начальные настройки:

/system reset-configuration


2. Скачиваем Upgrade package и мышкой перетаскиваем в Winbox. Далее:

/system reboot

и после перезагрузки:

/system routerboard upgrade


3. Создаю мост из последних трёх портов:

/interface bridge
add name=Local_Net
add bridge=Local_Net interface=ether3
add bridge=Local_Net interface=ether4
add bridge=Local_Net interface=ether5


4. Назначаю этому мосту IP-адрес:

/ip address add address=192.168.1.1/24 interface=Local_Net


5. Настраиваем на нём же DHCP-сервер:

/ip dhcp-server setup

В качестве DNS-сервера пусть выдаёт адрес самого Микротика: 192.168.1.1. Чуть позже поясню, почему так.

6. Разрешаем роутеру отвечать на запросы DNS:

/ip dns set allow-remote-requests=yes

Переведём дух: теперь мы добились коробочной функциональности D-Link:)

7. По совету Сергея Лаговского я всегда меняю имя суперпользователя:

/user add name=supername password=superpass group=full
/quit

Заходим под новым пользователем и отключаем старого:

/user disable admin

8. Назначаем сервер времени и часовой пояс:

/system ntp client set enabled=yes mode=unicast primary-ntp=83.229.137.52 secondary-ntp=213.141.146.135
/system clock set time-zone-name=Europe/Moscow

9. Настраиваем интернет-подключения.
Я возьму сложный случай двух неравнозначных провайдеров:


  • Первый
    провайдер даёт интернет через PPPoE по ADSL: 8Мбит входящий/0,8 Мбит
    исходящий. IP-адрес и прочие сетевые настройки выдаются провайдером
    динамически.

  • Второй - очень качественный, но дорогой по оптике: симметричный канал 1 Мбит. IP-адрес и настройки статические (постоянные)

Значица нам нужно основной поток пользователей запустить через ADSL, а избранные сервисы реального времени (VoIP) - по оптике.

9.1. Настраиваем первого провайдера.
Переводим наш ADSL-модем в режим моста (Bridge). Втыкаем кабель в первый порт (ether1).
Создаём и настраиваем интерфейс PPPoE:

/interface pppoe-client add name=UTK user=ppp_user password=ppp_pasw use-peer-dns=yes interface=ether1

Если бы провайдер был единственный, можно было бы добавить "add-default-route=yes ". Но у нас другая задача.
"use-peer-dns " означает, что мы будем использовать DNS-сервера, назначенные провайдером при этом подключении.

/ip address print
/ping mail.ru

что бы убедиться, что соединение работает.

9.2. Настраиваем второго провайдера.
Втыкаем кабель из конвертера среды во второй порт и вводим настройки вручную:

/ip address add address=80.45.21.34/30 interface=ether2

Если провайдер даёт свои DNS-сервера, можно их явно задать:

/ip dns set servers=ip_server1,ip_server2

А можем назначить любые общедоступные, вроде гугловских: 8.8.8.8,8.8.4.4.

Напомню,
что благодаря п.6 наш маршрутизатор является DNS-сервером для локальной
сети. Но сам он, как ласковое теля - двух маток сосёт, произвольно
обращаясь к DNS-серверам любого провайдера.

10. Включаем трансляцию адресов.
Для провайдера 1:

/ip firewall nat add chain=srcnat action=masquerade protocol=tcp out-interface=UTK


Можно так же поступить и для второго, но мы поэстетствуем . Поскольку адрес у нас постоянный, используем не masquerade, а SNAT:

/ip firewall nat add chain=srcnat action=src-nat protocol=tcp src-address=192.168.1.0/24 to-addresses=80.45.21.34

Если бы наши провайдеры были равнозначны, то можно было бы сделать так:

/ip route add dst-address=0.0.0.0/0 gateway=UTK,ether2 check-gateway=ping

Мы сразу получаем отказоустойчивость и равномерное распределение нагрузки (равноценные пути).
Советую для пробы так сделать и поиграться с компьютеров локалки в
"tracert mail.ru", отключая то один, то другой внешний интерфейс -
просто, что б проверить.
Если провайдеры не равны лишь толщиной канала, можно поступить так:

/ip route add dst-address=0.0.0.0/0 gateway=UTK,UTK,ether2 check-gateway=ping

Теперь через первого провайдера пойдёт вдвое больше потоков, чем через второго.

Но наша задача чуть сложнее, поскольку провайдеры не равны не только количественно, но и качественно .
11. Поэтому мы отдельно назначим им маршруты и дадим разные предпочтения (distance).
Для первого провайдера проще всего сделать так:

/interface pppoe-client set 0 add-default-route=yes

Хотя мы могли это сделать и в п.9.1, но я решил выделить для порядка.
Для второго провайдера - так:

/ip route add dst-address=0.0.0.0/0 gateway=80.45.21.34 distance=2 check-gateway=ping


Теперь вся наша сеть ходит через провайдера 1, а если он падает - через провайдера 2.

12. Выделим важные потоки (Skype, SIP), которые нужно отправлять в сеть через провайдера 2.

Здесь я сделаю отступление, посвящённое маркировке (отметке) пакетов и соединений, поскольку эта тема достаточно любопытна.

Отступление 4
Маркировка

Используется
для установки меток для определенных пакетов. Это действие может
выполняться только в пределах таблицы mangle. Установка меток обычно
используется для нужд маршрутизации пакетов по различным маршрутам, для
ограничения трафика и т.п.. За дополнительной информацией вы можете
обратиться к Linux Advanced Routing and Traffic Control HOW-TO. Не
забывайте, что "метка" пакета существует только в период времени пока
пакет не покинул брандмауэр, т.е. метка не передается по сети. Если
необходимо как-то пометить пакеты, чтобы использовать маркировку на
другой машине, то можете попробовать манипулировать битами поля TOS.


Manual:IP/Firewall/Mangle на Mikrotik Wiki.

При
прочтении и написании правил важно очень ясно понимать, где мы
указываем признак, по которому выделяем пакет из потока, а где
производим действие с пакетом (принимаем, отбрасываем или клеймим таким
признаком).
Рассмотрим два правила из статьи о PCC :
/ip firewall mangle

add

in-interface=ether2 new-connection-mark=l2tp-out1_conn passthrough=yes
per-connection-classifier=src-address:2/0 src-address=172.16.0.0/16
add
action=mark-connection chain=prerouting dst-address-type=!local
in-interface=ether2 new-connection-mark=l2tp-out2_conn passthrough=yes
per-connection-classifier=src-address:2/1 src-address=172.16.0.0/16

add
action=mark-routing chain=prerouting connection-mark=l2tp-out1_conn
in-interface=ether2 new-routing-mark=to_l2tp-out1 passthrough=yes
add
action=mark-routing chain=prerouting connection-mark=l2tp-out2_conn
in-interface=ether2 new-routing-mark=to_l2tp-out2 passthrough=yes

В первом правиле мы помечаем соединение (action=mark-connection) в цепочке prerouting. Далее следуют признаки ,
по которым мы определяем соединение, должное быть помеченным: вид
адреса назначения - любой, кроме адреса самого маршрутизатора
(dst-address-type=!local), входящий интерфейс - ether2
(in-interface=ether2), адрес источника - любой компьютер из подсети
172.16.0.0/16. Далее следует чудная команда:
per-connection-classifier=src-address:2/0. Так мы разбиваем поток
пакетов, соответствующих этим признакам, надвое.
После чего одной части потока назначаем метку l2tp-out1_conn, а второй l2tp-out2_conn.
Passthrough
переводится как "насквозь". Вообще-то каждый пакет последовательно
проверяется на соответствие каждому правилу до первого совпадения. Как
только совпало - он тут же передаётся в следующую таблицу (в данном
случае - DNAT) или уничтожается, если действие DROP. Но если указано
passthrough=yes, пакет передаётся следующему по списку правилу в этой же
таблице.

Следующим правилом мы ставим отметку о предпочтительном
пути дальнейшего следования (action=mark-routing). Все соединения,
отмеченные l2tp-out1_conn (connection-mark) мы вдобавок клеймим меткой
to_l2tp-out1 (new-routing-mark). А потом и со второй половиной потока
поступаем соответственно.

В чем глубинный смысл этого последовательного клеймения и почему нельзя сразу ставить new-routing-mark, я пока что не понял. Но в официальном руководстве на Микротик Wiki делается так же.
Может кто-то объяснит?

Вообще, существует три действия со сходным названием, в которых не мешало бы разобраться:


  • mark-connection

  • mark-packet

  • mark-routing

Начнём с простого.

mark-routing
- place a mark specified by the new-routing-mark parameter on a packet.
This kind of marks is used for policy routing purposes only

Это действие ставит метку, которая используется исключительно при выборе пути дальнейшей пересылки. К примеру:

/ ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 routing-mark=to_ISP1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 routing-mark=to_ISP2 check-gateway=ping


Но на случай обрыва одного из путей, следует в добавок делать общие правила без привязки к меткам:

add dst-address=0.0.0.0/0 gateway=10.111.0.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 distance=2 check-gateway=ping

А вот чем отличаются mark-packet от mark-connection?
Очевидно, тем же, чем отличается пакет от соединения.
Читаем :

Marking
each packet is quite resource expensive especially if rule has to match
against many parameters from IP header or address list containing
hundreds of entries

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

Цитата:

Fortunately if connection tracking is enabled, we can use connection marks to optimize our setup.

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

/ip firewall mangle
add chain=forward protocol=tcp port=!80 dst-address-list=first connection-state=new action=mark-connection \
new-connection-mark=first
add chain=forward connection-mark=first action=mark-packet new-packet-mark=first passthrough=no

Add chain=forward protocol=udp dst-address-list=second connection-state=new action=mark-connection \
new-connection-mark=second
add chain=forward connection-mark=second action=mark-packet new-packet-mark=second passthrough=no


Цитата:

Now
first rule will try to match data from IP header only from first packet
of new connection and add connection mark. Next rule will no longer
check IP header for each packet, it will just compare connection marks
resulting in lower CPU consumption. Additionally passthrough=no was
added that helps to reduce CPU consumption even more.


Значица, первое правило проверяет данные лишь в заголовке первого пакета нового соединения, считая, что в пределах этого соединения все прочие будут с ним совпадать. Следующее правило, вместо того, что бы проверять заголовок каждого пакета смотрит только на метку соединения, что значительно снижает нагрузку на CPU. В добавок правило "passthrough=no" сразу прерывает прохождение пакетов по этой таблице переводя в следующую, что так же разгружает CPU!

Ооу... Хитрый приём! Теперь понятно, почему в примере с PCC мы сначала помечали соединение, а потом на основании этой метки ставили второю - о маршрутизации.
Но возникают вопросы.
Первый: а как можно понять, что пакет принадлежит тому или иному соединению не заглянув в его заголовок? Очевидно - никак. Значит каждый пакет в любом случае обрабатывается отдельно, но происходит это за пределами IPTables и это не вызывает особой нагрузки на центральный процессор, в отличии от обработки по списку правил внутри IPTables.

И второй вопрос: как можно пометить соединение?
Если с пакетом всё относительно понятно: у него есть заголовок, в который мы вносим изменения, то что является вещественным выражением понятия "соединение", с которым мы можем хоть как-то работать? Что мы помечаем?

В продолжение темы:
Интернет

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

Новые статьи
/
Популярные