Скрипт DHCP-клиента для создания маркированного маршрута

Автоматизация при помощи встроенного скриптового языка и RouterOS API
sharik987
Сообщения: 41
Зарегистрирован: 03 сен 2018, 12:47

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение sharik987 »

Задача проста. Переключения с провайдера Один isp1, который дает белый динамический адрес, на LTE свисток(который даёт серый динамический адрес). В Нетвотче стоит задание Пингуй 1.1.1.1, если пингуется то ищи маршрут с комментарием ISP1, включай его, а маршрут с комментарием ISP2 выключай. А если НЕ пингуется 1.1.1.1 то наоборот isp1 выключай, а isp2 включай. Короче простое переключение на резервный канал.
Пинг до 1.1.1.1 у меня будет идти только через провайдера один isp1

И загвоздка в том, что в маршрутах не могу руками прописать статикой маршрутизацию до 0.0.0.0 и им дать комментарий, т.к. в поле гетевэй нужно вписывать цифры\ip адрес, маршрутизатора\шлюза провайдера , а не интерфейс микротика. А так же вписать на этом маршруте нужно Комментарий, и если динамическим его оставить, то после переключения\отключения провайдера динамический маршрут исчезнет, и когда восстановится и после мой комментарий исчезнет.
надеюсь нормально объяснил.
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение Chupaka »

Я снова потерялся... Если isp1 совсем отвалится - то пропадут и все его маршруты, включая 1.1.1.1. А значит, пинг к 1.1.1.1 пойдёт через isp2, скрипт добросовестно включит ISP1, выключит ISP2... Я правильно описываю? В полночь выглядит так, что эта схема будет работать только тогда, когда линк к ISP1 есть, адрес по DHCP получает, а в Интернет он не ходит.
sharik987
Сообщения: 41
Зарегистрирован: 03 сен 2018, 12:47

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение sharik987 »

Chupaka писал(а): 12 окт 2022, 23:54 Я правильно описываю?
Так... видимо я чего то не понимаю, для чего данный скрипт темы нужен. Как я понимаю, Для того что бы статический маршрут автоматически появлялся, с нужной мне метрикой и плюсом маркировкой. В тот момент когда DHCP клиент получает адрес от isp1, следовательно при отключении интернета\провайдера\провода isp1 этот СТАТИЧЕСКИЙ адрес останется, и будет продолжать пытаться работать через isp1.
2022-10-13_9-11-39.jpg
2022-10-13_9-11-39.jpg (143.15 КБ) 5011 просмотров
под цифрой 3 удалится, а под цифрой 1 останется. У меня же проблема с цирой 4, т.к. гетевэй указан "ether1", что не правильно, и не правильно отрабатывает маршрут, а нужно указать гетэвэй как у цифры 1, по скрину 178.ХХХ.ХХХ.ХХХ. И тогда у меня будет отрабатывать нетвоч как надо, и переключать правильный isp. (естественно в фаирволе у меня пинг может идти до 1.1.1.1 только через ether1 )
В общем как мне резервирование настроить если посмотреть на мой скриншет?
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение Chupaka »

Почему роут под цифрой 1 останется? Нижняя видимая строка скрипта DHCP-клиента на вашем скриншоте (/ip route remove ...) как раз и удалит его, когда DHCP-клиент потеряет адрес :) А ещё он маркированный (routing-mark=ether1), поэтому используется только для маркированного трафика. А ещё даже если его не удалить - при потере адреса шлюз станет неактивным, поэтому неактивным станет и сам роут, и использоваться в процессе поиска маршрута не будет.

Если же вам надо просто, например, обновить шлюз у всех маршрутов к 1.1.1.1/32 при переполучении адреса DHCP-клиентом, то можно сделать вот так:

Код: Выделить всё

:if ($bound=1) do={
    :set gw "$"gateway-address"%$interface"
    /ip route set [ find dst-address=1.1.1.1/32 gateway!=$gw ] gateway=$gw
}
З.Ы. Смотрю, через пару недель после публикации моего скрипта здесь в вики добавили параметр "gateway-address", так что мой скрипт можно упростить, удалив две строчки :)
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение Chupaka »

Подправил первое сообщение темы. Оказывается, в скрипте доступна переменная gateway-address - используем её. И добавил скрипт для RouterOS v7 - там поменяли routing-mark на routing-table и надо заранее создавать таблицу маршрутизации.
sharik987
Сообщения: 41
Зарегистрирован: 03 сен 2018, 12:47

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение sharik987 »

Chupaka писал(а): 13 окт 2022, 14:40 Нижняя видимая строка скрипта DHCP-клиента на вашем скриншоте (/ip route remove ...) как раз и удалит его, когда DHCP-клиент потеряет адрес
На сколько я знал скрипт в DHCP выполнятся только в момент получения ip адреса. Сейчас вики причитал пишут при изменении статуса DHCP.
Chupaka писал(а): 13 окт 2022, 14:40 А ещё даже если его не удалить - при потере адреса шлюз станет неактивным, поэтому неактивным станет и сам роут, и использоваться в процессе поиска маршрута не будет.
Но тогда как быть? как мне автопереключение интернета настроить между isp1 и isp2 ? при условии что isp1 основной, и по dhcp получает адрес.
При статике я делал как, пинговал к примеру 8.8.8.8 только через isp1, в маршрутах на это указывал, и в фаирволе запрещал через isp2 идти до 8.8.8.8. И всё работало.
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение Chupaka »

