У меня появился небольшой опыт по настройке распределенной филиальной сети на базе всем известных роутеров. На основе этого опыта я расскажу, как организовать резервирование и автопереключение канала в Mikrotik с помощью второго провайдера через lte модем. Материал не претендует на лучшее и максимально эффективное решение, так как это просто мой личный опыт.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Данная статья является частью единого цикла статьей про Mikrotik.
Введение
У меня появилась задача по организации резервного канала в интернет с помощью lte модемов. На местах уже был проводной интернет, но он иногда сбоил. Надо было сделать так, чтобы это не приводило к простоям, так как без интернета невозможно было продолжать производственную деятельность.
Распределенная сеть филиалов была настроена очень просто, на базе дефолтной конфигурации микротика. Не было никакого объединения в единую сеть, мониторинга и т.д. Все устройства работали сами по себе, просто обеспечивая доступ в интернет на месте. Задача была сделать резервирование основного канала в интернет максимально быстро и просто, чтобы не требовалось какое-то обслуживание или дополнительная настройка.
2-й провайдер через lte usb модем
В качестве резервного провайдера было принято решение использовать lte модемы. Качество связи через них было приемлемое. Тарифные планы доступные, стоимость модемов невысокая. Mikrotik поддерживает большое количество usb модемов, так что не составляет труда подобрать подходящий вариант. Лично я сами модели 4g модемов не видел, так как настраивал все удаленно. Использовались различные устройства и производители. В рамках задачи по настройке резервирования это не принципиально, так как предложенный мной метод работает одинаково успешно практически с любым резервным провайдером. Не важно, будет ли он через usb модем или по проводу.
Пример одного из таких модемов, который использую лично я сам, и он отлично работает в Mikrotik. Модель - HUAWEI E3372h или МегаФон M150-2.
А вообще, список гарантированно поддерживаемых usb модемов можно посмотреть в официальной wiki - https://wiki.mikrotik.com/wiki/Manual:Peripherals. Прежде чем настраивать резервирвоание, рекомендую выполнить базовую настройку mikrotik.
Самодельный Mikrotik Wan Failover на 2 провайдера
Рассказываю, как будет работать мой импровизированный wan failover в mikrotik на два провайдера. Я использую скрипт, который выполняет следующие действия:
- Пингует 2 разных ip адреса в интернете, каждый через отдельный канал интернета. Для этого создаются статические маршруты.
- В случае, если пинг через основной канал не проходит, а через резервный идет, выполняется автоматическое переключение на резервный канал путем смены дефолтного маршрута.
- Далее снова выполняются эти же проверки. Как только пинги через основной канал проходят, выполняется переключение на него.
- Я одновременно с переключением канала обрываю все tcp и udp подключения, а так же пишу информацию в лог. Это не обязательно делать, но конкретно мне нужно было. Соединения обрывались, чтобы побыстрее переключились sip телефоны и vpn соединение на микротике. А в лог я пишу информацию, так как она уходит на отдельный сервер где анализируется в том числе системой мониторинга.
Обязательным условием работы данного механизма переключения каналов являются статические маршруты по умолчанию для каждого провайдера, так как я их переключаю с помощью скрипта. Даже если у вас приходят настройки по dhcp, это не помеха. Надо просто отключить получение дефолтного маршрута и добавить его вручную.
Подобный механизм удобен в том плане, что он точно определяет доступность интернета по тому или иному каналу. Если использовать встроенные проверки микротика, то они проверяют доступность шлюза провайдера и на основе этого делают вывод о наличие интернета. Но часто шлюз провайдера доступен, а интернета все равно нет.
Автоматическое переключение на резервный канал
Давайте теперь настроим автоматическое переключение на резервный канал в случае выхода из строя основного. Для начала убедиться, что оба канала настроены и интернет через них работает. В моем случае я буду использовать 2 интерфейса:
- ether1 - основной интернет канал
- lte1 - запасной через 4g
Первым делом добавим 2 статических маршрута до каких-то ip адресов в интернете, по которым будем определять наличие интернета на микротике. Я для этого использую dns серверы Яндекса - 77.88.8.1 и 77.88.8.8. Добавляем маршруты:
/ip route add distance=1 dst-address=77.88.8.8/32 gateway=10.0.0.1 /ip route add distance=1 dst-address=77.88.8.1/32 gateway=192.168.100.1
10.0.0.1 | шлюз usb модема |
192.168.100.1 | шлюз проводного интернета |
Теперь проверим связь через каждый канал:
ping 77.88.8.1 interface=ether1
ping 77.88.8.8 interface=lte1
Если хотите на 100% убедиться, что пинги идут каждый по своему каналу, можете использовать свои сервера, запустив там tcpdump. Я время от времени делал проверки, когда нужно было наверняка знать внешний ip адрес каждого интерфейса. Иногда не было другой возможности, так как я все настраивал удаленно и информации о конкретных настройках интернета у меня не было.
В целом, понять что соединения идут по разным интерфейсам можно и по отклику. На интерфейсе lte1 задержки будут значительно больше.
Дальше убеждаемся, что для каждого провайдера настроен статический дефолтный маршрут. И обязательно каждый из них помечаем комментарием. Можно пометить их как main и reserver, можно как-то еще. Я лично просто имя интерфейсов писал. Далее они будут использоваться в скрипте. Маршрут для резервного канала сразу отключаем.
В целом, вся подготовка закончена. Теперь идем в System -> Scripts и добавляем скрипт, который будет переключать каналы:
:local PingCount 5; :local CheckIp1 77.88.8.1; :local CheckIp8 77.88.8.8; :local isp1 [/ping $CheckIp1 count=$PingCount interface="ether1"]; :local isp2 [/ping $CheckIp8 count=$PingCount interface="lte1"]; :local BackGw [/ip route get [find comment="lte1"] disable]; :if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={ /ip route disable [find comment="ether1"]; /ip route enable [find comment="lte1"]; :delay 2 :log warning "Set routes to lte1"; /ip firewall connection remove [ find protocol~"tcp" ]; /ip firewall connection remove [ find protocol~"udp" ]; :delay 2 :log warning "Set routes to lte1"; } :local MainGw [/ip route get [find comment="ether1"] disable]; :if (($isp1=$PingCount) && ($MainGw=true)) do={ /ip route enable [find comment="ether1"]; /ip route disable [find comment="lte1"]; :delay 2 :log warning "Set routes to ether1"; /ip firewall connection remove [ find protocol~"tcp" ]; /ip firewall connection remove [ find protocol~"udp" ]; :delay 2 :log warning "Set routes to ether1"; }
Скрипт в процессе эксплуатации (пару месяцев тестов на паре десятков филиалов) претерпевал различные изменения, пока не получился подходящий для моей ситуации вариант. Немного поясню некоторые моменты.
:local PingCount 5; | Только после 5-ти подряд успешных пингов мы начинаем что-то делать. Тут можно и 3 поставить, но были частенько ложные переключения туда-сюда, так что поменял на 5. |
:if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={ | Если пинг по основному каналу не идет вообще, а по второму прошли все пинги и он отключен, то переключаемся на него. |
:delay 2 :log warning "Set routes to lte1"; |
После переключения каналов жду 2 секунды и пишу сообщение в лог. Мне это нужно, так как лог отправляется на удаленный syslog сервер. Если не подождать немного, то часто сообщения не доставлялись. |
/ip firewall connection remove [ find protocol~"tcp" ]; | Удаляю все существующие tcp, а потом и udp подключения. Нужно, чтобы sip телефоны перерегистрировались по новому каналу. Если соединения не сбросить, будут висеть пока время timeout не наступит. Оно может быть и 10 и 30 минут. |
:delay 2 :log warning "Set routes to lte1"; |
Далее еще раз пишу сообщение в лог. Иногда первая запись все равно не попадает на syslog сервер. Я так и не понял до конца почему. Для надежности отправляю еще раз. Мне важно получить информацию о переключении, так как на нее завязан триггер системы мониторинга. Она оповещает о переключениях. |
:if (($isp1=$PingCount) && ($MainGw=true)) do={ | Если по основному каналу прошли все пинги и он отключен, то переключаемся на него. |
Все остальное вроде бы понятно и так, при обычном осмотре скрипта. Пингуем, смотрим, прошли ли пинги. Если нет, переключаемся, если да, то ничего не делаем. Принцип достаточно простой. Его можно встретить в огромном количестве статей в интернете на тему mikrotik failover. Я только добавил сброс соединений и записи в лог файл.
Сохраните этот скрипт и запустите. Очень рекомендую это делать, имея физический доступ к устройству. Если что-то пойдет не так, доступ к микротику потеряете. У меня один раз такое случилось еще в момент подготовки и тестирования этого решения. Потом уже наловчился, все моменты проработал и настраивал все удаленно. Ни одного фейла не было, чтобы на устройстве совсем пропал интернет. Пару раз пришлось звонить на место и через AnyDesk или TeamViewer подключаться локально к микротику.
Страховал себя следующим образом. Добавлял еще один скрипт:
/system backup save password="secret" name=disconnect delay 240 /system backup load name=disconnect.backup password="secret"
Запускал его и выполнял все потенциально опасные действия. Если все хорошо и связь не пропадала, то прерывал выполнение скрипта на вкладке Jobs.
Если этого не сделать, то через 240 секунд старая конфигурация, сделанная при запуске скрипта, загрузится и устройство ребутнется. Удаленный доступ к нему восстановится.
В завершении всей настройки проверки и переключения на резервный канал в mikrotik добавляем скрипт в планировщик. Для этого идем в System -> Scheduler и добавляем задание на выполнение каждые 30 или 60 секунд. Интервал подберите сами.
Вот и все. Переключение на резервного провайдера настроено. Если интернет через основной wan интерфейс перестанет работать, произойдет переключение на lte интерфейс.
Заключение
Еще раз напоминаю, что это мой опыт и мое решение по резервированию канала. Я не претендую на уникальность или best practice. Данный способ мной использовался не раз. Основные удобства следующие:
- Настраивается просто и понятно.
- Умеет сбрасывать все соединения после переключения.
- Пишет информацию в лог для дальнейшего анализа.
В данном проекте я все Mikrotik объединил в единую vpn сеть для удобного управления. Настроил мониторинг микротиков, в том числе и переключение провайдеров. А так же сделал сбор логов с них в единый сервер. Все это существенно упростило обслуживание и управление распределенной филиальной структуры.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Добрый день ! Какие преимущества у вашего скрипта перед вариантом, описанном здесь https://interface31.ru/tech_it/2023/03/mikrotik-i-neskol-ko-provayderov-rezervirovanie-kanalov.html ?
Скрипт решает не только вопрос с переключением канала. Я через скрипт выполняю многие другие действия одновременно с переключением:
- переподключаю VPN
- сбрасывают SIP соединения
- отправляю в систему логирования сообщения о переключении канала
и т.д.
Это старая статья, тут таких примеров нет. В телеграм канале я рассказывал об этом более подробно.
День добрый. В локальной сети есть виртуальная машина на ubuntu server с установленным vpn клиентом, настроен forward' инг. Подскажите пожалуйста как через микротик перенаправить трафик других машин с той же локальной сети на виртуальную машину, чтоб они выходили в интернет из под vpn виртуальной машины? Пробовал маркировать, но что то видимо не так делаю. router os 7
Форвардинг чего настроен? Если я правильно понял идею, то на Ubuntu Server нужно настроить полноценный шлюз и указать её IP в качестве шлюза для остальных машин. Тогда они будут выходить в интернет через этот сервер с VPN.
форвардинг прописан для того, чтобы через ubuntu с впн можно было пропускать другие машины. Если я на другой машине, в той же локальной сети, в качестве шлюза и днс прописываю руками ip машины с ubuntu, то та машина получается через впн в интернет выходит, как и надо. Но весь смысл чтоб не руками сетевые настройки машин править, а через правила микротика перенаправлять, типа как второй wan
Чтобы руками подобные настройки не править, придумали службу DHCP. Я так сходу не соображу, что и куда тут нужно перенаправить, чтобы всё заработало без перенастройки пользовательских компов. Тут же не только в одну сторону надо перенаправление делать, но и для обратных вернувшихся пакетов. По-моему это технически невозможно. Нужно как минимум маршруты прописывать клиентам, а это всё равно на машины надо идти и делать. Либо через DHCP передавать маршруты.
dhcp раздаёт микротик, когда в него заведено несколько провайдеров то делается маркирование как вы и говорите, чтоб туда и обратно через конкретный wan трафик ходил. Думал что подобным образом можно и в моём случае сделать. Ладно, спасибо.
Может и можно сделать, но это нетривиальная задача. Вам же нужно будет маркировать и переправлять трафик клиентов на самом Микротике и на Ubuntu Server. А потом вернувшиеся пакеты из интернета опять маркировать на Ubuntu Server и на Микротике и отдавать компам в локалке. Технически это непростая задача. Такие вопросы решаются с помощью маршрутизации. Получается просто, эффективно и без лишних настроек.
Добрый день
Смотрю посты и вижу что вы все пингуете только IP adress, но провайдеры в основном делают заглушку на DNS и тогда ваши скрипты бесполезны! А как сделать так что бы запрос шёл через доменку.
Все вот советуют netwatch, а как в нем решить проблему плавающего канала? Когда иногда пакеты пробиваются? Будет туда-сюда переключать. А скрипт может проверять условие успешных пингов n раз.
Скрипт удобнее netwatch, так как позволяет более гибко управлять переключением.
Добрый вечер!
А как должны в этом случае выглядеть правила NAT?
С NAT нет каких-то особых нюансов. Просто сделайте правила для обоих интерфейсов.
Но ведь перебор правил идёт, и выбирается первое подходящее. Допустим, первым идёт правило на первый интерфейс, он физически up, но инета через него нет. Не будет ли MikroTik его использовать?
Если у вас идёт входящее соединение на канал интернета, который неактивен, то вы с этим ничего не поделаете. То есть от того, что у вас будет несколько правил NAT в том числе с интерфейсами, которые не являются выходами в интернет для шлюза, ничего не изменится. Входящие запросы, чтобы успешно обработаться, должны поступить на активный интерфейс с интернетом. Даже если вы каким-то образом будете переадресовывать эти соединения на активный интерфейс, то ответ скорее всего всё равно не дойдёт до клиента, так как он отправил запрос на один ip адрес, а ответ пришёл с другого ip. Некоторые провайдеры вообще отбрасывают такие пакеты.
Ох, а я про srcnat спрашивал :) В общем, кажется, разобрался с помощью чата, умозаключений и тестов. Маршрут пакета известен ДО применения правил NAT, и исходящий интерфейс – один из параметров, под которые будет подбираться правило. Само правило повлиять может только на source IP, который будет использоваться при отправке пакета, если их на внешнем интерфейсе несколько. Поэтому спокойно можно использовать action srcnat с параметром to-addresses, только количество правил удваивается – по комплекту для каждого подключения. Ну, или 1 комплект с masquerade и обоими подключениями в interface-list WAN, но это затратнее при работе.
А для dstnat придумал простую штуку – CNAME в DNS на DDNS Cloud (*.sn.mynetname.net).
Zerox, помогите адаптировать в три канала, работу скрипта пожалуйста !
Здравствуйте.
В сети два микротика в одном сегменте.
На резервируемом микроте первый канал pppoe, второй просто указываю маршрут на второй микрот. Переключение между каналами реализую с помощью дистанции. Собственно два вопроса: как будет выглядеть NAT в частности out inteface list ведь второй канал не относится к WAN и как правильно пробросить sip так как ip телефон получается за двойным NAT.
С интерфейсами как-то вручную разберитесь и организуйте работу. Не вижу, в чём тут могут быть проблемы.
NAT пробросить как есть 2 раза. По идее, должно работать. Конкретно с SIP не проверял, но в общем случае двойной NAT нормально работает.
С двойным натированием всё, что *никсовое справляется вполне. Проблему в вижу в conntrack - у вас при переходе с одного канала на другой все коннекшены как висели на первом, так и будут на нём висеть. Их надо ресетнуть.
Окей, а если 2 резервный канала , то как быть ?
тогда будет скрипта в раза 3-больше или вариаций включений\выключений ?
к примерй, есть 1 2 3 подключения.
если 1 откл, то 2 вкл.
если 1 и 3 откл, то 2 вкл.
если 1 и 2 откл, то 3 вкл.
если 1 откл, а 2 появился и 3 вкл, то 2 вкл
если 1 откл, а 2 появился и 3 откл, то в вкл
если 1 появился, то 2 и 3 откл.
Правильно ?
Добрый день!
Как быть, если при потери ISP1 пингов в сторону указанного IP (проверочного), проскакивает один пакет unreacheble (допустим 950ms)? Канал в таком случае не переключается на резерв... Возможно нужно, что-то сделать еще, но я понять не могу...
В скрипте есть переменная:
:local PingCount 5;
Она отвечает за количество успешных проверок ping. Если вместо 5 установить 1, то переключение будет даже при одной успешной проверке. В моём случае переключение будет только при 5-ти успешных попыток подряд.
#Main interface name
:global MainIf ether1
#Failover interface name
:global RsrvIf lte1
#:local PingCount 3
:local PingCount 4
:local PingTargets {1.1.1.1; 114.114.114.114; 9.9.9.9}
:local host
:local MainIfInetOk false
:local RsrvIfInetOk false
:local MainPings 2
: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)
:delay 1
}
:set MainIfInetOk ($MainPings >= (3 * $PingCount))
:set RsrvIfInetOk ($RsrvPings >= (1 * $PingCount))
#:set MainIfInetOk ($MainPings >= 2)
#:set RsrvIfInetOk ($RsrvPings >= 1)
:put "MainIfInetOk=$MainIfInetOk"
:put "RsrvIfInetOk=$RsrvIfInetOk"
:local MainGWDistance [/ip route get [find comment="ISP1"] distance]
:local RsrvGWDistance [/ip route get [find comment="ISP2"] distance]
:put "MainGWDistance=$MainGWDistance"
:put "RsrvGWDistance=$RsrvGWDistance"
if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do={
/ip route set [find comment="ISP1"] distance=1
/ip route set [find comment="ISP2"] distance=2
:put "switched to MAIN internet connection"
/log info "switched to MAIN internet connection"
/ip firewall connection remove [find]
}
if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance <= $RsrvGWDistance)) do={
/ip route set [find comment="ISP1"] distance=2
/ip route set [find comment="ISP2"] distance=1
:put "switched to RESERVE internet connection"
/log info "switched to RESERVE internet connection"
/ip firewall connection remove [find]
}
А если так?
Бывает в сторону ISP1 реально 1 пакет пролетает с unreacheble и тогда канал не переключается. Скрипт у меня запускается каждые 30 секунд, как разу успевает проверить по 4 counts * all ip dns. Куда еще капнуть?
Спасибо большое, работает отменно!
Интересно. Вопрос такой назрел... А если у одного провайдера скорость в разы отличается и при этом шейпер настроен? Получается надо правило отключать-включать под каждого? И кстати, если хочется только определенным лицам резерв подключать, можно ли допустим тем же шейпером по нулям скорости выставить указанным лицам или это слишком кривая реализация и надо маршрутами делать?)
Здравствуйте,
У меня настроен GRE IPsec между двумя офисами.
Как сделать, чтобы при переключении провайдеров туннели тоже переключались?
Попробовал создать дополнительный туннель, но так не работает. ( + много спама идет в логи)
Самое первое, что приходит в голову - сбрасывать соединение туннеля, чтобы оно заново поднялось. Сделать это можно с помощью скрипта. Проверять дефолтный шлюз и если видно, что он изменился, сбрасывать подключение. Лучше сразу все, чтобы всё переподключилось.
Спасибо, очень хорошая статья.
Пробую применить. Пришлось обновить ОС до 7.1 поскольку на 6.49 Хуавей 3372 "мигал" в списке интерфейсов.
А тут ping 1.1.1.1 interface=lte1 не работает, если шлюз на eth1. Но, если в маршрутах добавить 1.1.1.1 через ИП ЛТЕ, то пинг идет...
Глюк 7.1?
И еще. Когда допольнительного маршрута нет то шлюз ЛТЕ пингуется...
Ох, я тупой. Прочитал статью третий раз и увидел, что маршрут надо добавлять... Мне кажется или в илинуксе для такого не нужен маршрут (если указан интерфейс)?
можно ли пинговать пару серверов для надежности?
Можно, просто скрипт усложнить придётся. Вместо одной проверки, сделать две.
Хорошая статья! Спасибо. Пришлось немного подрихтовать, так как имею дело с Oktell, после включения резервного маршрута октелл успевал поднимать сессии, и потом скрипт уже чистил коннекты которые поднялись по новому маршруту.
После тестирования и доработки скрипта получилось так:
:local PingCount 5;
:local CheckIp1 77.88.8.1;
:local CheckIp8 77.88.8.8;
:local isp1 [/ping $CheckIp1 count=$PingCount interface="UFANET"];
:local isp2 [/ping $CheckIp8 count=$PingCount interface="MTS_4G"];
:local BackGw [/ip route get [find comment="MTS_4G"] disable];
:if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={
/ip route disable [find comment="UFANET"];
:delay 5
:log warning "Remove connection........";
/ip firewall connection remove [ find protocol~"tcp" ];
/ip firewall connection remove [ find protocol~"udp" ];
:foreach i in=[/ip firewall connection find assured=no] do={
/ip firewall connection remove $i}
:delay 5
/ip route enable [find comment="MTS_4G"];
:delay 1
:log warning "Set routes to MTS_4G";
:log warning "Complete";
}
:local MainGw [/ip route get [find comment="UFANET"] disable];
:if (($isp1=$PingCount) && ($MainGw=true)) do={
/ip route disable [find comment="MTS_4G"];
:delay 5
:log warning "Remove connection........";
/ip firewall connection remove [ find protocol~"tcp" ];
/ip firewall connection remove [ find protocol~"udp" ];
:foreach i in=[/ip firewall connection find assured=no] do={
/ip firewall connection remove $i}
:delay 5
/ip route enable [find comment="UFANET"];
:log warning "Set routes to UFANET";
:delay 1
:log warning "Complete";
}
Не совсем понимаю. У меня mikrotik 951 куда приходит интернет на 1 и 2 Ethernet порты. Выполнено без всяких скриптов, просто методом рекурсивной маршрутизации, функции те же. То есть если интернет на Ether 1 упал, через 20 секунд идёт переключение на резервный канал Ether2 -то есть к SXT LTE. Я смотрю скрипт выполняет те же функции, в чем плюс?.
Я же уже писал ниже в комментах и в статье. Скрипт не только переключает интернет. Он сбрасывает сетевые соединения и пишет информацию в лог файл о том, что произошло переключение интернета. Просто настроить резервный интернет можно разными способами. Тут решается несколько задач в комплексе. Мне всё сделать в одном скрипте показалось проще всего и удобнее.
Здравствуйте.
Не понимаю этот момент:
"
:if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={
Если пинг по основному каналу не идет вообще, а по второму прошли все пинги и он отключен, то переключаемся на него.
"
Как по второму каналу пройдут все пинги, если маршрут отключен?
Соответсвенно для возврата на основной канал:
:if (($isp1=$PingCount) && ($MainGw=true)) do={
Как по первому каналу пойдут пинги, если маршрут отключен?
АААА Я долбаеб, все ништяк
👍
Что было?
Мы добавляем два статических маршрута, которые работают всегда и по которым понимаем наличие интернета
/ip route add distance=1 dst-address=77.88.8.8/32 gateway=10.0.0.1
/ip route add distance=1 dst-address=77.88.8.1/32 gateway=192.168.100.1
что-та у меня не взлетел резервный канал 4G
Но это же значит, что любые обращения из локальной сети на 77.88.8.8 будут всегда идти через одного провайдера, а любые обращения из локальной сети на 77.88.8.1 всегда будут идти через другого провайдера? Независимо от того, доступен этот провайдер или нет...
А если первый провайдер со шлюзом 10.0.0.1 упал? Даже при переключении маршрутов всё-равно эти правила "заблокируют" доступ к 77.88.8.8?
Если эти прямые маршруты
/ip route add distance=1 dst-address=77.88.8.8/32 gateway=10.0.0.1
/ip route add distance=1 dst-address=77.88.8.1/32 gateway=192.168.100.1
не прописывать в таблице, то разве не хватит того, что в скрипте чётко прописано через какой интерфейс пинговать каждого провайдера?
То есть если маршрут постоянный его нельзя отключить?
Добрый день, у меня настроен микротик на автопереключение на резервный канал, если 1-й провайдер упал. Вопрос, каким образом следует сделать проверку на работоспособность резервного канала, например пинговать его каждый час, если он не отвечает, отправить письмо на почту.
Спасибо. все заработало) А для PPPoE + LTE эта схема не подойдет?
Пойдёт скорее всего.
Добрый день, у меня настроен микротик на автопереключение на резервный канал, если 1-й провайдер упал. Вопрос, каким образом следует сделать проверку на работоспособность резервного канала, например пинговать его каждый час, если он не отвечает, отправить письмо на почту.
Это от вашего резервного канала зависит и от системы мониторинга, которая у вас есть. Если резервный канал имеет внешний ip адрес, можно его пинговать. Я так обычно делаю.
Резервный канал имеет внешний ип адрес (динамический), у меня переключение происходить через Netwatch. Подключение резервного канала осуществлено через PPPOE. Можно ли пинговать через это подключение, например гугл или его Remote address?
Самый надёжный вариант проверки работы интернета - пинговать что-то именно через него, как я делаю в скрипте из статьи. Сделайте что-то подобное.
Да, проверено, работает.
В моем случае интернет шлюз не на ether1 а на pppoe-out1
соответственно делайте и в скрипте правки
может кому пригодится, добавил оповещение на почту:
после :log warning "Set routes to lte1";
/tool e-mail send to=admins@mail.ru subject="switch_to_lte1" body="switch_to_lte1";
после :log warning "Set routes to gw1";
/tool e-mail send to=admins@mail.ru subject="gw1" body="gw1";
Подскажите как добавить в этот скрипт третьего провайдера, на случай если два недоступны.
годно!
а так чтобы не в ящик а в телегу не подскажите решение?
на в версии 6.47.10 работает? а то у меня нет :(
всё, разобрался, работает.
:local BackGw [/ip route get [find comment="lte1"] disable];
почему тут стоит get ?
должно же быть :local BackGw [/ip route disable [find comment="lte1"]]
нет ?
Должно быть именно так, как написано. Посмотрите еще раз логику всего скрипта.
Нашел крутое и современное решение этой задачи разными способами без скриптов.
https://mum.mikrotik.com/presentations/TH18/presentation_5725_1534743837.pdf
Без скриптов не получится так просто сбрасывать зависшие соединения и настроить мониторинг переключения. Придётся всё равно что-то придумывать для этого. В данной статье скрипт используется как раз для того, чтобы решить несколько задач в комплексе.
ДОПОЛНЕНИЕ:
Вывод сообщения:
:put "Start only via Button !!!";
Я добавил для того чтобы оно отображалось если скрипт стартуют через терминал (system scrypt run...)
т.к. в этом случае при восстановлении бэкапа команда backup resotre требует ручного подтверждения (Y/n)
А у меня на lte1 переключается, а обратно не хочет. В ручном режиме переключение работает
С маршрутами возможно что-то не так. Сам скрипт очень простой. Там нечему глючить или работать как-то не так. Простая проверка пингами и действие.
Лучше выводить таймер в глобальную переменную и отслеживать ее в ScryptList -> Environment
т.е. вместо Delay сделать
:global TimeToRestore 180; :while ($TimeToRestore>0) do={:set $TimeToRestore ($TimeToRestore-1); :put "Start only via Button !!!"; :delay 1; };
Это про скрипт бэкапа речь, правильно понимаю? Я что-то не очень понял, в чем тут смысл и чем это лучше того, что предложено мной. Много раз проверял, работает надежно.
А можете подсказать скрипт для отлова IP с LTE модема. Чтобы автоматом менялся на тот что выдал оператор при перезагрузке модема или роутера
На сертификации тренер Mikrotik не зря упомнил RouterOS как самую популярную ОС по части костылей и кривых мануалов, в которых везде почему-то любят писать скрипты, а не использовать стандартные возможности RouterOS, которые решают задачу и проще, и с сохранением работоспособности при обновлениях (хотя тут бывают редкие исключения). Потом выходит какое-то обновление и ваш скрипт перестает работать и вы не понимаете почему. Вопрос решается просто - рекурсивная маршрутизация и один из комментаторов уже даже прислал вам решение.
Вы невнимательно читали статью. В моем случае мне все равно придется делать скрипты для сброса зависших sip подключений через упавший канал, а так же для отправки информации о переключении в единую систему сбора логов и мониторинг. Удобнее все это реализовать в одном месте, чтобы не было рассинхронизации по событиям.
Впервые подобную схему со скриптом я реализовал лет 6-7 назад. До сих пор всё без проблем работает, несмотря на все последующие обновления. Скрипт просто дорабатывал под нюансы разных задач. Вы можете конкретно сказать, какие проблемы будут при такой реализации? Мой практический опыт подсказывает, что проблем не будет, иначе я бы не использовал его.
Если вы знаете, как реализовать все описанное без скриптов, готов послушать. Что такое рекурсивная маршрутизация и как она настраивается в микротике, я знаю. Меня больше интересует решение задачи в комплексе с мониторингом и сбросом соединений. Я могу придумать различные реализации, но предложенная кажется мне наиболее простой и удобной.
В данном конкретном случае может проблем и не будет. Но суть больше в самом подходе, мышлении. Делайте как хотите, это ваше право, я высказал своё мнение.
Не высказал мнение, а пернул в чат
отличная статья! есть варианты мониторить через заббикс? активность lte интерфейса, переключение на него и обратно
Варианты есть и их несколько. Можно по snmp забирать данные с микротика. А можно при переключении канала интернета скриптом писать что-то в лог файл, а сам лог файл отправлять на syslog сервер. На syslog сервере парсить лог с помощью zabbix. Я и так, и так делал. Все зависит от конкретной ситуации и существующей инфраструктуры.
про snmp есть наводки? какое из значений лучше мониторить? логи, как таковые не нужны, достаточно статус текущего подключения и было ли переключение, а возможно, что и хватит просто статуса, тк сам факт отвала провайдера мониторится через заббикс с графаной
Тут я не знаю, как лучше делать. lte интерфейс может быть всегда активен, а интернет через него не работать. Так же и со всеми остальными интерфейсами. То есть просто по статусу интерфейса невозможно определить, есть интернет или нет. Я поэтому переключение через скрипты и делаю с записью в логе. Иначе не знаю, как нормально настроить мониторинг переключения каналов.
Интересно стало, вдруг моя мысль правильная) Вы там пишите, что иногда не доставляются варнинги на сислог. Заметил, что у вас сначала идёт отправка варнинга, а потом сброс сессий. А может попробовать сначала сбросить сессии, а уже варнинг отправить после сброса сессий, при условии, что сислог находится не в сети микротика.
Не читал все комменты) возможно уже это описали, вдруг я угадал)
Я использую телефон в качестве модема, можно через USB кабель, можно по WiFi (я по WiFi), зачем покупать дополнительные устройства ?
А телефон вам бесплатно дали? Он же тоже денег стоит, причем больше, чем модем.
Добрый день, очень нужна помощь. У меня реализовано переключение на второй провайдер через netwatch все работает провайдеры переключаются исправно, но у меня еще нужно переключать и туннели IPsec, можно ли это сделать в netwatch или мне нужно писать скрипт?
Через netwatch это не сделать. Надо каким-то другим способом решать вопрос. Скорее всего скриптом. У меня нет готового решения на этот счет.
Добрый день. А как решить резерв каналов со статикой основной оптика, резерв 4G но через SXT LTE ?
,
Сергей, Вам удалось решить свою задачу(mikrotik + Провайдер 1(провод) + Провайдер 2 (провод на SXT LTE))? Поделитесь - как? У меня аналогичная задача, но что-то "не крутится". Сама SXT к инету коннектится, но вот получить интернет с нее как с резервного канала не получается.
Здравствуйте, почему проверка доступности выполняется скриптами? каждое выполнение скрипта занимает память, может проверку доступности сделать через netwatch?
и у меня некорректно работало через изменение дистанции, в netwatch указал удаление маршрута и прописание нового.
Link UP
/ip firewall connection remove [find]
/ip route set [/ip route find dst-address=0.0.0.0/0] gateway=10.10.10.10
Link DOWN
/ip firewall connection remove [find]
/ip route set [/ip route find dst-address=0.0.0.0/0] gateway=10.10.10.20
скрипты
Так у вас при первой потери пакета будет переключение.
Добрый день!
Добрый люди подскажите как настроить резервный канал на Микротик, если в качестве резервного канал выступает универсальный роутер 4G от MTC (модель: МТС 8212FT ссылка на модель роутера http://static.mts.ru/dpc_upload/contents/383/rukovodstvo_4G_CPE_router_8212FT.pdf?_ga=2.147906814.832014410.1579152546-869186268.1579152546).
С usb модемом 4G все приблизительно понятно, а как быть в этом случае? Спасибо!
Отличная статья. Спасибо. Настроил по ней резервирование каналов у себя, все работает. Но настройку и сам скрипт можно несколько упростить.
Замечания:
1) В скрипте есть объявление трех переменных rName, rDate, rTime, которые нигде не используются.
2) Просто прописать 2 статических маршрута (для 8.8.8.8 и 8.8.4.4), на мой взгляд, недостаточно. Т.к. нет 100% гарантии того, что пинги будут ходить именно этими маршрутами. Например, в случае если шлюз основного провайдера становится "unreachable", маршрут через него перестанет работать и пинги к 8.8.8.8 пойдут через резервный канал. Тогда нас ждет периодитеское переключение каналов раз в 30 секунд. См. комментарий Вячеслава от 30.04.2017 https://serveradmin.ru/mikrotik-951ui-2hnd-2-wan-interfeysa-dlya-rezervirovaniya-kanala/#comment-1624
Эту ситуацию можно конечно исправить при помощи файрвола, но намного проще в самом скрипте пустить пинг через определенный интерфейс:
:local isp1 [/ping $CheckIp1 count=$PingCount interface="ether1-wan"];
Из этого выходит, что вообще никакие маршруты прописывать не надо. Более того, не надо пинговать 2 ip-адреса, достаточно одного.
Итоговый скрипт у меня получился таким:
:local PingCount 3;
:local CheckIp 8.8.8.8;
:local isp1 [/ping $CheckIp count=$PingCount interface="ether1-wan"];
:local isp2 [/ping $CheckIp count=$PingCount interface="ppp1-MTS"];
:local BackGw [/ip route get [find comment="gw2"] disable];
:if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={
:log warning "Set routes to gw2";
/ip route disable [find comment="gw1"];
/ip route enable [find comment="gw2"];
}
:local MainGw [/ip route get [find comment="gw1"] disable];
:if (($isp1=$PingCount) && ($MainGw=true)) do={
:log warning "Set routes to gw1";
/ip route enable [find comment="gw1"];
/ip route disable [find comment="gw2"];
}
Добрый день! Хорошая статья, попробую внедрить в свою сеть. Но вопрос не большой. Смысл тот же - один провайдер основной 3/4g второй резервный спутниковый канал ВСАТ. Но можно ли настроить фаервол в этой схеме, чтобы через 3/4g как основной канал был полный доступ, а через второй канал ( спутник ) ограниченный доступ только разрешенных ресурсов + email. Спутник дорогой трафик.
Все можно. Не вижу проблем. В фаерволе правила легко привязываются к интерфейсу.
5 лет назад с микротиком плотно не работал, но на данный момент действительно можно проще:
add check-gateway=ping distance=1 gateway=1.1.1.1 pref-src=1.1.1.2 routing-mark=IPS1
add check-gateway=ping distance=1 gateway=2.2.2.1 pref-src=2.2.2.2 routing-mark=ISP2
add check-gateway=ping distance=11 gateway=8.8.4.4
add check-gateway=ping distance=12 gateway=8.8.8.8
add distance=5 dst-address=8.8.4.4/32 gateway=1.1.1.1 scope=10
add distance=5 dst-address=8.8.8.8/32 gateway=2.2.2.2 scope=10
но скрипт имеет право на жизнь, в этом и прелесть ROS.
про модемы все так же ничего не поменяется особенно =)
а вот про дистанции, проверка шлюза... может быть и доступен, а дальше все лежит... при конфиге выше, проверяется не шлюз, а конечный хост через нужный канал.
Все верно. Тестить шлюз для проверки интернета идея так себе. Чаще всего шлюз доступен, а интернета нет. Нужно проверять конечные хосты в интернете, а не шлюзы провайдера.
Добрый день! Можете помочь по настройке mikrotik sxt lte kit ? Там две симкарты не могу найти инфы как сделать , чтобы при падении слота симки а все переключалось на слот симки б .... igon-spb@rambler.ru
Зачем дописывать скрипт, настраивать шедулер и забивать ресурсы МТ дополнительными действиями, если можно в Route List прописать маршруты с разными дистанциями (для основного канала дистанция = 1, для резервного = 2) и поставить check gateway = ping?
Эта статья писалась более 5-ти лет назад. Возможно в то время такое простое решение не работало. Уже не помню подробностей. но такой вариант никаких ресурсов особо не потреблял и работал надежно. А может и сейчас работает.
А если шлюз провайдера стоит в помещении вместе с Микротиком, и разрыв соединения произошел в другом месте?
а если основоной и резервный канал 3г модема(2шт) ?
ты когда-то делал настройки микротик на три провайдера один основной по кабелю, второй резерв по кабелю и третий резерв по 3G модему через юсб порт микротик?
ой извини по 4G модему через юсб порт микротик?
Нет, не делал. Это уже похоже на билет, запасной билет и проездной, как в Ералаше :) Хотя у меня есть один объект в подмосковном городе, где 2 канала интернета - основа и резерв, но они оба откуда-то из одного места приходят. Чаще всего оба провайдера падают одновременно, особенно если весь квартал обесточат. Наличие упсов в твоей стойке на спасает. Тут бы пригодился 4g модем.
понятно так что подскажеш по настройке?
Так а что я подскажу, если сам не настраивал. Надо брать, настраивать и тестировать. Можно даже этот скрипт подредактировать на 3 провайдера. Немного больше условий и проверок будет, но в целом ничего сложного.
Добрый день! А разве не проще сделать все это простым Netwatch? Смысл тот же, текста меньше. Если я не прав - поправьте меня.
Может и проще. Статья давно писалась, наверняка сейчас описаны более простые и универсальные способы.
ДОбрый день!
Не посдкажите как отправлять траффик через второго провайдера? скажем мне нужно smtp отправлять не через первого а через второго.
А зачем пихать скрипты, не легче ли просто настроить рекурсивные маршруты и дистансы?
Как привязать конкретный IP(192.168.0.192) чтобы только он из внутренней сети переключался на другой провайдер. Заранее Спасибо!
Можно по этой же методике сделать, менять не шлюз по-умолчанию, а прописывать новый маршрут для конкретного адреса. Готового рецепта не дам, так как давно не занимаюсь этой темой.
Дичь какая то. С чего вы задаете статические IP адреса гейтвеев, если они у вас по DHCP приходят? Сменит их провайдер их и аля-улю, ничего не будет работать.
А часто у вас провайдер это делает? На моей памяти я такого ни разу не наблюдал. Даже если сменит, можно вручную поправить.
Это всего лишь один из вариантов, очень простой. Для резервирования каналов на микротике есть 100500 вариантов решения задачи.
Уже забыл даже, что оба роутера, которые выдают по dhcp настройки в этой статье, принадлежат и настроены собственником дома, поэтому никто без его ведома гейтвеи не сменит.
Спасибо за отличное решение! Везде в сети лежат гораздо более сложные, а это, действительно, простое. НО: при его реализации на своем 2011-м натолкнулся на необходимость дополнительного указания интерфейсов в пинге (в скрипте), иначе несморя на недоступность основного канала пинги на 8.8.8.8 проходили через резервный, и систему "колбасило": при переключении на резервный канал скрипт сразу же при следующем запуске находил пинг на 8.8.8.8 через бэкапный канал, и переключался обратно. На основном при этом Интернета не было и скрипт переключался опять на резервный, и так по кругу.
Все дошаманил путем добавления в скрипт в команды ping параметра interface="ether1" и interface="ether5" при условии, что у меня оба канала, и основной и резервный подключены проводами к 1-му и 5-му портам, соответственно. В этом случае пинги идут гарантированно через принудительно указанный интерфейс, и если там Интернта нет, то пинг на 8.8.8.8 не пройдет никаким образом. Без вариантов.
Возможно, у меня это связано с особенностью провайдера резервного канала или где-то в маршрутах есть "дырка", т.к. у меня настроена относительно сложная система из двух Микротиков с автомтическим поднятием туннеля между ними при условии "видимости" всех ресурсов с обеих сторон.
Тем не менее, считаю, что вышеуказанное добавление параметра interface в команды ping только улучшает стабильность приведенного решения, не ухудшая его.
Вячеслав, могу к вам обратиться за помощью по резервированию каналов?
мой e-mail moii93@mail.ru