From 5394604a564dfef84b9bae032a9a9bed48b15d70 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 22:40:57 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 22:40:57. --- .../20260504/20260504224002-Binary.backup | Bin 0 -> 268106 bytes .../20260504/20260504224002-Config.rsc | 4481 +++++++++++++++++ .../20260504/20260504224002-Diff-Config.rsc | 126 + 3 files changed, 4607 insertions(+) create mode 100644 MikroMaster/20260504/20260504224002-Binary.backup create mode 100644 MikroMaster/20260504/20260504224002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504224002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504224002-Binary.backup b/MikroMaster/20260504/20260504224002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..ce3154b2fa1fa1e21aa297fa51daf610584976de GIT binary patch literal 268106 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

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