Community discussions

 
User avatar
ekarin
Trainer
Trainer
Topic Author
Posts: 16
Joined: Fri Jun 01, 2018 9:12 pm
Contact:

Script of automatically updating gateway address at routes

Mon Sep 24, 2018 6:01 pm

According to my presentation in the 2018 MUM conference in Thailand, I presented in the topic "Monitoring the Internet Connections of WAN Links
with Only Routing Configuration". https://mum.mikrotik.com/presentations/ ... 743837.pdf
After the conference, I was asked from many people in Thailand on how to automatically update the ISP gateway addresses at routes if the ISP gateway addresses at the WAN interfaces were changed. My presentation showed them how to configure the recursive routes (i.e. routes with the static ISP gateways). As they asked, I realized that some ISPs sometimes change their gateway addresses. I have responded them with a solution to use a script that is able to automatically update the gateway addresses of the routes. I would like to share the following script here. Hopefully it may be useful for others.


In case of PPPoE Client at a WAN Link, the script is as follows:
:local newgw [/ip address get [find interface="pppoe-out1"] network];
:local routegw [/ip route get [find comment="isp1"] gateway ];
:if ($newgw != $routegw) do={
      /ip route set [find comment="isp1"] gateway=$newgw;
}

In case of DHCP Client at a WAN Link, the script is as follows:
:local newgw [ip dhcp-client get [find interface="ether1"] gateway];
:local routegw [/ip route get [find comment="isp1"] gateway ];
:if ($newgw != $routegw) do={
     /ip route set [find comment="isp1"] gateway=$newgw;
}

If you want to apply for more than one WAN links, for example, two WAN links (PPPoE Clients), just copy the above script and paste like this.
:local newgw1 [/ip address get [find interface="pppoe-out1"] network];
:local routegw1 [/ip route get [find comment="isp1"] gateway ];
:if ($newgw1 != $routegw1) do={
     /ip route set [find comment="isp1"] gateway=$newgw1;
}
:local newgw2 [/ip address get [find interface="pppoe-out2"] network];
:local routegw2 [/ip route get [find comment="isp2"] gateway ];
:if ($newgw2 != $routegw2) do={
     /ip route set [find comment="isp2"] gateway=$newgw2;
}

Note that do not forget to run the script using the scheduler with an appropriate time interval.

Who is online

Users browsing this forum: No registered users and 8 guests