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

от автора

Стояла задача обеспечить отказоустойчивость работы сетевого маршрутизатора, который должен был поддерживать несколько локальных сетей, три канала в интернет от разных провайдеров, 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.1 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

ссылка на оригинал статьи http://habrahabr.ru/post/164873/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *