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

2NMQ?<@C0gWG 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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.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.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=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 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/20260505094002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505094002-Diff-Config.rsc new file mode 100644 index 0000000..1f01f86 --- /dev/null +++ b/MikroMaster/history/20260505/20260505094002-Diff-Config.rsc @@ -0,0 +1,12 @@ +4165d4164 +< add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4166a4166 +> add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4169d4168 +< add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4170a4170 +> add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4177d4176 +< add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +4178a4178 +> add address=104.21.71.238 comment=crimerussia.com list=FuckRKN -- 2.52.0