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