Страница 1 из 2

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

Добавлено: 18 июл 2017, 17:51
Chupaka
Скрипт создаёт дефолтный маршрут с указанной Routing Mark, при этом в шлюзе указывается IP-адрес и интерфейс (на случай, если на разных интерфейсах получены одинаковые шлюзы)

Скрипт нужно вписать в поле Script у DHCP-Client'а, подправив лишь первую переменную (изменить на желаемую Routing Mark для данного интерфейса). Если нужно добавлять в основную таблицу маршрутизации, делаем :local rmark "main"

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

#
# здесь надо подправить метку на нужную (например, WAN1, WAN2, WAN3)
# ставим "main", если надо добавить маршрут в основную таблицу маршрутизации
#
:local rmark "WAN1"
#
# дальше ничего редактировать не надо
#
: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
    } else={
        if ($rmark="main") do={
            /ip route set [ find dst-address=0.0.0.0/0 !routing-mark gateway!=$gw ] gateway=$gw
        } else={
            /ip route set [ find dst-address=0.0.0.0/0 routing-mark=$rmark gateway!=$gw ] gateway=$gw
        }
    }
} 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 ]
    }
}
Идея взята из официальной документации и допилена до состояния, когда её можно использовать в боевых условиях :)

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

Добавлено: 03 фев 2018, 21:06
kardash
Так хотелось поставить лайк (спасибо) чупа-чупсу за этот пост, но сайт не позволяет к сожалению....

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

Добавлено: 07 фев 2018, 21:33
kardash

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

#
:local rmark "WAN1"
#
# дальше ничего редактировать не надо
#
: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
    } else={
        if ($rmark="main") do={
            /ip route set [ find dst-address=0.0.0.0/0 !routing-mark gateway!=$gw ] gateway=$gw
        } else={
            /ip route set [ find dst-address=0.0.0.0/0 routing-mark=$rmark gateway!=$gw ] gateway=$gw
        }
    }
} 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 ]
    }
}
Использовал в таком виде для RouterOS v6.39.3 - не добавило маршрут скриптом

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

Добавлено: 08 фев 2018, 00:50
Chupaka
Откатился на bugfix, скопировал скрипт в DHCP-клиент - всё отлично добавляет и удаляет (при включении и выключении клиента соответственно)

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

Добавлено: 08 фев 2018, 18:42
kardash
Добавляет, но я такое руками могу добавить....
01.png
Указать интерфейс, а не шлюз можно, но такой роут не будет работать в Router OS
Что не так?

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

Добавлено: 09 фев 2018, 08:29
Chupaka
Как видно из кода, должен быть IP в том числе

А что говорит

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

/ip dhcp-client print detail
?

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

Добавлено: 09 фев 2018, 23:06
kardash
В RouterOS v6.39.3 отрабатывает так как на скрине выше

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

Добавлено: 09 фев 2018, 23:57
kardash

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

#
:local rmark "WAN2"
#
: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 $iface
:if ($count=0) do={
/ip route add gateway=$gw routing-mark=$rmark
} else={
if ($rmark="main") do={
/ip route set [ find dst-address=0.0.0.0/0 !routing-mark gateway!=$gw ] gateway=$gw
} else={
/ip route set [ find dst-address=0.0.0.0/0 routing-mark=$rmark gateway!=$gw ] gateway=$gw
}
}
} 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 ]
}
}
В таком виде работает правильно только хотелось бы ещё метрику задавать....

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

Добавлено: 11 фев 2018, 19:12
Chupaka
А что поменялось? А то с телефона и с уничтоженным форматированием неудобно искать отличия. И что мешает задавать метрику?

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

Добавлено: 28 окт 2019, 14:58
winhex
Добрый день! Я использую резервирование каналов при помощи двух статических роутов с check-gateway и разным distance, все работает отлично, но есть небольшая проблема - один из провайдеров (velcom) иногда меняет шлюз, из-за чего микротик перекидывает все на резервный dsl-канал. После ручного изменения шлюза все работает дальше. Я так понимаю, этот скрипт можно использовать для решения проблемы? Т.е. маршрут с новым шлюзом для velcom прописывать этим скриптом - кроме шлюза ничего не меняется.