Just a quick post to show an example of day to day usage of RouterOS scripting.
Goal: We had to change the src-address for a bunch of radius-server listings across 40 MikroTik devices, to match a new pptp-tunnel address. What would’ve been a pain was that the address is different on each device.
Solution: Create a scriptlet to pull the IP into the update (set) routine, ensuring it is formatted correctly for use.
Heres the full solution in all its ugly glory:
/radius set 0 src-address=[:pick [/ip address get [/ip address find where interface=[/interface pptp-client get [/interface pptp-client find where connect-to=192.168.1.1] name]] address] 0 [:find [/ip address get [/ip address find where interface=[/interface pptp-client get [/interface pptp-client find where connect-to=192.168.1.1] name]] address] "/"]]
And here’s it broken down with explanations (follow the numbers for easiest reading):
#1 start the command to change the ip address /radius set 0 src-address=[ #2 we don't know the src-address yet so we need to work it out #6 We need to only select a portion of the address (up until the /) :pick [ /ip address get [ #5 Find an IP address listing where the interface matches the name of our pptp interface /ip address find where interface=[ #4 Get the name of this pptp-client interface /interface pptp-client get [ #3 The src-address is attached to a pptp-client interface that we know connects to 192.168.1.1 # So we're going to find it /interface pptp-client find where connect-to=192.168.1.1 ]name ] ] address ] 0 [ #8 To use that address in the find command :find [ #7 We run the same routine to get the IP address in its entirety /ip address get [ /ip address find where interface=[ /interface pptp-client get [ /interface pptp-client find where connect-to=192.168.1.1 ] name ] ] address #9 Searching for "/" and using the result as the number for the :pick selection (0 -> "/") ] "/" ] #10 The pick command completes, selecting only the IP address portion # and this is returned to our original set request, changing the radius clients src-address listing. ]
And there we have it!
Advertisement