From 9de87a7a4978f0eb98dc16a03a40639e2fb0d39d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 13:40:18 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 13:40:18. --- .../20260505/20260505134002-Binary.backup | Bin 0 -> 271563 bytes .../20260505/20260505134002-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505134002-Diff-Config.rsc | 20 + 3 files changed, 4526 insertions(+) create mode 100644 MikroMaster/20260505/20260505134002-Binary.backup create mode 100644 MikroMaster/20260505/20260505134002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505134002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505134002-Binary.backup b/MikroMaster/20260505/20260505134002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..c5efceb215ccd7d333db41d8875201a4e1fd527f GIT binary patch literal 271563 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 @B^`IioleyV5h@;<+moccgF$+JD{ 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\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system routerboard settings +# Warning: cpu not running at default frequency +set cpu-frequency=700MHz +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260505/20260505134002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505134002-Diff-Config.rsc new file mode 100644 index 0000000..f051ca3 --- /dev/null +++ b/MikroMaster/history/20260505/20260505134002-Diff-Config.rsc @@ -0,0 +1,20 @@ +4163d4162 +< add address=194.85.61.76 comment=grani.ru list=FuckRKN +4164a4164 +> add address=194.85.61.76 comment=grani.ru list=FuckRKN +4169d4168 +< add address=104.21.32.39 comment=rutracker.org list=FuckRKN +4170a4170 +> add address=104.21.32.39 comment=rutracker.org list=FuckRKN +4175d4174 +< add address=185.110.92.41 comment=pornolab.net list=FuckRKN +4177c4176 +< add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +--- +> add address=185.110.92.41 comment=pornolab.net list=FuckRKN +4178a4178 +> add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +4212c4212 +< connection-state=established,related,new +--- +> connection-state=established,related,new disabled=yes -- 2.52.0