Я бы попробовал так:

Код: Выделить всё

:local count [ /ip route print count-only where dst-address=1.1.1.1/32 scope=10 ]
:if ($bound=1) do={
    :local gw "$"gateway-address"%$interface"
    :if ($count=0) do={
        /ip route add dst-address=1.1.1.1/32 scope=10 gateway=$gw
    } else={
        /ip route set [ find dst-address=1.1.1.1/32 scope=10 gateway!=$gw ] gateway=$gw
    }
}
Этот скрипт будет создавать маршрут к 1.1.1.1 с scope=10 через isp1. При этом добавление default gateway в DHCP-клиенте надо выключить и создать маршрут /ip route add gateway=1.1.1.1 check-gateway=ping. Он будет активным тогда, когда 1.1.1.1 активный и пингуется. Netwatch не нужен.
Аватара пользователя
Dominik
Сообщения: 19
Зарегистрирован: 09 июл 2018, 12:59
Контактная информация:

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение Dominik »

SXT-R настроен на passthrough на hap ac lite, в свою очередь DHCP client получает адрес с него на порт lte_mngmt
DNS server (Ad-guard 192.168.2.19) настроен на сервере в локалке 192.168.2.0/25
Хочу пропищат скрипт в DHCP Client yf SXT-R чтобы когда меняется DNS сервер на hap-ac lite, также обновляйся DHCP client на SXT-R
Пробовал:

Код: Выделить всё

:if ( [/ping 192.168.2.19 interface=lte_mngmt count=3] = 0) do={/ip dhcp-client release numbers=0}
Скрипт в поле DHCP Client на SXT-R не срабатывает, в Scheduler срабатывает, но только когда пропадает пинг на сервере, при появлении пинга обратно не переключает на внутренний DNS 192.168.1.1
Сможете помочь?
Цифровая типография в Москве здесь
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение Chupaka »

Dominik писал(а): 26 фев 2024, 12:19 Хочу пропищат скрипт в DHCP Client yf SXT-R
Этот скрипт выполняется, когда клиент получает или теряет адрес. Между этими событиями он НЕ выполняется.
Dominik писал(а): 26 фев 2024, 12:19 чтобы когда меняется DNS сервер на hap-ac lite, также обновляйся DHCP client на SXT-R
В смысле, когда hap-ac начинает выдавать по DHCP другой адрес? А он его не обновляет по истечению Lease Time? Может, достаточно просто уменьшить Lease Time для SXT на сервере до разумного минимума?
Dominik писал(а): 26 фев 2024, 12:19 в Scheduler срабатывает, но только когда пропадает пинг на сервере, при появлении пинга обратно не переключает на внутренний DNS
Ваш скрипт запускает переполучение адреса, когда пинга нет. Когда пинг появляется - скрипт не делает ничего. Если нужно ловить события пропадания-появления пинга - можно воспользоваться Tools -> Netwatch (прописав переполучение адреса в оба скрипта, Up и Down).
Аватара пользователя
Dominik
Сообщения: 19
Зарегистрирован: 09 июл 2018, 12:59
Контактная информация:

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение Dominik »

Chupaka писал(а): 26 фев 2024, 14:40 В смысле, когда hap-ac начинает выдавать по DHCP другой адрес? А он его не обновляет по истечению Lease Time? Может, достаточно просто уменьшить Lease Time для SXT на сервере до разумного минимума?
Разумный это сколько? 1 минута не слишком ли мало, вед когда изменится DNS то если поставит 10 мин., например, то эти 10 мин не будет интернета получается, вернее не будут резолвится домены)
Chupaka писал(а): 26 фев 2024, 14:40 Если нужно ловить события пропадания-появления пинга - можно воспользоваться Tools -> Netwatch (прописав переполучение адреса в оба скрипта, Up и Down).
Да, согласен: сделал так: ping сервера [192.168.2.39] на котором крутится Adguard
UP {/ip dhcp-server network set 0 dns-server=192.168.2.39; /log info "Updating DNS to Adguard"}
Down {/ip dhcp-server network set 0 dns-server=192.168.2.1; /log warning "Updating DNS to third-party"}
Все норм орабатывает! Спасибо, остался вопрос: Lease Time на DHCP сервере, какой оптимально поставить чтобы инет не пропадал, если "упадет" сервер с Adguard
Цифровая типография в Москве здесь
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Скрипт DHCP-клиента для создания маркированного маршрута

Сообщение Chupaka »

Т.е. новый адрес DNS нормально по DHCP получает? Тогда поставить минуту - и наблюдать :)

Единственное, меня всё мучает вопрос: а обязательно клиентам напрямую ходить в AdGuard? Нельзя им просто поставить сервером сам роутер, а уже у него менять настройки? Тогда у клиентов ничего не меняется
Ответить