artem
09.04.2013
38761

Резервирование интернет-канала на маршрутизаторах Mikrotik

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

1 Исходные данные

2 Настройка портов

3 Настройка IP адресов на интерфейсах

4 Создание маршрутов

5 Настройка файервола

6 Скрипт для переключения провайдера

7 Настройка расписания

Исходные данные:


Провайдер 1:
   IP-адрес — 1.1.1.2/30
   Шлюз по умолчанию — 1.1.1.1
Провайдер 2:
   IP-адрес — 2.2.2.2/30
   Шлюз по умолчанию — 2.2.2.1
Локальная сеть:
   IP-адрес — 192.168.1.1/24   

   Приведены шаги настройки через консоль. В примере рассматривается настройка 5-портового роутера со стандартными настройками «из коробки».

Настройка портов


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

Добавляем 3-й порт к мосту bridge-local (Здесь предполагается, что кабель, который Вы используете для подключения к роутеру, подключен именно к 3-му порту роутера. Этот шаг делается для предотвращения потери доступа к роутеру после изменения ролей портов)
  

 /interface bridge port
   add bridge=bridge-local interface=ether3-slave-local

Меняем роли и имена портов

/interface ethernet
set 0 name=ether1-gateway1
set 1 name=ether2-gateway2
set 2 master-port=none name=ether3-master-local
set 4 master-port=none
set 5 master-port=ether3-master-local
set 4 master-port=ether3-master-local

Удаляем порт ether2-gateway2 из моста bridge-local

Настраиваем IP-адреса на интерфейсах:


/ip address
add address=192.168.1.1/24 interface=bridge-local
add address=1.1.1.2/30 interface=ether1-gateway1
add address=2.2.2.2/30 interface=ether2-gateway2

ПРИМЕЧАНИЕ: На интерфейсе ether1-gateway, по умолчанию включен DHCP-клиент, который следует отключить. Также, на интерфейсе bridge-local, по умолчанию, включен DHCP-сервер, раздающий IP-адреса из диапазона 192.168.88.0/24, его следует отключить или перенастроить.

Создаем маршруты.


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

/ip route
# Таблица для первого провайдера
add dst-address=0.0.0.0/0 gateway=1.1.1.1 routing-mark=ISP1
add dst-address=192.168.1.0/24 gateway=bridge-local routing-mark=ISP1

# Таблица для второго провайдера
add dst-address=0.0.0.0/0 gateway=2.2.2.1 routing-mark=ISP2
add dst-address=192.168.1.0/24 gateway=bridge-local routing-mark=ISP2

# Маршруты по умолчанию в таблице main, переключение будет осуществляться скриптом
add comment=MainGW distance=1 dst-address=0.0.0.0/0 gateway=1.1.1.1
add comment=RsrvGW distance=2 dst-address=0.0.0.0/0 gateway=2.2.2.1

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

/ip route rule
add action=lookup routing-mark=to-ISP1 table=ISP1
add action=lookup routing-mark=to-ISP2 table=ISP2

Настройка файервола


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

/ip firewall mangle
# Метки в цепочке output для соединений с самим роутером
add action=mark-routing chain=output connection-mark=from-ISP1 new-routing-mark=to-ISP1
add action=mark-routing chain=output connection-mark=from-ISP2 new-routing-mark=to-ISP2
add action=mark-routing chain=output new-routing-mark=to-ISP1 src-address=1.1.1.2
add action=mark-routing chain=output new-routing-mark=to-ISP2 src-address=2.2.2.2

# Метки в цепочке prerouting для соединений с хостами в локальной сети и с роутером
add action=mark-connection chain=prerouting connection-state=new in-interface=ether1-gateway1 new-connection-mark=from-ISP1
add action=mark-connection chain=prerouting connection-state=new in-interface=ether2-gateway2 new-connection-mark=from-ISP2
add action=mark-routing chain=prerouting connection-mark=from-ISP1 new-routing-mark=to-ISP1
add action=mark-routing chain=prerouting connection-mark=from-ISP2 new-routing-mark=to-ISP2

Создание скрипта для переключения провайдеров.


/system script
add name=check_isp policy=read,write,test

Текст скрипта лучше добавить через редактор командой:
edit check_isp source

Скрипт:

:local MainIf ether1-gateway1
:local RsrvIf ether2-gateway2
:local PingCount 1
:local PingTargets {194.87.0.50; 87.250.250.203; 8.8.8.8; 93.158.134.11}

:local MainIfInetOk false

:local RsrvIfInetOk false

:local MainPings 0

:local RsrvPings 0

foreach host in=$PingTargets do={

 : local res [/ping $host count=$PingCount interface=$MainIf]

 : set MainPings  ($MainPings + $res)

 : local res [/ping $host count=$PingCount interface=$RsrvIf]

 : set RsrvPings  ($RsrvPings + $res)

}

:set MainIfInetOk  ($MainPings >= 1)

:set RsrvIfInetOk  ($RsrvPings >= 1)

:local MainGWDistance [/ip route get [find comment=  «MainGW»] distance]

:local RsrvGWDistance [/ip route get [find comment=  «RsrvGW»] distance]

if  ($MainIfInetOk &&  ($MainGWDistance >= $RsrvGWDistance)) do={

 /ip route set [find comment=  «MainGW»] distance=1

 /ip route set [find comment=  «RsrvGW»] distance=2

 foreach i in=[/ip firewall connection find] do={/ip firewall connection remove $i}

 /log info  «switched to main internet connection»

}

if  (!$MainIfInetOk && $RsrvIfInetOk &&  ($MainGWDistance ≤ $RsrvGWDistance)) do={

 /ip route set [find comment=  «MainGW»] distance=2

 /ip route set [find comment=  «RsrvGW»] distance=1

 foreach i in=[/ip firewall connection find] do={/ip firewall connection remove $i}

 /log info  «switched to reserve internet connection»
}

ПРИМЕЧАНИЕ: Скрипт сделан на основе скрипта, приведенного в статье http://habrahabr.ru/post/141785/. Единственным существенным отличием является строка
foreach i in=[/ip firewall connection find] do={/ip firewall connection remove $i}
Эта строка вычищает таблицу соединений после смены маршрута по умолчанию. Если этого не делать, существующие соединения продолжат использовать старый маршрут.

Настройка расписания


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

/system scheduler 
add interval=1m name=check_isp_every_min on-event=check_isp policy=read,write,test

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

Кейсы внедрения
Asterisk от VoxLink
Узнайте, какие крупные компании уже используют Asterisk в работе.
Скачать
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

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

Безопасен в использовании.

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

Надежен в эксплуатации.

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

Гибкий в настройке.

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

Имеет огромный функционал.

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

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

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

Повышает управляемость бизнеса.

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

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.