From 2682620efab050fdff267712358dc0345f3cfe48 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 3 May 2026 23:40:18 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 03 23:40:18. --- .../20260503/20260503234002-Binary.backup | Bin 0 -> 220488 bytes .../20260503/20260503234002-Config.rsc | 4007 +++++++++++++++++ .../20260503/20260503234002-Diff-Config.rsc | 12 + 3 files changed, 4019 insertions(+) create mode 100644 MikroMaster/20260503/20260503234002-Binary.backup create mode 100644 MikroMaster/20260503/20260503234002-Config.rsc create mode 100644 MikroMaster/history/20260503/20260503234002-Diff-Config.rsc diff --git a/MikroMaster/20260503/20260503234002-Binary.backup b/MikroMaster/20260503/20260503234002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..fef7228bdacfc2720dfe79cb3cb9d6c4fdb7dee3 GIT binary patch literal 220488 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\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/368/b69ddb1c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:35:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global ExitError;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n# check and download required certificate\r\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# download and import certificate\r\ + \n# Usage: \$CertificateDownload \"Common Name\"\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonN\ + ame '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# name a certificate by its common-name\r\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {:set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :global LogPrint;\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\r\ + \n \r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ + \n \r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Setup Global Environment for scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert_Global_Root_CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/custom/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-YE\" [ find where common-name=\"Root Y\ + E\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Windows Update script" disabled=yes interval=2d5m name=\ + WU-script-run-schedule on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" disabled=yes interval=1d name="DNS Cache Flush" \ + on-event=DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" disabled=yes name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260503/20260503234002-Diff-Config.rsc b/MikroMaster/history/20260503/20260503234002-Diff-Config.rsc new file mode 100644 index 0000000..53ddd6b --- /dev/null +++ b/MikroMaster/history/20260503/20260503234002-Diff-Config.rsc @@ -0,0 +1,12 @@ +2726,2728c2726 +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ +< me=\"DigiCert Global Root CA\" ];\r\ +--- +> \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ +2733,2735c2731 +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n/certificate/set name=\"ISRG-Root-YE\" [ find where common-name=\"Root Y\ +< E\" ];\r\ +--- +> \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ -- 2.52.0