From 94be3316de091b42b3a300010dfb57d916c6725d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 15:00:18 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 15:00:18. --- .../20260505/20260505150002-Binary.backup | Bin 0 -> 277485 bytes .../20260505/20260505150002-Config.rsc | 4675 +++++++++++++++++ .../20260505/20260505150002-Diff-Config.rsc | 178 + 3 files changed, 4853 insertions(+) create mode 100644 MikroMaster/20260505/20260505150002-Binary.backup create mode 100644 MikroMaster/20260505/20260505150002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505150002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505150002-Binary.backup b/MikroMaster/20260505/20260505150002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..450b25fef5ee2b34d6884f237952370307f1f80e GIT binary patch literal 277485 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
URJe?s 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

>%1Glo1umQC%Eu}&uAQgfZP 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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=1.0.0.1,8.8.8.8 use-doh-server=\ + https://security.cloudflare-dns.com/dns-query +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" name=dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC 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 disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +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/20260505/20260505150002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505150002-Diff-Config.rsc new file mode 100644 index 0000000..500feea --- /dev/null +++ b/MikroMaster/history/20260505/20260505150002-Diff-Config.rsc @@ -0,0 +1,178 @@ +3350,3355c3350 +< \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/ip/dns static\r\ +3365c3360 +< \n/ip dns forwarders\r\ +--- +> \n/ip/dns forwarders\r\ +3379,3380c3374 +< \n} on-error={ }\r\ +< \n\r\ +--- +> \n{ one-error={ }\r\ +3382,3535d3375 +< 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" +3690,3691c3530 +< doh-max-server-connections=20 servers=1.0.0.1,8.8.8.8 use-doh-server=\ +< https://security.cloudflare-dns.com/dns-query +--- +> doh-max-server-connections=20 servers=1.0.0.1,8.8.8.8 verify-doh-cert=yes -- 2.52.0