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