From d5e307646c7492134abaaa86d22016306d614536 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 13:00:24 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 13:00:24. --- .../20260505/20260505130002-Binary.backup | Bin 0 -> 270787 bytes .../20260505/20260505130002-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505130002-Diff-Config.rsc | 18 + 3 files changed, 4524 insertions(+) create mode 100644 MikroMaster/20260505/20260505130002-Binary.backup create mode 100644 MikroMaster/20260505/20260505130002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505130002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505130002-Binary.backup b/MikroMaster/20260505/20260505130002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0595c7bbd4b78f8ad2bdfbd4bca311bb53018b4e GIT binary patch literal 270787 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

dK`vPV!q}Al5HPC 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%0Avi|h5yuF2XttHCukpoK(Y1!7}` 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≦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

=7Dc)@g1#FuePG8- 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

xcXR3bYX^`|F!;GskfhSVB-YUu3hVy*u#> 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

xT`p@v*mh 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\"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/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.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 MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\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 :local mikro [ :tobool \$1 ];\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 :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\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=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local 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" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\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:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\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=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\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=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\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 :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=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\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:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\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 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=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=172.66.164.200 comment=dou.ua list=FuckRKN +add address=104.20.28.254 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/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 acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/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 note +set show-at-login=no +/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 routerboard settings +# Warning: cpu not running at default frequency +set cpu-frequency=700MHz +/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 +add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" 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/20260505/20260505130002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505130002-Diff-Config.rsc new file mode 100644 index 0000000..f6976eb --- /dev/null +++ b/MikroMaster/history/20260505/20260505130002-Diff-Config.rsc @@ -0,0 +1,18 @@ +4167d4166 +< add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +4169c4168 +< add address=104.21.32.39 comment=rutracker.org list=FuckRKN +--- +> add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +4170a4170 +> add address=104.21.32.39 comment=rutracker.org list=FuckRKN +4172,4173c4172,4173 +< add address=172.66.164.200 comment=dou.ua list=FuckRKN +< add address=104.20.28.254 comment=dou.ua list=FuckRKN +--- +> add address=8.47.69.6 comment=dou.ua list=FuckRKN +> add address=8.6.112.6 comment=dou.ua list=FuckRKN +4175d4174 +< add address=185.110.92.40 comment=pornolab.net list=FuckRKN +4176a4176 +> add address=185.110.92.40 comment=pornolab.net list=FuckRKN -- 2.52.0