From e309b619b563965048352c205102656787be6d80 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 06:40:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 06:40:08. --- .../20260501/20260501064001-Binary.backup | Bin 0 -> 364965 bytes .../20260501/20260501064001-Config.rsc | 5871 +++++++++++++++++ .../20260501/20260501064001-Diff-Config.rsc | 10 + 3 files changed, 5881 insertions(+) create mode 100644 MikroMaster/20260501/20260501064001-Binary.backup create mode 100644 MikroMaster/20260501/20260501064001-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501064001-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501064001-Binary.backup b/MikroMaster/20260501/20260501064001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..d6d6e0893d01d311a0fd70f86f123a782c8563f9 GIT binary patch literal 364965 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%0D1kQ`y2y;CjSED4XSgqtFy!C+TfE`=BSgGA7A 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 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-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/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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 true;\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 (!(((\$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 \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\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 dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \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\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \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\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/352/ae7bad3c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 05:50:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\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 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:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global 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 :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\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 \$LogPrint 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 \$LogPrint 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 \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint 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 \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\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 GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$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 \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' 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 :global LogPrint;\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 \$LogPrint 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 :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\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 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={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {: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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\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 :global LogPrint;\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 \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint 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 \$LogPrint 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 \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint 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 \$LogPrint 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 LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 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: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 LogPrint;\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 \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\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 \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', 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: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: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:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\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 \$LogPrint 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: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: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:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\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: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:set FetchLargeFiles do={\r\ + \n :local ScriptName [: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 :local FetchString \"undefined\";\r\ + \n \r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ + \n \r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) 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 \$ScriptName ] }) as-va\ + lue);\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\ + \_\$ScriptName ] }) as-value];\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set 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={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Setup Global Environment for scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\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} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\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 configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\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\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\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 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 CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\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 CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\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 :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\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:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$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:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false;\r\ + \n:local scriptVersion \"26.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ + ________\\n\" . \$mailBodyCopyright);\r\ + \n :set mailStep1Body (\$mailStep1Body . \"\\n[*** TEST START ***]\\n\\\ + \$DeviceInfo: \" . [ \$DeviceInfo ] . \"\\n[*** TEST END ***]\\n\");\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\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\r\ + \n :local FwAddrLists {\r\ + \n \"allow\"={\r\ + \n { url=(\$FwAddrListsUrl . \"allow\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n \"block\"={\r\ + \n { url=(\$FwAddrListsUrl . \"block\");\r\ + \n cert=\"ISRG Root X2\" };\r\ + \n# { url=\"https://raw.githubusercontent.com/stamparm/ipsum/refs/hea\ + ds/master/levels/4.txt\";\r\ + \n# # higher level (decrease the numerical value) for more addresses, \ + and vice versa\r\ + \n# cert=\"ISRG Root X1\" };\r\ + \n# { url=\"https://www.dshield.org/block.txt\"; cidr=\"/24\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://lists.blocklist.de/lists/strongips.txt\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v4.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v6.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n };\r\ + \n# \"mikrotik\"={\r\ + \n# { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ + \n# cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n# };\r\ + \n \"FuckRKN\"={\r\ + \n { url=(\$FwAddrListsUrl . \"FuckRKN\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n };\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHuge;\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 ] 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\r\ + \n :foreach FwListName,FwList in=\$FwAddrLists do={\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\r\ + \n :foreach List in=\$FwList do={\r\ + \n :local CheckCertificate false;\r\ + \n :local Data false;\r\ + \n :local TimeOut [ \$EitherOr [ :totime (\$List->\"timeout\") ] \$Fw\ + AddrListTimeOut ];\r\ + \n\r\ + \n :if ([ :len (\$List->\"cert\") ] > 0) do={\r\ + \n :set CheckCertificate true;\r\ + \n :if ([ \$CertificateAvailable (\$List->\"cert\") \"fetch\" ] = f\ + alse) do={\r\ + \n :log warning (\$ScriptName . \" Downloading required certifica\ + te (\" . \$FwListName . \\\r\ + \n \" / \" . \$List->\"url\" . \") failed, trying anyway.\");\ + \r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHuge \$ScriptName (\$List->\"url\")\ + \_\$CheckCertificate ] ];\r\ + \n :if (\$Data = false) do={\r\ + \n :if (\$I < 5) do={\r\ + \n :log debug (\$ScriptName . \" Failed downloading for list \ + '\" . \$FwListName . \\\r\ + \n \"', \" . \$I . \". try from: \" . \$List->\"url\");\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\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 . \\\r\ + \n \"' from: \" . \$List->\"url\");\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :len \$Data ] 1024 ] . \\\r\ + \n \"B for list '\" . \$FwListName . \"' from: \" . \$List->\"u\ + rl\");\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Li\ + ne ] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"\ + cidr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\ + \\.[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$C\ + IDR ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3\ + })\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \ + \"/\" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\")\ + \_do={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n } on-error={:log error (\$ScriptName . \" Failed parsing address\ + : \" . \$Line->0);}\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName .\".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/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=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/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 disable-ipv6=yes 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 comment=WAN 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 cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/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-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/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="ether1 - Unet" \ + use-peer-dns=no +/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.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.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=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +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 +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=HostName \ + 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=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=git.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=ros.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.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" 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" 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 +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=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/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=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 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=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +/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 disabled=yes +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 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/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=Telegram dst-address=\ + !10.30.30.0/24 dst-address-list=Telegram 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="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +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=dst-nat chain=dstnat comment=npm disabled=yes 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" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes 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 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/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 +add action=add-dst-to-address-list address-list=Telegram \ + address-list-timeout=none-dynamic chain=prerouting comment=Telegram \ + 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 walled-garden +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 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet 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 +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=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 +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +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 packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/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="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" 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="Setup Global Environment for scripts" 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 +add comment="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/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/20260501/20260501064001-Diff-Config.rsc b/MikroMaster/history/20260501/20260501064001-Diff-Config.rsc new file mode 100644 index 0000000..72d6596 --- /dev/null +++ b/MikroMaster/history/20260501/20260501064001-Diff-Config.rsc @@ -0,0 +1,10 @@ +5433a5434 +> add address=api.telegram.org list=Telegram +5523,5525d5523 +< add action=mark-routing chain=prerouting comment=Telegram dst-address=\ +< !10.30.30.0/24 dst-address-list=Telegram new-routing-mark=To-VPN \ +< src-address=10.30.30.0/24 src-address-list=!NoWG +5646,5648d5643 +< add action=add-dst-to-address-list address-list=Telegram \ +< address-list-timeout=none-dynamic chain=prerouting comment=Telegram \ +< content=api.telegram.org -- 2.52.0