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