From b58050963a5e23536835763f2d69e2fb9a48a7bd Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 30 Apr 2026 13:40:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Apr 30 13:40:08. --- .../20260430/20260430134002-Binary.backup | Bin 0 -> 351493 bytes .../20260430/20260430134002-Config.rsc | 5521 +++++++++++++++++ .../20260430/20260430134002-Diff-Config.rsc | 54 + 3 files changed, 5575 insertions(+) create mode 100644 MikroMaster/20260430/20260430134002-Binary.backup create mode 100644 MikroMaster/20260430/20260430134002-Config.rsc create mode 100644 MikroMaster/history/20260430/20260430134002-Diff-Config.rsc diff --git a/MikroMaster/20260430/20260430134002-Binary.backup b/MikroMaster/20260430/20260430134002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5d21a07a337e28a85d5b0851f6f6e931884c48df GIT binary patch literal 351493 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%0Ah81!RN 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%0Dy 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%0A!N6}#8Unq1pr`Lpey6331 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
    &KVFT$(oK&@yCp-%f?f)=xjq|jOTtjsf4_7A8 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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/272/ec61099b\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 12:00:02 30.04.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 :global LogPrint;\r\ + \n \r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n\r\ + \n# :retry command={abc} delay=1 max=2 on-error={:put \"got error\"} \r\ + \n :do {\r\ + \n \$LogPrint debug \$0 (\"Trying to detect public IP using default s\ + ervice: \" . \$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={\$LogPrint error [ :jobname ] (\"Fail\ + ed to detect public IP using default service: \" . \$Url . \".\")}\r\ + \n #:error \"Failed to detect public IP using default service: \$Url\ + .\"};\r\ + \n } on-error={\r\ + \n \$LogPrint error \$0 (\"Failed to detect public IP using default s\ + ervice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n \$LogPrint debug \$0 (\"Trying to detect public IP using fallback \ + service: \" . \$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={\$LogPrint error [ :jobname ] (\"Fai\ + led to detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :if (\$PubIpAddr = false) do={\r\ + \n :set PubIpAddr \"not-detected\";\r\ + \n } else={\r\ + \n :set PubIpAddr [ :pick \$PubIpAddr 0 15];\r\ + \n }\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: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 :global LogPrint;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n \$LogPrint 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# 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:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global OSUpdateMode;\r\ + \n\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n:local SchedInterval \"7d 00:00:00\";\r\ + \n:local SchedStartTime \"03:41:27\";\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 00:00:00\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 5. \$5 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 6. \$6 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# 7. \$7 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n#\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 00:00:00\" \"03:41:27\" ] =\ + \_false) do={:set ExitOK false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :global LogPrint;\r\ + \n :local SchedName [ :tostr \$1 ];\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 [get time]};\r\ + \n :local OnEvent [ :tostr \$4 ];\r\ + \n :if ([ :len \$OnEvent ] > 0) do={:set OnEvent \"/system/script { run \ + \$SchedName; }\"};\r\ + \n :local Policy [ :tostr \$5 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={:set Policy \"ftp,reboot,read,write,po\ + licy,test,password,sniff,sensitive,romon\"};\r\ + \n :local StartDate [ :tostr \$6 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={:set StartDate [get date]};\r\ + \n :local Comment [ :tostr \$7 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={:set Comment \"Scheduler for script: \ + \$SchedName\"};\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 \$LogPrint 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={\$LogPrint error \$0 (\"Failed to add/modify shceduler for '\" .\ + \_\$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedComment \$SchedInterval ] = \ + false) do={\r\ + \n \$LogPrint error \$ScriptName (\"Failed to add/modify shceduler for \"\ + \_. \$ScriptName . \"!\");\r\ + \n :set ExitOK false;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n# Add global Function OSUpdateMode\r\ + \n:if ([ :len \$OSUpdateMode ] = 0 || ![\$OSUpdateMode]) do={\r\ + \n :set OSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global LogPrint;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if ([ \$NewMode ] != false && \$NewMode != \$OldMode && \$NewMode =\ + \_\"updateOnce\") do={\r\ + \n :set BackupAndUpdateMode \$NewMode;\r\ + \n \$LogPrint warning \$0 (\"/nOk. /\$OsUpdateMode = \" . \$NewMode .\ + \_\".\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds.\");\ + \r\ + \n :delay 5;\r\ + \n /system/script { run AM-Backup-UpdateEmail; };\r\ + \n } else={\r\ + \n \$LogPrint warning \$0 (\"/nFunction /\$OsUpdateMode is \" . \$NewMo\ + de . \" but is may be only \\\"updateOnce\\\" value!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :error false;\r\ + \n };\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.02.12\"\r\ + \n\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) \\nhttps://github.com/beeyev/Mikrotik-RouterOS-auto\ + matic-backup-and-update\";\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: \$R\ + OsVerAvail\");\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\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## IP address detection\r\ + \n :global DevInfoIncludeIP;\r\ + \n :if ([\$DevInfoIncludeIP] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress \$GetPubIp;\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP addre\ + ss: \" . \$PublicIpAddress . \".\");\r\ + \n :log info (\"\$SMP Public IP address detected: \" . \$PublicIpAddres\ + s);\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 # 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# /system/script/environment remove [find name=\"buGlobalVarTar\ + getOsVersion\"];\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# #/system/script/environment remove [find name=\"OldMode\"];\ + \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" +/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=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=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="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 +/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 +/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/20260430/20260430134002-Diff-Config.rsc b/MikroMaster/history/20260430/20260430134002-Diff-Config.rsc new file mode 100644 index 0000000..1f49efa --- /dev/null +++ b/MikroMaster/history/20260430/20260430134002-Diff-Config.rsc @@ -0,0 +1,54 @@ +3490d3489 +< \n:local SchedStartTime \"03:41:27\";\r\ +3497,3499c3496,3498 +< \n# 2. \$2 - Interval (e.g. \"1d 00:00:00\" (default is \"1d\")) [**]\r\ +< \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ +< \r\ +--- +> \n# 2. \$2 - Comment (optional, default: \"Scheduler for script: \")\ +> \_[**]\r\ +> \n# 3. \$3 - Interval (e.g. \"1d 00:00:00\" (default is \"1d\")) [**]\r\ +3506,3508c3505,3506 +< \n# 7. \$7 - Comment (optional, default: \"Scheduler for script: \")\ +< \_[**]\r\ +< \n#\r\ +--- +> \n# 7. \$7 - Start Time (e.g. \"03:41:27\", default is current time) [**]\ +> \r\ +3518,3521c3516,3523 +< \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ +< ; :error true;}\r\ +< \n# :if ([ \$EditSchedulers \"my-script\" \"1d 00:00:00\" \"03:41:27\" ] =\ +< \_false) do={:set ExitOK false; :error true;}\r\ +--- +> \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={ \$LogPrint error\ +> \_\$ScriptName (\"Failed to add/modify shceduler for \" . \$ScriptName . \ +> \"!\") }\r\ +> \n# :if ([ \$EditSchedulers \"my-script\" \"My custom comment\" \"2d 00:00\ +> :00\" \"/system/script { run my-script; }\" \"ftp,reboot,read,write,policy\ +> ,test,password,sniff,sensitive,romon\" \"jan/01/2025\" \"03:41:27\" ] = fa\ +> lse) do={ \$LogPrint error \$ScriptName (\"Failed to add/modify shceduler \ +> for \" . \$ScriptName . \"!\") }\r\ +3526c3528,3531 +< \n :local Interval [ :tostr \$2 ];\r\ +--- +> \n :local Comment [ :tostr \$2 ];\r\ +> \n :if ([ :len \$Comment ] = 0) do={:set Comment \"Scheduler for script: \ +> \$SchedName\"};\r\ +> \n :local Interval [ :tostr \$3 ];\r\ +3528,3529d3532 +< \n :local StartTime [ :tostr \$3 ];\r\ +< \n :if ([ :len \$StartTime ] = 0) do={:set StartTime [get time]};\r\ +3538,3540c3541,3542 +< \n :local Comment [ :tostr \$7 ];\r\ +< \n :if ([ :len \$Comment ] = 0) do={:set Comment \"Scheduler for script: \ +< \$SchedName\"};\r\ +--- +> \n :local StartTime [ :tostr \$7 ];\r\ +> \n :if ([ :len \$StartTime ] = 0) do={:set StartTime [get time]};\r\ +3577,3578c3579,3580 +< \n } do={\$LogPrint error \$0 (\"Failed to add/modify shceduler for '\" .\ +< \_\$SchedName . \"' failed: \" . \$Err); :return false};\r\ +--- +> \n } do={\$LogPrint error \$0 (\"Removing directory '\" . \$DirName . \"'\ +> \_failed: \" . \$Err); :return false};\r\ -- 2.52.0