From 97e202de572c103eab9de315fd33c8e901f0df65 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 3 May 2026 23:20:17 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 03 23:20:17. --- .../20260503/20260503232002-Binary.backup | Bin 0 -> 220323 bytes .../20260503/20260503232002-Config.rsc | 4003 +++++++++++++++++ .../20260503/20260503232002-Diff-Config.rsc | 45 + 3 files changed, 4048 insertions(+) create mode 100644 MikroMaster/20260503/20260503232002-Binary.backup create mode 100644 MikroMaster/20260503/20260503232002-Config.rsc create mode 100644 MikroMaster/history/20260503/20260503232002-Diff-Config.rsc diff --git a/MikroMaster/20260503/20260503232002-Binary.backup b/MikroMaster/20260503/20260503232002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0c14ef5151233a5cf673acfa67f9a6a3b40bf4ce GIT binary patch literal 220323 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

wM01conl**+ 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

Ofht6;+;@huqy_i1J`eb+!4q+o<*f$ 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\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="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 comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n: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/368/b69ddb1c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:35: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# check and download required certificate\r\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# download and import certificate\r\ + \n# Usage: \$CertificateDownload \"Common Name\"\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl 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 :log warning (\$0 . \" Failed downloading certificate with CommonN\ + ame '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# name a certificate by its common-name\r\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :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="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 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=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert_Global_Root_CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n:set CertName \"ISRG-Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/custom/\" . \$C\ + ertName);\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\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#/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 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\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set 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 +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="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="Windows Update script" disabled=yes 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" disabled=yes 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" disabled=yes 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" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 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/20260503/20260503232002-Diff-Config.rsc b/MikroMaster/history/20260503/20260503232002-Diff-Config.rsc new file mode 100644 index 0000000..b8605db --- /dev/null +++ b/MikroMaster/history/20260503/20260503232002-Diff-Config.rsc @@ -0,0 +1,45 @@ +2707,2714c2707,2714 +< \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ +< ootCA.crt.pem;\r\ +< \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ +< \"\";\r\ +< \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ +< G2TLSRSASHA2562020CA1-1.crt.pem;\r\ +< \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ +< .pem passphrase=\"\";\r\ +--- +> \n/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\ +2716,2719c2716,2719 +< \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ +< lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ +< \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ +< .pem passphrase=\"\";\r\ +--- +> \n/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\ +2723,2727c2723,2725 +< \n:local CertName \"DigiCert_Global_Root_CA.pem\";\r\ +< \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ +< ertName);\r\ +< \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n\r\ +--- +> \n:local CertName \"GTS-Root-R1.pem\";\r\ +> \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ +> );\r\ +2729,2731c2727,2728 +< \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/custom/\" . \$C\ +< ertName);\r\ +< \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ +--- +> \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ +> );\r\ -- 2.52.0