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

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Аватара пользователя
Chupaka
Сообщения: 3172
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

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

Сообщение Chupaka »

Добрый. Velcom отдаёт адрес по DHCP? Тогда можно попробовать этот скрипт.

Меняется адрес шлюза, а адрес клиента остаётся тем, что и был?.. А пример можно в студию? Как-то я пока не представляю, что они такое у себя там внутри наворотили для этого %)
winhex
Сообщения: 4
Зарегистрирован: 28 окт 2019, 14:35
Откуда: Минск

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

Сообщение winhex »

Chupaka писал(а): 28 окт 2019, 18:08 Добрый. Velcom отдаёт адрес по DHCP? Тогда можно попробовать этот скрипт.

Меняется адрес шлюза, а адрес клиента остаётся тем, что и был?.. А пример можно в студию? Как-то я пока не представляю, что они такое у себя там внутри наворотили для этого %)
Адрес статика, шлюз иногда меняется, отдает по DHCP. Пример можно, только как его показать? Вот при последующих реконектах шлюз остался прежним, т.е. не то чтобы они его постоянно меняли, но все же..
А что за проблема им у себя шлюз поменять? Они-то уверены что при реконекте все его получат через dhcp и никто не заметит даже )
Аватара пользователя
Chupaka
Сообщения: 3172
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

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

Сообщение Chupaka »

winhex писал(а): 30 окт 2019, 10:42 Адрес статика, шлюз иногда меняется, отдает по DHCP.
Т.е. в какие-то моменты действия текущей аренды у них работает два шлюза в одной подсети? Бессмысленно и беспощадно :)
winhex писал(а): 30 окт 2019, 10:42 Пример можно, только как его показать?
Просто текстом: вот был такой-то шлюз, а потом стал такой.
winhex писал(а): 30 окт 2019, 10:42 А что за проблема им у себя шлюз поменять? Они-то уверены что при реконекте все его получат через dhcp и никто не заметит даже )
Ну, как минимум реконнект будет заметен многим :)
sharik987
Сообщения: 31
Зарегистрирован: 03 сен 2018, 12:47

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

Сообщение sharik987 »

Доброго времени всем.
Можете объяснить следующее. Если я включаю в дхцп клиенте скрипт, зачем мне ставить галку эдд дефаул роутер? (если не ставлю перестаёт работать)
Аватара пользователя
Chupaka
Сообщения: 3172
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

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

Сообщение Chupaka »

Доброго.

Не совсем понятно, что именно перестаёт работать.

Если скрипт создаёт маркированный маршрут, то для работы сервисов самого роутера (например, DNS-сервера) всё ещё нужен немаркированный маршрут, который создаётся галкой Add Default Route.
sharik987
Сообщения: 31
Зарегистрирован: 03 сен 2018, 12:47

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

Сообщение sharik987 »

Тогда у меня два маршрута образуется, с одинаковой дистанцией, это правильно? Или тот что образуется с помощью галки Add Default Route поставить дистанцию Больше единицы?
Аватара пользователя
Chupaka
Сообщения: 3172
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

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

Сообщение Chupaka »

Но ведь эти маршруты в разных таблицах маршрутизации, верно?
Dark Mind
Сообщения: 5
Зарегистрирован: 16 май 2021, 02:18

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

Сообщение Dark Mind »

Возврашаю народу оригинальный скрипт с небольшим допилом.

Тут интересовались изменением метрики маршрута. Допил именно на эту тему.

Добавлены две входные переменные Description и Metric

Спасибо Аффтару за идею!
Буду еще сочинять скрипт на подъем маршрута и в таблице main и в альтернативной одновременно.

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

