From 056e7593544e2d0ad20c6e285fb54b00ea4d835a Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 23:40:58 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 23:40:58. --- .../20260504/20260504234001-Binary.backup | Bin 0 -> 268232 bytes .../20260504/20260504234001-Config.rsc | 4465 +++++++++++++++++ .../20260504/20260504234001-Diff-Config.rsc | 19 + 3 files changed, 4484 insertions(+) create mode 100644 MikroMaster/20260504/20260504234001-Binary.backup create mode 100644 MikroMaster/20260504/20260504234001-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504234001-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504234001-Binary.backup b/MikroMaster/20260504/20260504234001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..f30936734405b52733b72dd21a0a4d264ce60a34 GIT binary patch literal 268232 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 z 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

bS0ieP8O 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

O12=Dn{0>(v@jS!p-J5cD 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

Duv zhz=Yj-jalaEBB2!K3?|!7_fnR6(q66;wnVfHbbumS}foIogk})pw}_o{5SB#r0@8e zL@Kxjx;MkiP70h3WK;sF)d^X~K&g*v3CC`A>B6L;Lm%LyCVI0NCq~{hp0!bT)o`W% zrD$#S=o0wa?S_eP?@G9pl;=WyobPzjbaA5F_77T-c+{(>6oxWdZqXsw3d#YJFFI8p z=ioiqMieK42fyjXCm-F-Hz)den1!Ezc~0{AZWeo$vhI)YdP8-8z6AUMQREJZ4UY9b ztp7F+thi2rs<7Je%_uE2U81o|sf82*7s)o~`wNt8C^biNB(*eSE8B6V%FbnUlGF74 zHEVJ+K1aO8Cn{cDB|U3EMM2VzU923I-^QvTywJ#alw*I5\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \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\";\ + \n#:local Script AM-GlobalConfig;\ + \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\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +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 comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-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/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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#/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\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 false;\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 ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\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 /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\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 comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\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/598/1c6ca643\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 21:30:03 04.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\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 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 GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\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 ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\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 updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$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 :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$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 :log info (\$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 :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$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 :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\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 :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 :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 :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\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:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\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:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\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 :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log 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:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log 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 mode=https 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 :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$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 :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$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 :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :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 :log 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 FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\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 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 [ :le\ + n \$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 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 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 ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\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={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :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 :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\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 :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\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\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 :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log 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 :log 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 :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log 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 :log 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 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 VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log 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 :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 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\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\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\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 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 :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\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 :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', 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\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\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\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\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 :log 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\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\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\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\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\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# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\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-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\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=3\ + 2768 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## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\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\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\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\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 \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\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 (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\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={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\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 \"Every Day Set Global Environment Variables\";\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: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:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=vados 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 ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\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 :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\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 :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\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 '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\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 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\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 }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName 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 warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' 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 warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\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=\$ListName 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 warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' 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 warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\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 warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\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 '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName 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 IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\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\r\ + \n" +add comment=updateVPNList dont-require-permissions=no name=dnsLookup owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":\ + global ListName\r\ + \n:global Servers\r\ + \n:global Done\r\ + \n\r\ + \n#has \$Done been initialized\?\r\ + \n:if ([:typeof \$Done] != \"boolean\") do={\r\ + \n :set Done true;\r\ + \n}\r\ + \n\r\ + \n#make sure previous runs have finished\r\ + \nwhile (!\$Done) do={\r\ + \n :nothing;\r\ + \n}\r\ + \n\r\ + \n#block any other runs\r\ + \n:set Done false;\r\ + \n\r\ + \n#delete old address lists\r\ + \n:foreach aListItem in=[/ip firewall address-list find list=\$ListName] d\ + o={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n\r\ + \n:foreach aServer in=\$Servers do={\r\ + \n#force the dns entries to be cached\r\ + \n :do {\r\ + \n :resolve \$aServer;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\"\r\ + \n }\r\ + \n\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aServer)\ + ] do={\r\ + \n#if it's an A records add it directly\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListName address=\$\ + newAddress comment=\$aServer;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \"\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n#if it's a CNAME follow it until we get A records\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname\r\ + \n :set cname [/ip dns cache all find where (name=\$aServer && \ + type=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n \r\ + \n#add the a records we found\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListName addres\ + s=[/ip dns cache all get \$aRecord data] comment=\$aServer;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n#allow other scripts to call this\r\ + \n:set Done true\r\ + \n" +add comment=updateVPNList dont-require-permissions=no name=VPNList owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":\ + global Servers {\r\ + \n# Feel free to use your own unblock list ;)\r\ + \n\"telegra.ph\";\r\ + \n\"grani.ru\";\r\ + \n\"xhamster.com\";\r\ + \n\"kasparov.ru\";\r\ + \n\"lostfilm.tv\";\r\ + \n\"rutracker.org\";\r\ + \n\"lurkmore.to\";\r\ + \n\"dou.ua\";\r\ + \n\"youporn.com\";\r\ + \n\"pornolab.net\";\r\ + \n\"crimerussia.com\";\r\ + \n\"telegram.org\";\r\ + \n\"api.telegram.org\";\r\ + \n\"telegram.me\";\r\ + \n\"t.me\";\r\ + \n}\r\ + \n:global ListName VPN\r\ + \n\r\ + \n/system script run dnsLookup\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" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), 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 \ + 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(18dBm), 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 wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/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="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/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 allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no 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 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 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-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 +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/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-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/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=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/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.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 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.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 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=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +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 +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list 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=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +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=reg.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.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" 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" 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=9.9.9.9 comment="Cuad9-dns IPv4 1" 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 +/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=NUC disabled=yes list=NoWG +add address=10.30.30.10 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=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=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +add address=149.154.164.13 comment=telegra.ph list=VPN +/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 +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 +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm 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" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat 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 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +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 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy 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 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=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 +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/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="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + 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="Every Day Set Global Environment Variables" 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 +/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/20260504/20260504234001-Diff-Config.rsc b/MikroMaster/history/20260504/20260504234001-Diff-Config.rsc new file mode 100644 index 0000000..6a44437 --- /dev/null +++ b/MikroMaster/history/20260504/20260504234001-Diff-Config.rsc @@ -0,0 +1,19 @@ +4150a4151,4168 +> add address=194.85.61.76 comment=grani.ru list=VPN +> add address=109.70.26.37 comment=grani.ru list=VPN +> add address=104.16.3.81 comment=xhamster.com list=VPN +> add address=104.16.4.81 comment=xhamster.com list=VPN +> add address=188.114.97.1 comment=lostfilm.tv list=VPN +> add address=188.114.96.1 comment=lostfilm.tv list=VPN +> add address=172.67.182.196 comment=rutracker.org list=VPN +> add address=104.21.32.39 comment=rutracker.org list=VPN +> add address=104.247.81.99 comment=lurkmore.to list=VPN +> add address=8.6.112.6 comment=dou.ua list=VPN +> add address=8.47.69.6 comment=dou.ua list=VPN +> add address=66.254.114.79 comment=youporn.com list=VPN +> add address=185.110.92.40 comment=pornolab.net list=VPN +> add address=185.110.92.41 comment=pornolab.net list=VPN +> add address=104.21.71.238 comment=crimerussia.com list=VPN +> add address=172.67.172.95 comment=crimerussia.com list=VPN +> add address=149.154.167.99 comment=telegram.org list=VPN +> add address=149.154.166.110 comment=api.telegram.org list=VPN -- 2.52.0