From c3f885bbf5d683621faa1781de399be1309b5587 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 13:21:20 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 13:21:20. --- .../20260504/20260504132001-Binary.backup | Bin 0 -> 262021 bytes .../20260504/20260504132001-Config.rsc | 4296 +++++++++++++++++ .../20260504/20260504132001-Diff-Config.rsc | 73 + 3 files changed, 4369 insertions(+) create mode 100644 MikroMaster/20260504/20260504132001-Binary.backup create mode 100644 MikroMaster/20260504/20260504132001-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504132001-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504132001-Binary.backup b/MikroMaster/20260504/20260504132001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..96a4570b47fdfc0c0346471ac4345aa731d27ccc GIT binary patch literal 262021 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 V!I0l`#HE&y;3pIe5?gaEJc^{sEmh~oP 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�pz0_4?6-m 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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\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/556/4817e0dc\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 12:50: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 ExitError;\r\ + \n:global ExitOnError;\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 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\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n:global FetchLargeFiles;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n\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 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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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 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 [ :len\ + \_\$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 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: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 ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n :log debug (\$0 . \"Validation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\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-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :set tmpName [ \$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum ] ];\r\ + \n :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n :log error (\$RunName . \" Failed creating directory: \" . \$DirName\ + \_. \"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"-\ + \" . [ \$GetRandom20CharAlNum ]);\r\ + \n :local Url (\$fetchUrl . \$FileName);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-value\ + ;\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=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# \$RmFile \$FileName;\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\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 :log warning (\$0 . \"Downloading certificate failed, trying without\ + .\");\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 :log 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# 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: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" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local FwAddrListsDirName (\"fw-addr-lists.d/\" . [ /system identity g\ + et name ] . \"/\");\r\ + \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \$FwAddrListsDirName);\r\ + \n :local Index \"index.lst\";\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n :local FetchMode \"https-only\";\r\ + \n :local FetchMethod \"get\";\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchLargeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n\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 ] - 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 :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ + \n message=(\"\\\$LogPrint: The message is already in log, scripting \ + subsystem may have crashed before!\") ] ] > 0) do={\r\ + \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ + , possibly caused by us. Delaying!\");\r\ + \n :delay 5m;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local tmpIndex false;\r\ + \n :local IndexUrl (\$FwAddrListsUrl . \$Index);\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchLargeFiles \$ScriptName \$IndexUrl \ + \$CheckCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$IndexUrl);\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: \" . \$IndexUrl);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach FwListFile in=[ :deserialize \$tmpIndex delimiter=\"\\n\" fro\ + m=dsv options=dsv.plain ] do={\r\ + \n :local FwListName (\$FwListFile->0);\r\ + \n :local Delim [ \$FindDelim \$FwListName ];\r\ + \n :if (\$Delim = 0) do={ :set FwListName \"\"; };\r\ + \n :if ([ :len \$FwListName ] = 0) do={ :error true; }\r\ + \n :set FwListName [ :pick \$FwListName 0 \$Delim ];\r\ + \n\r\ + \n :local FwListUrl (\$FwAddrListsUrl . \$FwListName);\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 \$FwAddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchLargeFiles \$ScriptName \$FwListUrl t\ + rue \$FetchMode ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$FwListName . \"', \" . \$I . \". try from: \" . \$FwListUrl);\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 '\" . \ + \$FwListName . \"' from: \" . \$FwListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$FwListName . \"' from: \" \ + . \$FwListUrl);\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 ] ];\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=\ + { :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={:log error (\$ScriptName . \" Failed parsing address: \ + \" . \$Line->0);}\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/20260504132001-Diff-Config.rsc b/MikroMaster/history/20260504/20260504132001-Diff-Config.rsc new file mode 100644 index 0000000..a745d54 --- /dev/null +++ b/MikroMaster/history/20260504/20260504132001-Diff-Config.rsc @@ -0,0 +1,73 @@ +937c937 +< \n:global CommitId \"main/556/4817e0dc\";\r\ +--- +> \n:global CommitId \"main/555/40c9fb70\";\r\ +940c940 +< r: root, in 12:50:02 04.05.2026.\";\r\ +--- +> r: root, in 12:45:02 04.05.2026.\";\r\ +2425c2425 +< \n :local RunName [:tostr \$1];\r\ +--- +> \n :local ScriptName [:tostr \$1];\r\ +2427,2431c2427,2429 +< \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 :local CheckCert [:tostr \$3];\r\ +> \n :local fetchMode [:tostr \$4];\r\ +> \n :local fetchMethod [:tostr \$5];\r\ +2444,2446c2442,2443 +< \n\r\ +< \n :set tmpName [ \$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum ] ];\r\ +< \n :local DirName (\"tmpfs/\" . \$tmpName);\r\ +--- +> \n \r\ +> \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ +2448,2449c2445 +< \n :log error (\$RunName . \" Failed creating directory: \" . \$DirName\ +< \_. \"!\");\r\ +--- +> \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ +2453,2455c2449,2450 +< \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"-\ +< \" . [ \$GetRandom20CharAlNum ]);\r\ +< \n :local Url (\$fetchUrl . \$FileName);\r\ +--- +> \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ +> \$GetRandom20CharAlNum ]);\r\ +2457,2460c2452,2455 +< \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ +< \\\r\ +< \n http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-value\ +< ;\r\ +--- +> \n /tool/fetch check-certificate=\$CheckCert \$fetchUrl dst-path=\$File\ +> Name \\\r\ +> \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ +> lue;\r\ +2465,2466c2460,2461 +< \n :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"'\ +< \_- \" . \$Err);\r\ +--- +> \n :log error (\$0 . \" Failed downloading from \" . \$fetchUrl . \" - \ +> \" . \$Err);\r\ +2472,2473c2467,2468 +< \n :log error (\$RunName . \" The file downloaded from '\" . \$Url . \"\ +< ' did not show up.\");\r\ +--- +> \n :log error (\$0 . \"The file downloaded from \" . \$fetchUrl . \" di\ +> d not show up.\");\r\ +2521,2522c2516,2517 +< \n :log warning (\$0 . \"Downloading certificate failed, trying without\ +< .\");\r\ +--- +> \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ +> hout.\");\r\ +2528c2523 +< \n :log info (\$0 . \" Adding new script: \" . \$Script);\r\ +--- +> \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ -- 2.52.0