From c9a87ea7b6625cbb24f57e76b676079f2d62d2c5 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 06:40:40 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 06:40:40. --- .../20260504/20260504064002-Binary.backup | Bin 0 -> 256365 bytes .../20260504/20260504064002-Config.rsc | 4106 +++++++++++++++++ .../20260504/20260504064002-Diff-Config.rsc | 310 ++ 3 files changed, 4416 insertions(+) create mode 100644 MikroMaster/20260504/20260504064002-Binary.backup create mode 100644 MikroMaster/20260504/20260504064002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504064002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504064002-Binary.backup b/MikroMaster/20260504/20260504064002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..29893182ae33c2c1a83fbb3e12c33e461a6c4a59 GIT binary patch literal 256365 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

#l83phlS5-;ZdGb{IFNdTeEXC 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%0A2xl>WKATKA(LIMU)qG% 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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 Identity [ /system identity get name ];\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/\" . \$Identity . \"/\ + \");\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 \"DigiCert-Assured-ID-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-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.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-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.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-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.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-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.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-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.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-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.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-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.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-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.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-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.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-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.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=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.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=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.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=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.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=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.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=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.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=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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\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: 5260/20-Ceee/ac/DP(18dBm), 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: 5260/20-Ceee/ac/DP(18dBm), 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,dns,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 graphs-plain=no rest-plain=no webfig-plain=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/20260504/20260504064002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504064002-Diff-Config.rsc new file mode 100644 index 0000000..4241b78 --- /dev/null +++ b/MikroMaster/history/20260504/20260504064002-Diff-Config.rsc @@ -0,0 +1,310 @@ +2940c2940,2941 +< add dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ +--- +> add comment="download, import and update firewall address-lists" \ +> dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ +2942c2943,3244 +< source="#!rsc by Vados\ +--- +> source="#!rsc by Vados\r\ +> \n# RouterOS script: AM-FwAddrLists\r\ +> \n# Script comment: download, import and update firewall address-lists\r\ +> \n# Copyright (c) 2007-2026 Vados \r\ +> \n#\r\ +> \n#\r\ +> \n# requires RouterOS, version=7.19\r\ +> \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ +> \n:local ExitOK false;\r\ +> \n:onerror Err {\r\ +> \n :global GlobalConfReady; :global GlobalFuncReady;\r\ +> \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ +> \\\r\ +> \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ +> delay=500ms max=50;\r\ +> \n :local ScriptName [ :jobname ];\r\ +> \n\r\ +> \n :global GlobalScriptsUrl;\r\ +> \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ +> \n :local FwAddrListsIndexUrl (\$FwAddrListsUrl . \"index\");\r\ +> \n :local FwAddrListTimeOut 1d;\r\ +> \n\r\ +> \n :global CertificateAvailable;\r\ +> \n :global EitherOr;\r\ +> \n :global FetchHuge;\r\ +> \n :global HumanReadableNum;\r\ +> \n :global IfThenElse;\r\ +> \n :global LogPrint;\r\ +> \n\r\ +> \n :global NetMask4;\r\ +> \n :global NetMask6;\r\ +> \n :global ScriptLock;\r\ +> \n \r\ +> \n :local FindDelim do={\r\ +> \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ +> jklmnopqrstuvwxyz-\";\r\ +> \n :for I from=0 to=([ :len \$1 ] - 1) do={\r\ +> \n :if ([ :typeof [ :find \$ValidChars [ :pick \$1 \$I ] ] ] != \"num\ +> \") do={\r\ +> \n :return \$I;\r\ +> \n }\r\ +> \n }\r\ +> \n }\r\ +> \n\r\ +> \n :local GetBranch do={\r\ +> \n :global EitherOr;\r\ +> \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ +> therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ +> \n }\r\ +> \n \r\ +> \n :log warning (\$ScriptName . \" Failed with error: \" . \$Err);\r\ +> \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ +> \n :log error (\$ScriptName . \" Failed to acquire lock, another instan\ +> ce is running. Exiting.\");\r\ +> \n :set ExitOK true;\r\ +> \n :error false;\r\ +> \n }\r\ +> \n\r\ +> \n :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ +> \n message=(\"\\\$LogPrint: The message is already in log, scripting \ +> subsystem may have crashed before!\") ] ] > 0) do={\r\ +> \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ +> , possibly caused by us. Delaying!\");\r\ +> \n :delay 5m;\r\ +> \n }\r\ +> \n\r\ +> \n :local ListComment (\"managed by \" . \$ScriptName);\r\ +> \n :local FwAddrListsIndex false;\r\ +> \n\r\ +> \n :for I from=1 to=5 do={\r\ +> \n :if (\$FwAddrListsIndex = false) do={\r\ +> \n :set FwAddrListsIndex [ :tolf [ \$FetchHuge \$ScriptName \$FwAddrL\ +> istsIndexUrl false ] ];\r\ +> \n :if (\$FwAddrListsIndex = false && \$I < 5) do={\r\ +> \n :log debug (\$ScriptName . \" Failed downloading address-list in\ +> dex, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\r\ +> \n :delay ((\$I * \$I) . \"s\");\r\ +> \n }\r\ +> \n }\r\ +> \n }\r\ +> \n :if (\$FwAddrListsIndex = false) do={\r\ +> \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ +> x from: \" . \$FwAddrListsIndexUrl);\r\ +> \n :set FwAddrListsIndex \"\";\r\ +> \n }\r\ +> \n\r\ +> \n :foreach FwListFile in=[ :deserialize \$FwAddrListsIndex delimiter=\"\ +> \\n\" from=dsv options=dsv.plain ] do={\r\ +> \n :local FwListName (\$FwListFile->0);\r\ +> \n :local Delim [ \$FindDelim \$FwListName ];\r\ +> \n :if (\$Delim = 0) do={ :set FwListName \"\"; };\r\ +> \n :if ([ :len \$FwListName ] > 0) do={ :set FwListName [ :pick \$FwLis\ +> tName 0 \$Delim ]; }\r\ +> \n\r\ +> \n :local FwListUrl (\$FwAddrListsUrl . \$FwListName);\r\ +> \n :if ([ :len \$FwListName ] > 0) do={\r\ +> \n :local CntAdd 0;\r\ +> \n :local CntRenew 0;\r\ +> \n :local CntRemove 0;\r\ +> \n :local IPv4Addresses ({});\r\ +> \n :local IPv6Addresses ({});\r\ +> \n :local Failure false;\r\ +> \n :local Data false;\r\ +> \n :local TimeOut \$FwAddrListTimeOut;\r\ +> \n\r\ +> \n :for I from=1 to=5 do={\r\ +> \n :if (\$Data = false) do={\r\ +> \n :set Data [ :tolf [ \$FetchHuge \$ScriptName \$FwListUrl false ]\ +> \_];\r\ +> \n :if (\$Data = false && \$I < 5) do={\r\ +> \n :log warning (\$ScriptName . \" Failed downloading for list '\ +> \" . \$FwListName . \"', \" . \$I . \". try from: \" . \$FwListUrl);\r\ +> \n :delay ((\$I * \$I) . \"s\");\r\ +> \n }\r\ +> \n }\r\ +> \n }\r\ +> \n\r\ +> \n :if (\$Data = false) do={\r\ +> \n :set Data \"\";\r\ +> \n :set Failure true;\r\ +> \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ +> \$FwListName . \"' from: \" . \$FwListUrl);\r\ +> \n } else={\r\ +> \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ +> \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$FwListName . \"' from: \" \ +> . \$FwListUrl);\r\ +> \n }\r\ +> \n\r\ +> \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ +> tions=dsv.plain ] do={\r\ +> \n :set Line (\$Line->0);\r\ +> \n :local Delim [ \$FindDelim \$Line ];\r\ +> \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ +> \n :if ([ :len \$Line ] = 0) do={ :set Line \"#\"; }\r\ +> \n :if ([ :pick \$Line 0 1 ] != \"#\") do={\r\ +> \n :local Address;\r\ +> \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ +> \_] - 1) ] = \"}\") do={\r\ +> \n :do {\r\ +> \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ +> dr\") ];\r\ +> \n } on-error={ }\r\ +> \n } else={\r\ +> \n :set Address [ :pick \$Line 0 [ \$FindDelim \$Line ] ];\r\ +> \n }\r\ +> \n :do {\r\ +> \n :local Branch;\r\ +> \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ +> .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ +> \n :local Net \$Address;\r\ +> \n :local CIDR 32;\r\ +> \n :local Slash [ :find \$Address \"/\" ];\r\ +> \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ +> \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ +> \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ +> \_];\r\ +> \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ +> R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ +> \n }\r\ +> \n :set Branch [ \$GetBranch \$Address ];\r\ +> \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ +> { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ +> \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ +> \n :error true;\r\ +> \n }\r\ +> \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ +> \?\\\$\") do={\r\ +> \n :local Net \$Address;\r\ +> \n :local CIDR 128;\r\ +> \n :local Slash [ :find \$Address \"/\" ];\r\ +> \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ +> \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ +> \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ +> \_];\r\ +> \n }\r\ +> \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ +> \" . \$CIDR);\r\ +> \n :set Branch [ \$GetBranch \$Address ];\r\ +> \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ +> { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ +> \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ +> \n :error true;\r\ +> \n }\r\ +> \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ +> o={\r\ +> \n :set Branch [ \$GetBranch \$Address ];\r\ +> \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ +> { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ +> \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ +> { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ +> \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ +> \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ +> \n :error true;\r\ +> \n }\r\ +> \n } on-error={:log error (\$ScriptName . \" Failed parsing address: \ +> \" . \$Line->0);}\r\ +> \n }\r\ +> \n }\r\ +> \n\r\ +> \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ +> \n list=\$FwListName comment=\$ListComment ] do={\r\ +> \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ +> \r\ +> \n :local Branch [ \$GetBranch \$Address ];\r\ +> \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ +> \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ +> \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ +> ss . \\\r\ +> \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ +> .\");\r\ +> \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ +> \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ +> \n :set CntRenew (\$CntRenew + 1);\r\ +> \n } else={\r\ +> \n :if (\$Failure = false) do={\r\ +> \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ +> ress . \\\r\ +> \n \" from list '\" . \$FwListName . \".\");\r\ +> \n /ip/firewall/address-list/remove \$Entry;\r\ +> \n :set CntRemove (\$CntRemove + 1);\r\ +> \n }\r\ +> \n }\r\ +> \n }\r\ +> \n\r\ +> \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ +> \n list=\$FwListName comment=\$ListComment ] do={\r\ +> \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ +> ;\r\ +> \n :local Branch [ \$GetBranch \$Address ];\r\ +> \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ +> \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ +> \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ +> ss . \\\r\ +> \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ +> .\");\r\ +> \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ +> \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ +> \n :set CntRenew (\$CntRenew + 1);\r\ +> \n } else={\r\ +> \n :if (\$Failure = false) do={\r\ +> \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ +> ress . \\\r\ +> \n \" from list '\" . \$FwListName .\".\");\r\ +> \n /ipv6/firewall/address-list/remove \$Entry;\r\ +> \n :set CntRemove (\$CntRemove + 1);\r\ +> \n }\r\ +> \n }\r\ +> \n }\r\ +> \n\r\ +> \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ +> \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +> \r\ +> \n :foreach Address,Timeout in=\$Branch do={\r\ +> \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ +> \_. \\\r\ +> \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +> .\");\r\ +> \n :onerror Err {\r\ +> \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ +> Comment \\\r\ +> \n address=\$Address timeout=\$Timeout;\r\ +> \n :set CntAdd (\$CntAdd + 1);\r\ +> \n } do={\r\ +> \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ +> . \$Address . \\\r\ +> \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ +> \n }\r\ +> \n }\r\ +> \n }\r\ +> \n\r\ +> \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ +> \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +> \r\ +> \n :foreach Address,Timeout in=\$Branch do={\r\ +> \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ +> \_. \\\r\ +> \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +> .\");\r\ +> \n :onerror Err {\r\ +> \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ +> stComment \\\r\ +> \n address=\$Address timeout=\$Timeout;\r\ +> \n :set CntAdd (\$CntAdd + 1);\r\ +> \n } do={\r\ +> \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ +> . \$Address . \\\r\ +> \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ +> \n }\r\ +> \n }\r\ +> \n }\r\ +> \n\r\ +> \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ +> \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ +> \")\" . \\\r\ +> \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ +> \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ +> \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ +> \n }\r\ +> \n }\r\ +> \n} do={\r\ +> \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ +> \n}\r\ -- 2.52.0