From e712608ea3e5588296aec0dad023f6fea533c588 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 7 May 2026 12:40:41 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 07 12:40:41. --- .../20260507/20260507124002-Binary.backup | Bin 0 -> 295757 bytes .../20260507/20260507124002-Config.rsc | 4619 +++++++++++++++++ .../20260507/20260507124002-Diff-Config.rsc | 7 + 3 files changed, 4626 insertions(+) create mode 100644 MikroMaster/20260507/20260507124002-Binary.backup create mode 100644 MikroMaster/20260507/20260507124002-Config.rsc create mode 100644 MikroMaster/history/20260507/20260507124002-Diff-Config.rsc diff --git a/MikroMaster/20260507/20260507124002-Binary.backup b/MikroMaster/20260507/20260507124002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..4f610375aae4edd58938db877e2fa9febb248e14 GIT binary patch literal 295757 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

c6ZPLTK5@Rgja`Aor2dh^<|Mp-bg~EO0hU9 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

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