From c16536bcc1c34ffa8ad1554f5ee8185fec4ae955 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 11:20:21 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 11:20:21. --- .../20260504/20260504112002-Binary.backup | Bin 0 -> 262578 bytes .../20260504/20260504112002-Config.rsc | 4302 +++++++++++++++++ .../20260504/20260504112002-Diff-Config.rsc | 116 + 3 files changed, 4418 insertions(+) create mode 100644 MikroMaster/20260504/20260504112002-Binary.backup create mode 100644 MikroMaster/20260504/20260504112002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504112002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504112002-Binary.backup b/MikroMaster/20260504/20260504112002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..51b33cde7ea6a1314b3925a6896969cc4905e2bb GIT binary patch literal 262578 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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/546/6df1efd6\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 11:10:03 04.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global 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 FetchLargeScript [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\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 :local DirName (\"tmpfs/\" . [ \$CleanName \$FetchLargeScript ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n :log error (\$FetchLargeScript . \" Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchUrl ] . \"-\ + \" . [ \$GetRandom20CharAlNum ]);\r\ + \n \r\ + \n :do {\r\ + \n :if (\$fetchMethod = \"false\") do={\r\ + \n :if (\$fetchMode = \"false\") do={\r\ + \n /tool/fetch url=(\$fetchUrl) dst-path=\$FileName check-certifica\ + te=\$CheckCert http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScri\ + pt ] }) as-value;\r\ + \n } else={\r\ + \n /tool/fetch url=(\$fetchUrl) dst-path=\$FileName check-certifica\ + te=\$CheckCert http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScri\ + pt ] }) mode=\$fetchMode as-value;\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$fetchMode = \"false\") do={\r\ + \n /tool/fetch url=(\$fetchUrl) dst-path=\$FileName check-certifica\ + te=\$CheckCert http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScri\ + pt ] }) http-method=\$fetchMethod as-value;\r\ + \n } else={\r\ + \n /tool/fetch url=(\$fetchUrl) dst-path=\$FileName check-certifica\ + te=\$CheckCert http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScri\ + pt ] }) http-method=\$fetchMethod mode=\$fetchMode as-value;\r\ + \n }\r\ + \n }\r\ + \n } on-error={\r\ + \n \$LogPrint error \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint error \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n \$RmDir \$DirName;\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 \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# 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:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n\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 FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ + \n :local FwAddrListsIndexUrl (\$FwAddrListsUrl . \"index\");\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n :local CheckCerts true;\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 FwAddrListsIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$FwAddrListsIndex = false) do={\r\ + \n :set FwAddrListsIndex [ :tolf [ \$FetchLargeFiles \$ScriptName \$F\ + wAddrListsIndexUrl true \$FetchMode ] ];\r\ + \n :if (\$FwAddrListsIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$FwAddrListsIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$FwAddrListsIndexUrl);\r\ + \n :set FwAddrListsIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach FwListFile in=[ :deserialize \$FwAddrListsIndex delimiter=\"\ + \\n\" from=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/20260504112002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504112002-Diff-Config.rsc new file mode 100644 index 0000000..e511995 --- /dev/null +++ b/MikroMaster/history/20260504/20260504112002-Diff-Config.rsc @@ -0,0 +1,116 @@ +937c937 +< \n:global CommitId \"main/546/6df1efd6\";\r\ +--- +> \n:global CommitId \"main/543/2586b4eb\";\r\ +940c940 +< r: root, in 11:10:03 04.05.2026.\";\r\ +--- +> r: root, in 10:45:03 04.05.2026.\";\r\ +2429a2430,2431 +> \n :local FetchString \"undefined\";\r\ +> \n \r\ +2441a2444,2448 +> \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ +> ode=\" . \$fetchMode)] ];\r\ +> \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ +> \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ +> \n \r\ +2444c2451 +< \n :log error (\$FetchLargeScript . \" Failed creating directory!\");\r\ +--- +> \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ +2447,2470c2454,2477 +< \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchUrl ] . \"-\ +< \" . [ \$GetRandom20CharAlNum ]);\r\ +< \n \r\ +< \n :do {\r\ +< \n :if (\$fetchMethod = \"false\") do={\r\ +< \n :if (\$fetchMode = \"false\") do={\r\ +< \n /tool/fetch url=(\$fetchUrl) dst-path=\$FileName check-certifica\ +< te=\$CheckCert http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScri\ +< pt ] }) as-value;\r\ +< \n } else={\r\ +< \n /tool/fetch url=(\$fetchUrl) dst-path=\$FileName check-certifica\ +< te=\$CheckCert http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScri\ +< pt ] }) mode=\$fetchMode as-value;\r\ +< \n }\r\ +< \n } else={\r\ +< \n :if (\$fetchMode = \"false\") do={\r\ +< \n /tool/fetch url=(\$fetchUrl) dst-path=\$FileName check-certifica\ +< te=\$CheckCert http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScri\ +< pt ] }) http-method=\$fetchMethod as-value;\r\ +< \n } else={\r\ +< \n /tool/fetch url=(\$fetchUrl) dst-path=\$FileName check-certifica\ +< te=\$CheckCert http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScri\ +< pt ] }) http-method=\$fetchMethod mode=\$fetchMode as-value;\r\ +< \n }\r\ +--- +> \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ +> \$GetRandom20CharAlNum ]);\r\ +> \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ +> ttp-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScript ] }) as-value\ +> ;\r\ +> \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ +> \n :onerror Err {\r\ +> \n :set FetchString (\"/tool/fetch \" . \\\r\ +> \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ +> \_. \$fetchMethod . \"\\\" \")] . \\\r\ +> \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ +> \_. \"\\\") \" . \\\r\ +> \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ +> e . \" \")] . \\\r\ +> \n http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScript ] })\ +> \_as-value);\r\ +> \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ +> \n :put [\$FetchString];\r\ +> \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ +> fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ +> \_\$FetchLargeScript ] }) as-value];\r\ +> \n } do={\r\ +> \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ +> \n \$RmFile \$FileName;\r\ +2472,2473c2479 +< \n } on-error={\r\ +< \n \$LogPrint error \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ +--- +> \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ +2478d2483 +< \n\r\ +2480c2485 +< \n \$LogPrint error \$0 (\"The file downloaded from \" . \$fetchUrl . \ +--- +> \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ +2482d2486 +< \n \$RmDir \$DirName;\r\ +2485d2488 +< \n\r\ +2498d2500 +< \n \$RmFile \$FileName;\r\ +2860a2863,2873 +> \n\r\ +> \n:do {\r\ +> \n:onerror Err {\r\ +> \n :global GlobalConfReady;\r\ +> \n :retry { :if (\$GlobalConfReady != true) \\\r\ +> \n do={ :error (\"Global config not ready.\"); }; } delay=500ms max=50;\ +> \r\ +> \n } do={\r\ +> \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ +> \n }\r\ +> \n}\r\ +2886,2888c2899 +< \n :local CheckCerts true;\r\ +< \n :local FetchMode \"https-only\";\r\ +< \n :local FetchMethod \"get\";\r\ +--- +> \n :local FetchMode \"\";\r\ +3025a3037 +> \n :error true;\r\ +3042a3055 +> \n :error true;\r\ +3052a3066 +> \n :error true;\r\ +3101c3115 +< \n \" from list '\" . \$FwListName . \".\");\r\ +--- +> \n \" from list '\" . \$FwListName .\".\");\r\ -- 2.52.0