Скрипт DHCP-клиента для создания маркированного маршрута
Добавлено: 18 июл 2017, 17:51
Скрипт создаёт дефолтный маршрут с указанной Routing Mark, при этом в шлюзе указывается IP-адрес и интерфейс (на случай, если на разных интерфейсах получены одинаковые шлюзы)
Скрипт нужно вписать в поле Script у DHCP-Client'а, подправив лишь первую переменную (изменить на желаемую Routing Mark для данного интерфейса). Если нужно добавлять в основную таблицу маршрутизации, делаем :local rmark "main"
Идея взята из официальной документации и допилена до состояния, когда её можно использовать в боевых условиях 
Скрипт нужно вписать в поле 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 ]
}
}
