From 90a716031e7857a61e2f8fc80355a6fcb2c2068e Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 06:00:10 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 06:00:10. --- .../20260501/20260501060002-Binary.backup | Bin 0 -> 363383 bytes .../20260501/20260501060002-Config.rsc | 5866 +++++++++++++++++ .../20260501/20260501060002-Diff-Config.rsc | 35 + 3 files changed, 5901 insertions(+) create mode 100644 MikroMaster/20260501/20260501060002-Binary.backup create mode 100644 MikroMaster/20260501/20260501060002-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501060002-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501060002-Binary.backup b/MikroMaster/20260501/20260501060002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..a25151b15fb27da86711bdc1403d944b826b54f9 GIT binary patch literal 363383 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

(x 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 Nw89o_|KCJ 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

&@ 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�l3Lrf$F_e@oX)R0=FY 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 z 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

*hikL_~6Z zeb0VkI@HO_zw?3W!#Wc_%VkBT0Ld*MD2@Xi5E$ysd*TQ2L2lA5vUP>oXUS?wk5#3u zgidkgCNr80#cGs&BTaFePa`(ezrG1)lDupsP&Fjwb~4SRJ;x?fS%zA%=sV2x*qNl$ z^amABOUz_W-q^lXtgrV|se^nIq@~~&`REKMSm_*SS>?8p_BC@a9$yMuzA=zLzyeB= zE?|tS$rjT&rbHsQK!%|9hR4dm*|jcS>HNku(P z5?gLR>h4r!S3mkqwQy02r?�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 XGBHvpeT2#!Oz1lw@TjV`ElhWyh#8=6 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260501/20260501060002-Config.rsc b/MikroMaster/20260501/20260501060002-Config.rsc new file mode 100644 index 0000000..913cfc2 --- /dev/null +++ b/MikroMaster/20260501/20260501060002-Config.rsc @@ -0,0 +1,5866 @@ +# 2026-05-01 06:00:02 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + station-roaming=enabled wds-default-bridge=Bridge-LAN wds-mode=\ + dynamic-mesh wireless-protocol=802.11 wmm-support=enabled wps-mode=\ + disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz security=security ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac security=security ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +add name=mVados options=HostName +add name=hostname-search-set options=HostName +/ip dns forwarders +add comment=BS dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +add comment=telegram dns-servers=10.30.30.81 name=api.telegram.org \ + verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/351/9baf15a4\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 05:45:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global ExitError;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n \$LogPrint warning \$0 (\"This system has low free flash space but \ + \" . \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint info \$0 (\"There are \" . \$CertCount . \" Certificates \ + with CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :global LogPrint;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {:set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :global LogPrint;\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\r\ + \n \r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ + \n \r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Setup Global Environment for scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$Name 0 1 ] = \"\\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);}\r\ + \n}\r\ + \n\r\ + \n:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false;\r\ + \n:local scriptVersion \"26.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ + ________\\n\" . \$mailBodyCopyright);\r\ + \n :set mailStep1Body (\$mailStep1Body . \"\\n[*** TEST START ***]\\n\\\ + \$DeviceInfo: \" . [ \$DeviceInfo ] . \"\\n[*** TEST END ***]\\n\");\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ + \n\r\ + \n :local FwAddrLists {\r\ + \n \"allow\"={\r\ + \n { url=(\$FwAddrListsUrl . \"allow\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n \"block\"={\r\ + \n { url=(\$FwAddrListsUrl . \"block\");\r\ + \n cert=\"ISRG Root X2\" };\r\ + \n# { url=\"https://raw.githubusercontent.com/stamparm/ipsum/refs/hea\ + ds/master/levels/4.txt\";\r\ + \n# # higher level (decrease the numerical value) for more addresses, \ + and vice versa\r\ + \n# cert=\"ISRG Root X1\" };\r\ + \n# { url=\"https://www.dshield.org/block.txt\"; cidr=\"/24\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://lists.blocklist.de/lists/strongips.txt\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v4.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v6.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n };\r\ + \n# \"mikrotik\"={\r\ + \n# { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ + \n# cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n# };\r\ + \n \"FuckRKN\"={\r\ + \n { url=(\$FwAddrListsUrl . \"FuckRKN\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n };\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHuge;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n :put [\$GetBranch];\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ + \n message=(\"\\\$LogPrint: The message is already in log, scripting \ + subsystem may have crashed before!\") ] ] > 0) do={\r\ + \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ + , possibly caused by us. Delaying!\");\r\ + \n :delay 5m;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n\r\ + \n :foreach FwListName,FwList in=\$FwAddrLists do={\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n\r\ + \n :foreach List in=\$FwList do={\r\ + \n :local CheckCertificate false;\r\ + \n :local Data false;\r\ + \n :local TimeOut [ \$EitherOr [ :totime (\$List->\"timeout\") ] \$Fw\ + AddrListTimeOut ];\r\ + \n\r\ + \n :if ([ :len (\$List->\"cert\") ] > 0) do={\r\ + \n :set CheckCertificate true;\r\ + \n :if ([ \$CertificateAvailable (\$List->\"cert\") \"fetch\" ] = f\ + alse) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Downloading required certif\ + icate (\" . \$FwListName . \\\r\ + \n \" / \" . \$List->\"url\" . \") failed, trying anyway.\");\ + \r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHuge \$ScriptName (\$List->\"url\")\ + \_\$CheckCertificate ] ];\r\ + \n :if (\$Data = false) do={\r\ + \n :if (\$I < 5) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Failed downloading for li\ + st '\" . \$FwListName . \\\r\ + \n \"', \" . \$I . \". try from: \" . \$List->\"url\");\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n \$LogPrint warning \$ScriptName (\"Failed downloading for list '\ + \" . \$FwListName . \\\r\ + \n \"' from: \" . \$List->\"url\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Downloaded \" . [ \$HumanReadab\ + leNum [ :len \$Data ] 1024 ] . \\\r\ + \n \"B for list '\" . \$FwListName . \"' from: \" . \$List->\"u\ + rl\");\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Li\ + ne ] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"\ + cidr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\ + \\.[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$C\ + IDR ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3\ + })\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \ + \"/\" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\")\ + \_do={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName .\".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed to add IPv4 address \ + \" . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed to add IPv6 address \ + \" . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n \$LogPrint info \$ScriptName (\"list: \" . \$FwListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set disable-ipv6=yes max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add comment=WAN interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=HostName \ + dhcp-option-set=domain-search-set dns-server=10.30.30.81 domain=WORKGROUP \ + gateway=10.30.30.81 netmask=24 ntp-server=10.30.30.81,10.30.30.10 \ + wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=git.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=ros.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=api.telegram.org list=Telegram +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid disabled=yes +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=dst-nat chain=dstnat comment=npm disabled=yes dst-port=81 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes dst-port=80 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" interval=1w \ + name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260501/20260501060002-Diff-Config.rsc b/MikroMaster/history/20260501/20260501060002-Diff-Config.rsc new file mode 100644 index 0000000..060a79f --- /dev/null +++ b/MikroMaster/history/20260501/20260501060002-Diff-Config.rsc @@ -0,0 +1,35 @@ +769c769 +< \n:global CommitId \"main/351/9baf15a4\";\r\ +--- +> \n:global CommitId \"main/349/7cf2b376\";\r\ +772c772 +< r: root, in 05:45:02 01.05.2026.\";\r\ +--- +> r: root, in 05:30:02 01.05.2026.\";\r\ +4349c4349 +< \n cert=\"ISRG Root X2\"; timeout=1w };\r\ +--- +> \n cert=\"Root YE\"; timeout=1w };\r\ +4353c4353 +< \n cert=\"ISRG Root X2\" };\r\ +--- +> \n cert=\"Root YE\" };\r\ +4368,4371c4368,4371 +< \n# \"mikrotik\"={\r\ +< \n# { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ +< \n# cert=\"ISRG Root X2\"; timeout=1w };\r\ +< \n# };\r\ +--- +> \n \"mikrotik\"={\r\ +> \n { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ +> \n cert=\"Root YE\"; timeout=1w };\r\ +> \n };\r\ +4374c4374 +< \n cert=\"ISRG Root X2\"; timeout=1w };\r\ +--- +> \n cert=\"Root YE\"; timeout=1w };\r\ +4406,4407c4406 +< \n :put [\$GetBranch];\r\ +< \n \r\ +--- +> \n\r\ -- 2.52.0