#
# здесь надо подправить метку на нужную (например, WAN1, WAN2, WAN3)
# ставим "main", если надо добавить маршрут в основную таблицу маршрутизации
#
########################################
# Дописка к оригинальному скрипту:
# Переменная metric
# в нее пишем необходимое значение метрики. 
# В терминах RoS это параметр Distance
# Переменная description
# В нее мы пишем желаемый коментарий
########################################
:local rmark "main"
# А это дописанные входные переменные для скрипта
:local metric "253"
:local description "Emergency Route via SXT LTE UpLink"
#
# дальше ничего редактировать не надо
#
:local count [ /ip route print count-only where dst-address=0.0.0.0/0 routing-mark=$rmark ]
:if ($bound=1) do={
    :local iface $interface
    :local gw [ /ip dhcp-client get [ find interface=$"iface" ] gateway ]
    :set gw "$gw%$iface"
    :if ($count=0) do={
        /ip route add gateway=$gw routing-mark=$rmark distance=$metric comment=$description
    } else={
        if ($rmark="main") do={
            /ip route set [ find dst-address=0.0.0.0/0 !routing-mark gateway!=$gw ] gateway=$gw distance=$metric comment=$description
        } else={
            /ip route set [ find dst-address=0.0.0.0/0 routing-mark=$rmark gateway!=$gw ] gateway=$gw distance=$metric comment=$description
        }
    }
} else={
    :if ($rmark="main") do={
        /ip route remove [ find dst-address=0.0.0.0/0 !routing-mark gateway~"%$interface\$" ]
    } else={
        /ip route remove [ find dst-address=0.0.0.0/0 routing-mark=$rmark type=unicast ]
    }
}
Dark Mind
Сообщения: 5
Зарегистрирован: 16 май 2021, 02:18

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

Сообщение Dark Mind »

Предложенный скрипт с допилом не работает с 3G/LTE Uplink-ами.
Добавил еще одну переменную check.

С 3G/LTE для переменной check нужно выбирать значение "arp", иначе маршрут падает в unreachable

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

#
# здесь надо подправить метку на нужную (например, WAN1, WAN2, WAN3)
# ставим "main", если надо добавить маршрут в основную таблицу маршрутизации
#
########################################
# Дописка к оригинальному скрипту:
# Переменная metric
# в нее пишем необходимое значение метрики. 
# В терминах RoS это параметр Distance
# Переменная description
# В нее мы пишем желаемый коментарий
########################################
# Еще одна дописка - переменная check
# Допустимые значения "arp" иили "ping"
########################################
:local rmark "main"
# А это дописанные входные переменные для скрипта
:local metric "253"
:local description "Emergency Route via SXT LTE UpLink"
:local check "arp"
#
# дальше ничего редактировать не надо
#
:local count [ /ip route print count-only where dst-address=0.0.0.0/0 routing-mark=$rmark ]
:if ($bound=1) do={
    :local iface $interface
    :local gw [ /ip dhcp-client get [ find interface=$"iface" ] gateway ]
    :set gw "$gw%$iface"
    :if ($count=0) do={
        /ip route add gateway=$gw routing-mark=$rmark check-gateway=$check distance=$metric comment=$description
    } else={
        if ($rmark="main") do={
            /ip route set [ find dst-address=0.0.0.0/0 !routing-mark gateway!=$gw ] gateway=$gw check-gateway=$check distance=$metric comment=$description
        } else={
            /ip route set [ find dst-address=0.0.0.0/0 routing-mark=$rmark gateway!=$gw ] gateway=$gw check-gateway=$check distance=$metric comment=$description
        }
    }
} else={
    :if ($rmark="main") do={
        /ip route remove [ find dst-address=0.0.0.0/0 !routing-mark gateway~"%$interface\$" ]
    } else={
        /ip route remove [ find dst-address=0.0.0.0/0 routing-mark=$rmark type=unicast ]
    }
}
Аватара пользователя
Chupaka
Сообщения: 3172
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

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

Сообщение Chupaka »

М-м-м, т.е. если не указывать check-gateway - то маршрут неактивный, а если указать check-gateway=arp - то всё работает?..