From b0172a0bfe1e5ed81a974fa80a5e345d3c0cd404 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 06:20:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 06:20:08. --- .../20260501/20260501062001-Binary.backup | Bin 0 -> 363417 bytes .../20260501/20260501062001-Config.rsc | 5866 +++++++++++++++++ .../20260501/20260501062001-Diff-Config.rsc | 55 + 3 files changed, 5921 insertions(+) create mode 100644 MikroMaster/20260501/20260501062001-Binary.backup create mode 100644 MikroMaster/20260501/20260501062001-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501062001-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501062001-Binary.backup b/MikroMaster/20260501/20260501062001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..87f3b03e7241f7fe7604f92797b0cc661d073232 GIT binary patch literal 363417 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 p0X-Zra8|w-6mQ3mN1Khi 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%0DCTl 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
~ZujDwR=km*GngGo8@F{!cGhHFs<<|ATQ?gB6k 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�#2H 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 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/352/ae7bad3c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 05:50:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global ExitError;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n \$LogPrint warning \$0 (\"This system has low free flash space but \ + \" . \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint info \$0 (\"There are \" . \$CertCount . \" Certificates \ + with CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :global LogPrint;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {:set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :global LogPrint;\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\r\ + \n \r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ + \n \r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Setup Global Environment for scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$Name 0 1 ] = \"\\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);}\r\ + \n}\r\ + \n\r\ + \n:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false;\r\ + \n:local scriptVersion \"26.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ + ________\\n\" . \$mailBodyCopyright);\r\ + \n :set mailStep1Body (\$mailStep1Body . \"\\n[*** TEST START ***]\\n\\\ + \$DeviceInfo: \" . [ \$DeviceInfo ] . \"\\n[*** TEST END ***]\\n\");\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ + \n\r\ + \n :local FwAddrLists {\r\ + \n \"allow\"={\r\ + \n { url=(\$FwAddrListsUrl . \"allow\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n \"block\"={\r\ + \n { url=(\$FwAddrListsUrl . \"block\");\r\ + \n cert=\"ISRG Root X2\" };\r\ + \n# { url=\"https://raw.githubusercontent.com/stamparm/ipsum/refs/hea\ + ds/master/levels/4.txt\";\r\ + \n# # higher level (decrease the numerical value) for more addresses, \ + and vice versa\r\ + \n# cert=\"ISRG Root X1\" };\r\ + \n# { url=\"https://www.dshield.org/block.txt\"; cidr=\"/24\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://lists.blocklist.de/lists/strongips.txt\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v4.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v6.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n };\r\ + \n# \"mikrotik\"={\r\ + \n# { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ + \n# cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n# };\r\ + \n \"FuckRKN\"={\r\ + \n { url=(\$FwAddrListsUrl . \"FuckRKN\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n };\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHuge;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ + \n message=(\"\\\$LogPrint: The message is already in log, scripting \ + subsystem may have crashed before!\") ] ] > 0) do={\r\ + \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ + , possibly caused by us. Delaying!\");\r\ + \n :delay 5m;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n\r\ + \n :foreach FwListName,FwList in=\$FwAddrLists do={\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n\r\ + \n :foreach List in=\$FwList do={\r\ + \n :local CheckCertificate false;\r\ + \n :local Data false;\r\ + \n :local TimeOut [ \$EitherOr [ :totime (\$List->\"timeout\") ] \$Fw\ + AddrListTimeOut ];\r\ + \n\r\ + \n :if ([ :len (\$List->\"cert\") ] > 0) do={\r\ + \n :set CheckCertificate true;\r\ + \n :if ([ \$CertificateAvailable (\$List->\"cert\") \"fetch\" ] = f\ + alse) do={\r\ + \n :log warning (\$ScriptName . \" Downloading required certifica\ + te (\" . \$FwListName . \\\r\ + \n \" / \" . \$List->\"url\" . \") failed, trying anyway.\");\ + \r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHuge \$ScriptName (\$List->\"url\")\ + \_\$CheckCertificate ] ];\r\ + \n :if (\$Data = false) do={\r\ + \n :if (\$I < 5) do={\r\ + \n :log debug (\$ScriptName . \" Failed downloading for list \ + '\" . \$FwListName . \\\r\ + \n \"', \" . \$I . \". try from: \" . \$List->\"url\");\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" \ + . \$FwListName . \\\r\ + \n \"' from: \" . \$List->\"url\");\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :len \$Data ] 1024 ] . \\\r\ + \n \"B for list '\" . \$FwListName . \"' from: \" . \$List->\"u\ + rl\");\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Li\ + ne ] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"\ + cidr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\ + \\.[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$C\ + IDR ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3\ + })\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \ + \"/\" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\")\ + \_do={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n } on-error={:log error (\$ScriptName . \" Failed parsing address\ + : \" . \$Line->0);}\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName .\".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set disable-ipv6=yes max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add comment=WAN interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=HostName \ + dhcp-option-set=domain-search-set dns-server=10.30.30.81 domain=WORKGROUP \ + gateway=10.30.30.81 netmask=24 ntp-server=10.30.30.81,10.30.30.10 \ + wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=git.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=ros.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=api.telegram.org list=Telegram +/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 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260501/20260501062001-Diff-Config.rsc b/MikroMaster/history/20260501/20260501062001-Diff-Config.rsc new file mode 100644 index 0000000..3d59ac2 --- /dev/null +++ b/MikroMaster/history/20260501/20260501062001-Diff-Config.rsc @@ -0,0 +1,55 @@ +769c769 +< \n:global CommitId \"main/352/ae7bad3c\";\r\ +--- +> \n:global CommitId \"main/351/9baf15a4\";\r\ +772c772 +< r: root, in 05:50:02 01.05.2026.\";\r\ +--- +> r: root, in 05:45:02 01.05.2026.\";\r\ +4405a4406 +> \n :put [\$GetBranch];\r\ +4440,4441c4441,4442 +< \n :log warning (\$ScriptName . \" Downloading required certifica\ +< te (\" . \$FwListName . \\\r\ +--- +> \n \$LogPrint warning \$ScriptName (\"Downloading required certif\ +> icate (\" . \$FwListName . \\\r\ +4453,4454c4454,4455 +< \n :log debug (\$ScriptName . \" Failed downloading for list \ +< '\" . \$FwListName . \\\r\ +--- +> \n \$LogPrint debug \$ScriptName (\"Failed downloading for li\ +> st '\" . \$FwListName . \\\r\ +4465,4466c4466,4467 +< \n :log warning (\$ScriptName . \" Failed downloading for list '\" \ +< . \$FwListName . \\\r\ +--- +> \n \$LogPrint warning \$ScriptName (\"Failed downloading for list '\ +> \" . \$FwListName . \\\r\ +4469,4470c4470,4471 +< \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ +< um [ :len \$Data ] 1024 ] . \\\r\ +--- +> \n \$LogPrint debug \$ScriptName (\"Downloaded \" . [ \$HumanReadab\ +> leNum [ :len \$Data ] 1024 ] . \\\r\ +4530,4531c4531 +< \n } on-error={:log error (\$ScriptName . \" Failed parsing address\ +< : \" . \$Line->0);}\r\ +--- +> \n } on-error={ }\r\ +4599,4600c4599,4600 +< \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ +< . \$Address . \\\r\ +--- +> \n \$LogPrint warning \$ScriptName (\"Failed to add IPv4 address \ +> \" . \$Address . \\\r\ +4620,4621c4620,4621 +< \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ +< . \$Address . \\\r\ +--- +> \n \$LogPrint warning \$ScriptName (\"Failed to add IPv6 address \ +> \" . \$Address . \\\r\ +4627c4627 +< \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ +--- +> \n \$LogPrint info \$ScriptName (\"list: \" . \$FwListName . \\\r\ -- 2.52.0