:global GlobalFuncReady false;
# Git commit id & info, expected configuration version
-:global CommitId "main/333/a01c1573";
+:global CommitId "main/334/91030f8f";
:global CommitTAG "unknown";
-:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 03:15:02 01.05.2026.";
+:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 03:20:03 01.05.2026.";
# The variables are received right here.
:global GlobalConfVersion 138;
--- /dev/null
+:global ListRKN;
+:global SrvRKN;
+:global Done;
+
+#has $Done been initialized?
+:if ([:typeof $Done] != "boolean") do={
+ :set Done true;
+}
+
+#make sure previous runs have finished
+while (!$Done) do={
+ :nothing;
+}
+
+#block any other runs
+:set Done false;
+
+#delete old address lists
+:foreach aListItem in=[/ip firewall address-list find list=$ListRKN] do={
+ /ip firewall address-list remove $aListItem;
+}
+
+:foreach aSrvRKN in=$SrvRKN do={
+#force the dns entries to be cached
+ :do {
+ :resolve $aSrvRKN;
+ } on-error={
+ :log error "dns resolve failure [ ip - resolve ip ]"
+ }
+
+ :foreach dnsRecord in=[/ip dns cache all find where (name=$aSrvRKN)] do={
+#if it's an A records add it directly
+ :if ([/ip dns cache all get $dnsRecord type]="A") do={
+ :local newAddress [/ip dns cache all get $dnsRecord data];
+ :do {
+ /ip firewall address-list add list=$ListRKN address=$newAddress comment=$aSrvRKN;
+ } on-error={
+ :log error "error when adding ip to list: $newAddress"
+ }
+ }
+
+#if it's a CNAME follow it until we get A records
+ :if ([/ip dns cache all get $dnsRecord type]="CNAME") do={
+ :local cname;
+ :local nextCname
+ :set cname [/ip dns cache all find where (name=$aSrvRKN && type="CNAME")];
+ :set nextCname [/ip dns cache all find where (name=[/ip dns cache all get $cname data] && type="CNAME")];
+
+ :while ($nextCname != "") do={
+ :set cname $nextCname;
+ :set nextCname [/ip dns cache all find where (name=[/ip dns cache all get $cname data] && type="CNAME")];
+ }
+
+#add the a records we found
+ :foreach aRecord in=[/ip dns cache all find where (name=[/ip dns cache all get $cname data] && type="A")] do={
+ :do {
+ /ip firewall address-list add list=$ListRKN address=[/ip dns cache all get $aRecord data] comment=$aSrvRKN;
+ } on-error={
+ :log error "error when adding ip to list: $newAddress"
+ }
+ }
+ }
+ }
+}