From 5aa4fa4799a63f059d93633b8c520db6cf749b29 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 7 May 2026 04:20:16 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 07 04:20:16. --- .../20260507/20260507042001-Binary.backup | Bin 0 -> 276537 bytes .../20260507/20260507042001-Config.rsc | 4599 +++++++++++++++++ .../20260507/20260507042001-Diff-Config.rsc | 204 + 3 files changed, 4803 insertions(+) create mode 100644 MikroMaster/20260507/20260507042001-Binary.backup create mode 100644 MikroMaster/20260507/20260507042001-Config.rsc create mode 100644 MikroMaster/history/20260507/20260507042001-Diff-Config.rsc diff --git a/MikroMaster/20260507/20260507042001-Binary.backup b/MikroMaster/20260507/20260507042001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5991c0c0857bcc8021e0e81863cc4f4e07782f43 GIT binary patch literal 276537 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⁡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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 Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\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 UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \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\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 (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\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 };\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\"; \"mod/AM-\ + Certs-By-Ident\" } 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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/633/2f6d4158\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 14:35: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: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={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\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\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 warning (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :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" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\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# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\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# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/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 +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 +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 +set wlan1 enable-nstreme=yes +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,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/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 \ + 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 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 dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=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.4.4,8.8.8.8 +/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" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net 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 +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=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 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 +/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 +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" \ + disabled=yes 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 dst-port=443 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat disabled=yes dst-port=22 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=22 +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 +add interface=WG type=external +add interface=wlan2 type=internal +/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 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" disabled=yes 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/20260507/20260507042001-Diff-Config.rsc b/MikroMaster/history/20260507/20260507042001-Diff-Config.rsc new file mode 100644 index 0000000..ac4b835 --- /dev/null +++ b/MikroMaster/history/20260507/20260507042001-Diff-Config.rsc @@ -0,0 +1,204 @@ +557d556 +< \n:global Identity [/system/identity/get name];\r\ +559,560c558,559 +< \n:global RemoveMe true;\r\ +< \n:global RunOnce (a);\r\ +--- +> \n:global RemoveMe;\r\ +> \n:global RunOnce;\r\ +572,576c571 +< \n\r\ +< \n :local UrlSuffix \$Identity;\r\ +< \n :local UrlDir \"certs/\";\r\ +< \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ +< \r\ +--- +> \n \r\ +590,591c585,590 +< \n \r\ +< \n\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\ +599,600c598,599 +< \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ +< \_as-value;\r\ +--- +> \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ +> ame) dst-path=\$CertFileName as-value;\r\ +603,604d601 +< \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ +< t YE\" ];\r\ +607,610d603 +< \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\ +684,685c677 +< \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\"; \"mod/AM-\ +< Certs-By-Ident\" } do={\r\ +--- +> \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ +743c735 +< \n:global Identity [/system/identity/get name];\r\ +--- +> \n:global Identity [ /system identity get name ];\r\ +750c742 +< \n:global ScriptsUrlSuffix (a);\r\ +--- +> \n:global ScriptsUrlSuffix \"\";\r\ +812,813c804,805 +< \n:global CertRenewPass (a); #{\r\ +< \n# \"\";\r\ +--- +> \n:global CertRenewPass {\r\ +> \n \"\";\r\ +816c808 +< \n#};\r\ +--- +> \n};\r\ +818,819c810,811 +< \n:global CertIssuedExportPass (a); # {\r\ +< \n# \"\";\r\ +--- +> \n:global CertIssuedExportPass {\r\ +> \n \"\";\r\ +822c814 +< \n#};\r\ +--- +> \n};\r\ +945c937 +< \n:global CommitId \"main/633/2f6d4158\";\r\ +--- +> \n:global CommitId \"main/614/a7992fc8\";\r\ +948c940 +< r: root, in 14:35:03 05.05.2026.\";\r\ +--- +> r: root, in 01:00:03 05.05.2026.\";\r\ +2388a2381,2465 +> \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\ +2776,2778c2853,2854 +< \n } else={\r\ +< \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ +< \_changes are not available.\");\r\ +--- +> \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ +> ws and changes are not available.\")}\r\ +2780,2785c2856,2857 +< \n }\r\ +< \n\r\ +< \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ +< } else={ :global GlobalConfChanges (a); }\r\ +< \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ +< on; } else={ :global GlobalConfMigration (a); }\r\ +--- +> \n :set GlobalConfChanges;\r\ +> \n :set GlobalConfMigration;\r\ +2935a3008,3014 +> \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\ +2939c3018 +< \n# :set List (\$List->0);\r\ +--- +> \n :set List (\$List->0);\r\ +2981,2983c3060,3062 +< \n :log warning (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ +< um [ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" .\ +< \_\$ListUrl);\r\ +--- +> \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ +> \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ +> \$ListUrl);\r\ -- 2.52.0