From dd9ddde60a925b7d1500209f2c324dd6c36c0e8f Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 21:41:30 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 21:41:30. --- .../20260504/20260504214001-Binary.backup | Bin 0 -> 263386 bytes .../20260504/20260504214001-Config.rsc | 4349 +++++++++++++++++ .../20260504/20260504214001-Diff-Config.rsc | 110 + 3 files changed, 4459 insertions(+) create mode 100644 MikroMaster/20260504/20260504214001-Binary.backup create mode 100644 MikroMaster/20260504/20260504214001-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504214001-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504214001-Binary.backup b/MikroMaster/20260504/20260504214001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..1f157150ceb2ce5bcce2f7da2ae6468af48be206 GIT binary patch literal 263386 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 QyR=1AwpbgyFHk8fxKs* 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 RoEPSM4O&&W%-=`TwedJWiTTBfo}% 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\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/593/61326945\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 20:25:03 04.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=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log 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" +/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/20260504/20260504214001-Diff-Config.rsc b/MikroMaster/history/20260504/20260504214001-Diff-Config.rsc new file mode 100644 index 0000000..57134ca --- /dev/null +++ b/MikroMaster/history/20260504/20260504214001-Diff-Config.rsc @@ -0,0 +1,110 @@ +2982a2983,3013 +> \n# :do {\r\ +> \n# :onerror Err {\r\ +> \n# :log info (\$0 \" Fetching script '\" . \$ScriptName . \"' from u\ +> rl: \" . \$Url);\r\ +> \n# :set tmpIndex [ /tool/fetch check-certificate=yes-without-crl \\\ +> \r\ +> \n# http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) \$Ur\ +> l dst-path=\$tmpIndex ];\r\ +> \n# } do={\r\ +> \n# :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ +> \n# :log warning (\$ScriptName . \" Failed downloading address-list\ +> s index from: '\" . \$Url . \"' Error: \" . \$Err);\r\ +> \n# }\r\ +> \n# :error false;\r\ +> \n# }\r\ +> \n# \$WaitForFile \$tmpIndex;\r\ +> \n\r\ +> \n# :if (\$tmpIndex->\"status\" = \"finished\") do={\r\ +> \n# :set arrLists [ :tolf (\$tmpIndex->\"Lists\") ];\r\ +> \n# }\r\ +> \n# } do={\r\ +> \n# :log warning (\$ScriptName . \" Failed downloading address-list\ +> s index from: '\" . \$Url . \"' Error: \" . \$Err);\r\ +> \n# :if (\$Err != \"Fetch failed with status 404\") do={\r\ +> \n# :error false;\r\ +> \n# }\r\ +> \n# :set tmpIndex false;\r\ +> \n# :set arrLists false;\r\ +> \n# :error true;\r\ +> \n# }\r\ +> \n\r\ +3051a3083,3090 +> \n :local Delim [ \$FindDelim \$Line ];\r\ +> \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ +> \n :if ([ :len \$Line ] = 0) do={\r\ +> \n :do {\r\ +> \n :log info (\$ScriptName . \" address-list entry: \" . \$Line . \ +> \" is empty, or commented. Skipped.\"); \r\ +> \n } on-error={ }\r\ +> \n }\r\ +3077a3117,3119 +> \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ +> {\r\ +> \n :set (\$IPv4Addresses->\$Branch) ({}) };\r\ +3092a3135,3136 +> \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ +> { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ +3097a3142,3145 +> \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ +> { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ +> \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ +> { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ +3101c3149,3152 +< \n } on-error={ }\r\ +--- +> \n } on-error={\r\ +> \n :log error (\$ScriptName . \" Failed parsing address: \" . \$Lin\ +> e->0);\r\ +> \n }\r\ +3103d3153 +< \n }\r\ +3112,3113c3162,3163 +< \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ +< ress . \\\r\ +--- +> \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ +> ss . \\\r\ +3121,3122c3171,3172 +< \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ +< ddress . \\\r\ +--- +> \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ +> ress . \\\r\ +3137,3138c3187,3188 +< \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ +< ress . \\\r\ +--- +> \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ +> ss . \\\r\ +3146,3147c3196,3197 +< \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ +< ddress . \\\r\ +--- +> \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ +> ress . \\\r\ +3156,3157c3206,3207 +< \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ +< );\r\ +--- +> \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +> \r\ +3159,3160c3209,3210 +< \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ +< ss . \\\r\ +--- +> \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ +> \_. \\\r\ +3177,3178c3227,3228 +< \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ +< );\r\ +--- +> \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +> \r\ +3180,3181c3230,3231 +< \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ +< ss . \\\r\ +--- +> \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ +> \_. \\\r\ -- 2.52.0