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

LlC 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 z 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�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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/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"GTS-Root-R1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\r\ + \n:set CertName \"ISRG-Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\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" +/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/20260503194001-Diff-Config.rsc b/MikroMaster/history/20260503/20260503194001-Diff-Config.rsc new file mode 100644 index 0000000..1b8249b --- /dev/null +++ b/MikroMaster/history/20260503/20260503194001-Diff-Config.rsc @@ -0,0 +1,7 @@ +3746,3747c3746,3748 +< 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 +--- +> disabled=yes 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 -- 2.52.0