Update helperFunctions; update dnsToIPv6SubnetResolver to use new helper function

This commit is contained in:
Philip Henning 2025-01-20 12:13:57 +01:00
parent eb1fa8d1c6
commit 3d9c098574
3 changed files with 27 additions and 42 deletions

View file

@ -1,38 +0,0 @@
# -------------------------------------------------------------------------------
# IPv6 helper functions
#
# by Philip 'ShokiNN' Henning <mail@philip-henning.com>
# RouterOS compatibility: 7+
# Version 1.0
# last update: 20.01.2025
# License: MIT
# -------------------------------------------------------------------------------
# ---------------------------
# Function: resolveIPv6
# - Takes an DNS string (e.g. "example.com")
# - Returns a string of and IPv6 address
# ---------------------------
:global resolveIPv6 do={
:local result [:toarray ""]
:local maxwait 5
:local cnt 0
:local listname "tmp-resolve$cnt"
/ipv6/firewall/address-list {
:do {
:while ([:len [find list=$listname]] > 0) do={
:set cnt ($cnt + 1)
:set listname "tmp-resolve$cnt"
}
:set cnt 0
add list=$listname address=$1
:while ([find list=$listname && dynamic] = "" && $cnt < $maxwait) do={:delay 1;:set cnt ($cnt +1)}
:foreach i in=[find list=$listname && dynamic] do={
:local rawip [get $i address]
:set result ($result, [:pick $rawip 0 [:find $rawip "/"]])
}
remove [find list=$listname && !dynamic]
}
}
:return $result
}

View file

@ -51,9 +51,9 @@
# Log "run of script" # Log "run of script"
:log info "$logPrefix running"; :log info "$logPrefix running";
[/system/script/run "helperFunctions"; global safelyResolve];
:local index 0; :local index 0;
:foreach i in=$domainToIpv6Subnet do={ :foreach i in=$domainToIpv6Subnet do={
[/system/script/run "ipv6HelperFunctions"; global resolveIPv6];
:local configDomain ("$($i->0)"); :local configDomain ("$($i->0)");
:local configSubnetLength ("$($i->1)"); :local configSubnetLength ("$($i->1)");
@ -65,13 +65,12 @@
:log info "$startLogMsg $configDomain"; :log info "$startLogMsg $configDomain";
/ipv6/firewall/address-list/remove [/ipv6/firewall/address-list/find list="$ipv6AddressList" comment="$configComment"]; /ipv6/firewall/address-list/remove [/ipv6/firewall/address-list/find list="$ipv6AddressList" comment="$configComment"];
:set dnsIp [$resolveIPv6 $configDomain]; :set dnsIp [$safelyResolve $configDomain ipv6];
:if ($dnsIp != "") do={ :if ($dnsIp != "") do={
/ipv6/firewall/address-list/add list="$ipv6AddressList" address="$dnsIp/$configSubnetLength" comment="$configComment"; /ipv6/firewall/address-list/add list="$ipv6AddressList" address="$dnsIp/$configSubnetLength" comment="$configComment";
:local addedSubnet [:pick [/ipv6/firewall/address-list/get [/ipv6/firewall/address-list/find list="$ipv6AddressList" comment="$configComment"]] 1]; :local addedSubnet [:pick [/ipv6/firewall/address-list/get [/ipv6/firewall/address-list/find list="$ipv6AddressList" comment="$configComment"]] 1];
:log info "$logPrefix domain: $configDomain - Set to: $addedSubnet";
} }
:log info "$logPrefix domain: $configDomain - Set to: $addedSubnet";
:log info "$endLogMsg $configDomain"; :log info "$endLogMsg $configDomain";
}; };

24
helperFunctions.rsc Normal file
View file

@ -0,0 +1,24 @@
# -------------------------------------------------------------------------------
# Helper functions
#
# by Philip 'ShokiNN' Henning <mail@philip-henning.com>
# RouterOS compatibility: 7+
# Version 1.0
# last update: 20.01.2025
# License: MIT
# -------------------------------------------------------------------------------
# ---------------------------
# Function: safelyResolve
# - Takes an DNS string (e.g. "example.com")
# - Takes an IP type [ipv4, ipv6]
# - Returns a string of and IP address
# ---------------------------
:global safelyResolve do={
:do {
:local ip [:resolve domain-name="$1" type=$2];
:return "$ip";
} on-error={
return "";
};
};