Как стать автором
Обновить

Создание отказоустойчивого шлюза на основе Mikrotik RouterOS

Время на прочтение6 мин
Количество просмотров109K
Стояла задача обеспечить отказоустойчивость работы сетевого маршрутизатора, который должен был поддерживать несколько локальных сетей, три канала в интернет от разных провайдеров, DMZ и десяток VPN соединений для удаленных пользователей.

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

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

В качестве железа было решено использовать обычные PC с процессорами Core 2 Duo, 1 Гб памяти и HDD Flash от Трансенд в качестве накопителя. Оба маршрутизатора разместились в симпатичных MiniTower корусах на полке в серверном шкафу. Версия Mikrotik на тот момент устанавливалась 4.16, но сейчас работает на 5.22

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

Протоколом для обеспечения отказоустойчивости был выбран VRRP. Принцип его в том, что маршрутизаторы имеют приоритет: Master и Slave и через некоторый интервал времени проверяют доступность друг друга. Если Master выйдет из строя — Slave его заменит.

Так как сетевых интерфейсов на маршрутизаторе по числу PCI всего 3 (1 интегрированный не использовали), а подсетей много — использовался также VLAN. При чем на физический интерфейс вешался VRRP, а уже на него VLAN-ы. Все настройки проводились на одном маршрутизаторе. Второй настраивается автоматически.

Настройка интерфейсов


Физичиские ethernet интерфейсы
/interface ethernet
set 0 arp=enabled auto-negotiation=yes cable-settings=default \
disable-running-check=yes disabled=no full-duplex=yes l2mtu=1600 \
mtu=1500 name=lan speed=1Gbps

set 1 arp=enabled auto-negotiation=yes cable-settings=default \
disable-running-check=yes disabled=no full-duplex=yes l2mtu=1600 \
mtu=1500 name=wan speed=1Gbps

Виртуальный VRRP-интерфейс
/interface vrrp
add arp=enabled authentication=none disabled=no interface=lan \
interval=2s mtu=1500 name=vrrp-lan \
preemption-mode=yes priority=101 v3-protocol=ipv4 version=3 vrid=2

Из настроек VRRP интересны 3 параметра
1) interface=lan интерфейс, на который вешается VRRP
2) priority=101 приориет роутера. Мастер или Слейв. Главный тот — у кого больше.
3) preemption-mode=yes если этот режим выключен: после того, как слейв станет мастером, он им и останется, даже когда мастер вернется в строй.

VLAN локальной сети
/interface vlan
add arp=enabled disabled=no interface=vrrp-lan mtu=1500 name=vlan101 \
use-service-tag=no vlan-id=101
add arp=enabled disabled=no interface=vrrp-lan mtu=1500 name=vlan102 \
use-service-tag=no vlan-id=102
add arp=enabled disabled=no interface=vrrp-lan mtu=1500 name=vlan103 \
use-service-tag=no vlan-id=103

VRRP используется только на локальном интерфейсе. Его задачей является контроль работоспособности маршрутизатора в целом и наличие связи с локальной сетью. В случае возникновения проблем, все остальное переключалось скриптом. Такое решение было обусловлено тем, что у меня плохо работал IpSec при VRRP+VLAN на WAN интерфейсе.
VRRP на Mikrotik позволяет использовать маршрутизаторы в режимах балансировки нагрузки или отказоустойчивости. В режиме балансировки отказоустойчивость тоже соблюдается, но для нашей задачи достаточно просто отказоустойчивости, иначе пришлось бы вешать VRRP на все интерфейсы.

Настраиваем адресацию
/ip address
add address=192.168.101.1/24 disabled=no interface=vlan101 network=192.168.101.0
add address=192.168.102.1/24 disabled=no interface=vlan102 network=192.168.102.0
add address=192.168.103.1/24 disabled=no interface=vlan103 network=192.168.103.0

add address=10.1.1.2/29 disabled=no interface=lan network=10.1.1.0
add address=10.1.1.1/32 disabled=no interface=vrrp-lan network=10.1.1.1

add address=77.77.77.70/30 disabled=no interface=wan network=77.77.77.68

