Скрипт рекурсивной маршрутизации с использованием dhcp на микротике
В переменной 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, recourcieve route, mikrotik, ROS7, рекурсивная маршрутизация, микротик