В переменной rmark необходимо указать нужную метку (например, isp1, isp2, isp3).
Значение "main" используется в том случае, если маршрут требуется добавить в основную таблицу маршрутизации.
Таблица маршрутизации должна быть создана заранее следующей командой:
/routing table add fib name=isp1
Скрипт размещается в разделе /ip/dhcp-client на соответствующем интерфейсе.
:local rmark "isp1" :local recursiveGW "77.88.8.8" :local recroute [/ip route print count-only where dst-address=0.0.0.0/0 !routing-mark gateway=$recursiveGW comment=$rmark ] :local rmarkroute [/ip route print count-only where dst-address=0.0.0.0/0 routing-table=$rmark ]
:if ($bound=1) do={ :local gw "$"gateway-address"%$interface"
#set recroute :if (recroute=0) do={ /ip route add dst-address=$recursiveGW gateway=$gw scope=20 comment="$rmark" distance=10 disabled=no /ip route add dst-address=0.0.0.0/0 gateway=$recursiveGW check-gateway=ping distance=10 target-scope=20 comment=$rmark } else={ if ($rmark="main") do={ /ip route set [ find dst-address=$recursiveGW !routing-table gateway!=$gw ] gateway=$gw } else={ /ip route set [ find dst-address=$recursiveGW routing-table=$rmark gateway!=$gw ] gateway=$gw } }
#set rmark route :if ($rmarkroute=0) do={ /ip route add gateway=$gw routing-table=$rmark } else={ if ($rmark="main") do={ /ip route set [ find dst-address=0.0.0.0/0 !routing-table gateway!=$gw ] gateway=$gw } else={ /ip route set [ find dst-address=0.0.0.0/0 routing-table=$rmark gateway!=$gw ] gateway=$gw } } } else={
#remove routes :if ($rmark="main") do={ /ip route remove [ find dst-address=$recursiveGW/32 gateway~"%$interface" ] /ip route remove [ find dst-address=0.0.0.0/0 gateway=$recursiveGW ] } else={ /ip route remove [ find dst-address=$recursiveGW] /ip route remove [ find dst-address=0.0.0.0/0 gateway=$recursiveGW] /ip route remove [ find dst-address=0.0.0.0/0 routing-table=$rmark type=unicast ] } }
TAG: dhcp, recursive route, MikroTik, RouterOS 7, рекурсивная маршрутизация