From b5d492510ff61b088cd6a982c1c902ca2a5ef1ac Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 20:20:57 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 20:20:57. --- .../20260504/20260504202002-Binary.backup | Bin 0 -> 265020 bytes .../20260504/20260504202002-Config.rsc | 4393 +++++++++++++++++ .../20260504/20260504202002-Diff-Config.rsc | 337 ++ 3 files changed, 4730 insertions(+) create mode 100644 MikroMaster/20260504/20260504202002-Binary.backup create mode 100644 MikroMaster/20260504/20260504202002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504202002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504202002-Binary.backup b/MikroMaster/20260504/20260504202002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..62a5ba4da6526fc67aeabcfdadade20361274fd0 GIT binary patch literal 265020 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 z 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

%ouIs&rLn}>pqh-K!q>N6; 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%0A1~0~dw2EG-R2Gme&SOA7zYIAS@Btq*Xb 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

Jyb#nz= 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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/589/c05c3863\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 19:45:02 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 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 :do {\r\ + \n :onerror Err {\r\ + \n :log info (\$0 \" Fetching script '\" . \$ScriptName . \"' from ur\ + l: \" . \$Url);\r\ + \n :set tmpIndex [ /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) \$Url\ + \_dst-path=\$tmpIndex ];\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-lists\ + \_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\ + \n# :for I from=1 to=5 do={\r\ + \n# :if (\$tmpIndex = false) do={\r\ + \n# :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$FwAddrLis\ + tsUrl \$Index \$CheckCerts ] ];\r\ + \n# :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n# :log warning (\$ScriptName . \" Failed downloading address-list\ + \_index, \" . \$I . \". try from: \" . \$FwAddrListsUrl . \$Index);\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: \" . \$FwAddrListsUrl . \$Index);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local Url (\$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 \$Url \$CheckC\ + erts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$Url);\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: \" . \$Url);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$Url);\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 Delim [ \$FindDelim \$Line ];\r\ + \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ + \n :if ([ :len \$Line ] = 0) do={ :error true; }\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 :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + {\r\ + \n :set (\$IPv4Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ + \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$ScriptName . \" Failed parsing address: \" . \$Lin\ + e->0);\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName 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 debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' 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 debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\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=\$FwListName 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 debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' 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 debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\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 debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName 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 IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\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 '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\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/20260504202002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504202002-Diff-Config.rsc new file mode 100644 index 0000000..a6abe4b --- /dev/null +++ b/MikroMaster/history/20260504/20260504202002-Diff-Config.rsc @@ -0,0 +1,337 @@ +2919,3250c2919,2921 +< add 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 :do {\r\ +< \n :onerror Err {\r\ +< \n :log info (\$0 \" Fetching script '\" . \$ScriptName . \"' from ur\ +< l: \" . \$Url);\r\ +< \n :set tmpIndex [ /tool/fetch check-certificate=yes-without-crl \\\r\ +< \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) \$Url\ +< \_dst-path=\$tmpIndex ];\r\ +< \n } do={\r\ +< \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ +< \n :log warning (\$ScriptName . \" Failed downloading address-lists\ +< \_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\ +< \n# :for I from=1 to=5 do={\r\ +< \n# :if (\$tmpIndex = false) do={\r\ +< \n# :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$FwAddrLis\ +< tsUrl \$Index \$CheckCerts ] ];\r\ +< \n# :if (\$tmpIndex = false && \$I < 5) do={\r\ +< \n# :log warning (\$ScriptName . \" Failed downloading address-list\ +< \_index, \" . \$I . \". try from: \" . \$FwAddrListsUrl . \$Index);\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: \" . \$FwAddrListsUrl . \$Index);\r\ +< \n :set tmpIndex \"\";\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ +< options=dsv.plain ] do={\r\ +< \n :set List (\$List->0);\r\ +< \n :local ListName;\r\ +< \n :local Delim [ \$FindDelim \$List ];\r\ +< \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ +< \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ +< \_. \$List);\r\ +< \n :if ([ :len \$List ] = 0) do={\r\ +< \n :log error (\$ScriptName . \" Failed parsing address-list index en\ +< try: \" . \$List);\r\ +< \n } else={\r\ +< \n :set ListName [ :pick \$List 0 \$Delim ];\r\ +< \n }\r\ +< \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ +< \_. \$ListName . \" - Ok.\");\r\ +< \n :local Url (\$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 \$Url \$CheckC\ +< erts ] ];\r\ +< \n :if (\$Data = false && \$I < 5) do={\r\ +< \n :log warning (\$ScriptName . \" Failed downloading for list '\ +< \" . \$ListName . \"', \" . \$I . \". try from: \" . \$Url);\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: \" . \$Url);\r\ +< \n } else={\r\ +< \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ +< \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ +< \$Url);\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 Delim [ \$FindDelim \$Line ];\r\ +< \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ +< \n :if ([ :len \$Line ] = 0) do={ :error true; }\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 :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ +< {\r\ +< \n :set (\$IPv4Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ +< { :set (\$IPv6Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ +< { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ +< \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ +< { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ +< \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ +< \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ +< \n }\r\ +< \n } on-error={\r\ +< \n :log error (\$ScriptName . \" Failed parsing address: \" . \$Lin\ +< e->0);\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ +< \n list=\$FwListName 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 debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ +< ss . \\\r\ +< \n \" in list '\" . \$FwListName . \"' 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 debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ +< ress . \\\r\ +< \n \" from list '\" . \$FwListName . \".\");\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=\$FwListName 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 debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ +< ss . \\\r\ +< \n \" in list '\" . \$FwListName . \"' 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 debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ +< ress . \\\r\ +< \n \" from list '\" . \$FwListName . \".\");\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 debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +< \r\ +< \n :foreach Address,Timeout in=\$Branch do={\r\ +< \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ +< \_. \\\r\ +< \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +< .\");\r\ +< \n :onerror Err {\r\ +< \n /ip/firewall/address-list/add list=\$FwListName 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 IPv4 address \" \ +< . \$Address . \\\r\ +< \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ +< \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +< \r\ +< \n :foreach Address,Timeout in=\$Branch do={\r\ +< \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ +< \_. \\\r\ +< \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +< .\");\r\ +< \n :onerror Err {\r\ +< \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ +< stComment \\\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 '\" . \$FwListName . \"': \" . \$Err);\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\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\ +--- +> add dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ +> policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ +> source="#!rsc by Vados\ -- 2.52.0