Виртуальные интерфейсы vrrp-lan на обеих маршрутизаторах будут иметь одинаковый адрес 10.1.1.1/32
А вот физические lan инетрфейсы будут иметь разные адреса (10.1.1.2 и 10.1.1.3) и также будут находится в одной подсети между собой и vrrp-интерфейсом.

Теперь достаточно добавить шлюз по умолчанию в таблицу маршрутизации и первичную настройку можно считать законченной.
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=77.77.77.69 scope=30 target-scope=10

Далее нужно настроить скрипты резервного копирования, проверки статуса Master/Slave и переноса конфигурации.

Проверка статуса роутера
:if ([/interface get vrrp running]=false) do={
:if ([/interface get wan disabled]=false) do={
/interface disable wan
}
}
:if ([/interface get vrrp running]=true) do={
:if ([/interface get wan disabled]=true) do={
/interface enable wan
}
}

Если vrrp running=false, тоесть роутер в режиме Slave — отключаем WAN. Если Master — то включаем. Также проверяем текущий статус интефейса WAN — включен он или выключен, чтобы лишний раз его не тревожить. Этот скрипт ставим выполняться в планировщик каждые 3-10 секунд.

Резервное копирование
:local mserver
:local mkomu
:local msubject
:local bjmeno
:set mkomu «root@server.ru»
:set msubject («Backup ». [/system identity get name])
:set bjmeno ([/system identity get name]. "-". [:pick [/system clock get date] 7 11]. [:pick [/system clock get date] 0 3]. [:pick [/system clock get date] 4 6]. ".backup" )
/system backup save name=$bjmeno
/system backup save name=lastconfig
:delay 5
:put ($mserver."\n")
/tool e-mail send subject=$msubject file=$bjmeno to=$mkomu body=(«Backup from ». [/system clock get date]. " mikrotik ". [/system identity get name]. ".")
:put («Backup ». $bjmeno. "\n")

Кроме отправки на почту (предварительно параметры отправки нужно настроить), скрипт будет создавать локальный файл с именем lastconfig.backup, который нам пригодится.

Этот скрипт ставим выполняться в планировщик 1 раз в сутки, у меня стоит ночью. Если вы делаете за день много изменений в конфигурации — ставьте как вам удобно.

Далее идут 2 скрипта: перенос настроек и применение настроек на резервном сервере. Так как они должны выполняться только на резервном сервере, то роутеры нужно как-то различать. Я различаю по МАС-адресах интегрированных сетевых интерфейсов. Резервный имеет адрес FF:FF:40:40:40:41

Копирование и применение последней актуальной понфигурации
:local interA [/interface ethernet find mac-address=«FF:FF:40:40:40:41»]
:if ($interA != "") do={
/tool fetch address=10.1.1.2 src-path=lastconfig.backup mode=ftp user=ftp password=VeryHightPassword!!!11
:delay 10
system backup load name=lastconfig.backup
}

То есть забираем по FTP lastconfig.backup и восстанавливаемся с него. FTP пользователь должен быть настроен, желательно с ограничением доступа по IP. Обратите внимание, что к FTP подключаемся по IP-адресу локального физического интерфейса, который доступен только между роутерами.

Этот скрипт ставим в планировщик на несколько минут позже выполнения скрипта резервного копирования.

И последний скрипт — применение настроек на резервном сервере. В нем также используется МАС для идентификации роутера.

:local intA [/interface ethernet find mac-address=«FF:FF:40:40:40:41»]
:if ($intA != "") do={
/system identity set name=router-slave
/ip address remove [/ip address find address=«10.1.1.2/29»]
/ip address add address=10.1.1.3/29 interface=lan
/interface vrrp set priority=100 preemption-mode=yes numbers=vrrp-lan
}

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

Собственно, на этом все. Напомню, мы все манипуляции делали на роутере, который у нас будет мастером. Теперь сохраняем конфигурацию, переносим ее на слейв и применяем на нем. Это можно сделать любым способом, описанным здесь http://wiki.mikrotik.com/wiki/Manual:Configuration_Management#System_Backup

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

Писалось по памяти, но в процессе настройки использовались разные источники. В основном wiki.mikrotik.com/wiki/Main_Page
Теги:
Хабы:
+16
Комментарии7

Публикации

Изменить настройки темы

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн