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