From ff9e3279778a760992e41ec9cf63c9de201db0ce Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 7 May 2026 10:20:41 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 07 10:20:41. --- .../20260507/20260507102001-Binary.backup | Bin 0 -> 294946 bytes .../20260507/20260507102001-Config.rsc | 4610 +++++++++++++++++ .../20260507/20260507102001-Diff-Config.rsc | 49 + 3 files changed, 4659 insertions(+) create mode 100644 MikroMaster/20260507/20260507102001-Binary.backup create mode 100644 MikroMaster/20260507/20260507102001-Config.rsc create mode 100644 MikroMaster/history/20260507/20260507102001-Diff-Config.rsc diff --git a/MikroMaster/20260507/20260507102001-Binary.backup b/MikroMaster/20260507/20260507102001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..df8ec8c17be931a8f4a50d0b9260de14c3f66d52 GIT binary patch literal 294946 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‹y8~m+JGsD1y?sXc=+S~e<;U!^ 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%0AFC;GcA~3o3G$5pl`2!RBrN6BXEg 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º()r8R?)f?q!EScm%I9E>8 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

hHpT(>aat`@V_Z#DVfrZdFHyPZYX7rCje5;CoUw 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\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n\r\ + \n :local UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\"; \"mod/AM-\ + Certs-By-Ident\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/633/2f6d4158\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 14:35:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n# :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log warning (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" .\ + \_\$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +set wlan1 enable-nstreme=yes +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=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=89.110.101.17 list=VPN-Server +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 +/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=input comment="Accept Rule for Trusted-NTP Servers" \ + in-interface-list=WAN protocol=udp src-address-list=Trusted-NTP src-port=\ + 123 +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-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 +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" \ + dst-address=!10.30.30.0/24 log-prefix=VPN-all 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="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 +/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=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=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com +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/20260507102001-Diff-Config.rsc b/MikroMaster/history/20260507/20260507102001-Diff-Config.rsc new file mode 100644 index 0000000..8dfc9a1 --- /dev/null +++ b/MikroMaster/history/20260507/20260507102001-Diff-Config.rsc @@ -0,0 +1,49 @@ +4269,4277c4269,4271 +< 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=dns.quad9.net comment=Quad9-dns list=TrustedNS +> add address=dns.google comment=Google-dns list=TrustedNS +> add address=security.cloudflare-dns.com comment=CloudFlare-dns list=TrustedNS +4282c4276 +< src-address=!10.30.30.0/24 src-address-list=!Trusted-DNS +--- +> src-address=!10.30.30.0/24 src-address-list=!TrustedNS +4286c4280 +< src-address-list=!Trusted-DNS +--- +> src-address-list=!TrustedNS +4297,4301c4291,4292 +< 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=input comment="Accept Rule for Trusted-NTP Servers" \ +< in-interface-list=WAN protocol=udp src-address-list=Trusted-NTP src-port=\ +< 123 +--- +> connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ +> udp src-address=!10.30.30.0/24 +4303,4304c4294,4295 +< "accept NTP clients on local area network" dst-port=123 \ +< in-interface-list=LAN protocol=udp src-address=10.30.30.0/24 +--- +> "accept NTP clients on local area network" dst-port=123 protocol=udp \ +> src-address=10.30.30.0/24 +4372a4364,4366 +> add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ +> out-interface=WG passthrough=no protocol=tcp tcp-flags=syn tcp-mss=\ +> 1381-65535 +4376,4378d4369 +< 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 +4411c4402 +< WAN src-address-list=Trusted-DNS +--- +> WAN src-address-list=TrustedNS -- 2.52.0