From 7342c809d20bd57a2802e0940e2a3b7001c05968 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 09:20:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 09:20:08. --- .../20260501/20260501092002-Binary.backup | Bin 0 -> 368103 bytes .../20260501/20260501092002-Config.rsc | 5898 +++++++++++++++++ .../20260501/20260501092002-Diff-Config.rsc | 96 + 3 files changed, 5994 insertions(+) create mode 100644 MikroMaster/20260501/20260501092002-Binary.backup create mode 100644 MikroMaster/20260501/20260501092002-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501092002-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501092002-Binary.backup b/MikroMaster/20260501/20260501092002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..27793038e01576977faee7b872a45c1851f6c917 GIT binary patch literal 368103 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�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 e6$& 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

Fp^s9xwVB%3Tin}Y1O#2hc&d+Kc@xoCb&V; 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 L7RJ-32x5HJWw72; literal 0 HcmV?d00001 diff --git a/MikroMaster/20260501/20260501092002-Config.rsc b/MikroMaster/20260501/20260501092002-Config.rsc new file mode 100644 index 0000000..1ac8f21 --- /dev/null +++ b/MikroMaster/20260501/20260501092002-Config.rsc @@ -0,0 +1,5898 @@ +# 2026-05-01 09:20: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 disabled=yes 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/366/ab812be1\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 08:50:03 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# check and download required certificate\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n\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\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\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\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={\r\ + \n :return false;\r\ + \n }\r\ + \n }\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\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={\r\ + \n :return false;\r\ + \n }\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# download and import certificate\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n\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 \" .\ + \_\\\r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\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 (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n 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 :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$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=\"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\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# name a certificate by its common-name\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global LogPrint;\r\ + \n\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 \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 :log warning (\$ScriptName . \" Downloading required certifica\ + te (\" . \$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 :log debug (\$ScriptName . \" Failed downloading for list \ + '\" . \$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 :log warning (\$ScriptName . \" Failed downloading for list '\" \ + . \$FwListName . \\\r\ + \n \"' from: \" . \$List->\"url\");\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :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={:log error (\$ScriptName . \" Failed parsing address\ + : \" . \$Line->0);}\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 :log 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 :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log 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 +/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=Telegram dst-address=\ + !10.30.30.0/24 dst-address-list=Telegram 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=Telegram \ + 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/20260501092002-Diff-Config.rsc b/MikroMaster/history/20260501/20260501092002-Diff-Config.rsc new file mode 100644 index 0000000..ef828a1 --- /dev/null +++ b/MikroMaster/history/20260501/20260501092002-Diff-Config.rsc @@ -0,0 +1,96 @@ +769c769 +< \n:global CommitId \"main/366/ab812be1\";\r\ +--- +> \n:global CommitId \"main/352/ae7bad3c\";\r\ +772c772 +< r: root, in 08:50:03 01.05.2026.\";\r\ +--- +> r: root, in 05:50:02 01.05.2026.\";\r\ +1370d1369 +< \n# check and download required certificate\r\ +1374d1372 +< \n\r\ +1375a1374 +> \n :global EitherOr;\r\ +1378,1383c1377 +< \n\r\ +< \n :if ([ :len \$UseFor ] = 0) do={\r\ +< \n \$LogPrint warning \$0 (\"The intended use is undefined!\");\r\ +< \n :set UseFor \"undefined\";\r\ +< \n }\r\ +< \n\r\ +--- +> \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\r\ +1391d1384 +< \n\r\ +1396d1388 +< \n\r\ +1406d1397 +< \n\r\ +1411,1413c1402,1403 +< \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ +< \n :return false;\r\ +< \n }\r\ +--- +> \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ +> se}\r\ +1415d1404 +< \n\r\ +1422d1410 +< \n\r\ +1433,1435c1421,1422 +< \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ +< \n :return false;\r\ +< \n }\r\ +--- +> \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ +> se}\r\ +1443d1429 +< \n# download and import certificate\r\ +1446,1449c1432,1433 +< \n\r\ +< \n :global ScriptUpdatesBaseUrl;\r\ +< \n :global ScriptUpdatesUrlSuffix;\r\ +< \n\r\ +--- +> \n :global GlobalScriptsUrl;\r\ +> \n :global GlobalScriptsUrlSuffix;\r\ +1456,1459c1440,1443 +< \n\r\ +< \n \$LogPrint info \$0 (\"Downloading and importing certificate with \" .\ +< \_\\\r\ +< \n \"CommonName '\" . \$CommonName . \"'.\");\r\ +--- +> \n \r\ +> \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ +> onName '\" . \$CommonName . \"'.\");\r\ +> \n \r\ +1464,1466c1448,1449 +< \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ +< sUrlSuffix) \\\r\ +< \n dst-path=\$FileName as-value;\r\ +--- +> \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ +> Suffix) dst-path=\$FileName as-value;\r\ +1473d1455 +< \n :local CertSettings [ /certificate/settings/get ];\r\ +1475,1483c1457 +< \_] ] = 0 && \\\r\ +< \n !(((\$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=\"ISRG\ +< \_Root X1\" ] ] > 0)) do={\r\ +--- +> \_] ] = 0) do={\r\ +1517d1490 +< \n\r\ +1525d1497 +< \n# name a certificate by its common-name\r\ +1528d1499 +< \n\r\ +1531d1501 +< \n\r\ -- 2.52.0