From 051b5f5e691c3df9e38e1049e112c573d3024321 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sat, 4 Jul 2026 06:21:02 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jul 04 06:21:02. --- .../20260704/20260704062057-Binary.backup | Bin 0 -> 194200 bytes MikroGig/20260704/20260704062057-Config.rsc | 3335 +++++++++++++++++ .../20260704/20260704062057-Diff-Config.rsc | 21 + 3 files changed, 3356 insertions(+) create mode 100644 MikroGig/20260704/20260704062057-Binary.backup create mode 100644 MikroGig/20260704/20260704062057-Config.rsc create mode 100644 MikroGig/history/20260704/20260704062057-Diff-Config.rsc diff --git a/MikroGig/20260704/20260704062057-Binary.backup b/MikroGig/20260704/20260704062057-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..75fd0f16a26a535b6ad3a102362e066128e94b38 GIT binary patch literal 194200 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 literal 0 HcmV?d00001 diff --git a/MikroGig/20260704/20260704062057-Config.rsc b/MikroGig/20260704/20260704062057-Config.rsc new file mode 100644 index 0000000..9c26a0e --- /dev/null +++ b/MikroGig/20260704/20260704062057-Config.rsc @@ -0,0 +1,3335 @@ +# 2026-07-04 06:20:59 by RouterOS 7.23.1 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=18:FD:74:6E:58:14 auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface wireless +# managed by CAPsMAN +set [ find default-name=wlan1 ] country=belarus mode=ap-bridge ssid=vados \ + wps-mode=disabled +# managed by CAPsMAN +set [ find default-name=wlan2 ] country=belarus mode=ap-bridge ssid=vados5g \ + wps-mode=disabled +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC +/interface veth +add address=172.20.0.2/30 container-mac-address=00:00:00:00:00:00 dhcp=no \ + gateway=172.20.0.1 gateway6="" name=veth-awgVDSina +/interface wireguard +add disabled=yes listen-port=12430 mtu=1360 name=wg-awgVDSina +/disk +add mount-point-template="[tmpfs]" slot=ram tmpfs-max-size=64 type=tmpfs +/interface list +add name=WAN +add name=LAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/routing table +add disabled=no fib name=r_to_vpn +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +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 Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\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 UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \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\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 /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\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 :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \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/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/728/bebacfc7\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 11:00:05 30.06.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\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 MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\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 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 GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\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 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 ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\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 updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$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 :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$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 :log info (\$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 :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$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 :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\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 :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 :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 :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\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:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\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: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: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: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 mode=https 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 mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$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 error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$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: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 FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\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 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 [ :le\ + n \$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 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 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 ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\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 :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\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={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :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 :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\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 :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\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\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 :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log 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 :log 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 :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log 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 :log 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 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 VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log 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 :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 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\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\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\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 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 :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\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 :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', 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\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\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\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\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 :log 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\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\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\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\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\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:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\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\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\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\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 \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\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 (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\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={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\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 \"Every Day Set Global Environment Variables\";\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: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:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="Download custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \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#\r\ + \n# 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:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$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=(\$CertUrl . \$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=(\$CertUrl . \$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=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n:global tmpAddCerts (a);\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n" +add dont-require-permissions=no name=awg2-webui owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + :put \"Download image, and save him to usb1/tmp\"\ + \n#/tool/fetch url=\"https://ros.vados.ru/docker/awg2-webui-arm.tar\" dst-\ + path=usb1/tmp/awg2-webui.tar\ + \n\ + \n:put \"1. Create veth interface\"\ + \n/interface veth add name=veth-awg address=10.9.9.2/24 gateway=10.9.9.1\ + \n\ + \n:put \"2. Create bridge and add veth\"\ + \n/interface bridge add name=br-awg\ + \n/interface bridge port add bridge=br-awg interface=veth-awg\ + \n\ + \n:put \"3. Assign IP to bridge\"\ + \n/ip address add address=10.9.9.1/24 interface=br-awg\ + \n\ + \n:put \"4. NAT: masquerade container traffic\"\ + \n/ip firewall nat add chain=srcnat src-address=10.9.9.0/24 action=masquer\ + ade\ + \n\ + \n:put \"5. Port forward: UDP 443 \? container (AmneziaWG QUIC mimicry)\"\ + \n/ip firewall nat add chain=dstnat protocol=udp dst-port=443 \\\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=55055 in-interface=eth\ + er1\ + \n\ + \n:put \"6. Port forward: HTTPS 9443 \? container Web UI\"\ + \n/ip firewall nat add chain=dstnat protocol=tcp dst-port=9443 \\\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=443 in-interface=ether\ + 1\ + \n\ + \n:put \"Create environment list..\"\ + \n/container envs add list=awgui-env key=WEB_USER value=vados\ + \n/container envs add list=awgui-env key=WEB_PASS value=zoomzoomrulezz\ + \n/container envs add list=awgui-env key=SECRET_KEY value=RanDomSecret32Sy\ + mboLs2325272931q\ + \n/container envs add list=awgui-env key=AWG_ENDPOINT value=10.30.30.10:44\ + 3\ + \n\ + \n:put \"Load and start container...\"\ + \n/container add file=usb1/tmp/awg2-webui.tar interface=veth-awg hostname=\ + awg2-webui \\\ + \nroot-dir=usb1/awg2-webui envlist=awgui-env start-on-boot=yes logging=yes\ + \_shm-size=4M\ + \n\ + \n:put \"Start...\"\ + \n/container start 0\ + \n\ + \n:put \"Verify...\"\ + \n/container print\ + \n\ + \n:put \"Should show: status=running\"\ + \n\ + \n/log print where topics~\"container\"\ + \n\ + \n:put \"Should show: AWG started, nginx running\"\ + \n" +add comment=Generator dont-require-permissions=no name=AWG-VDSina owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v2)\r\ + \n# 2026-06-30 22:08:12\r\ + \n# ============================================================\r\ + \n\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Auto-detect storage\r\ + \n:global awgDisk \"disk1\"\r\ + \n{\r\ + \n :local usbFree 0\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] free] \ + } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n :put (\"Using USB: usb1 (\" . (\$usbFree / 1048576) . \" MB free)\")\ + \r\ + \n } else={\r\ + \n :if ([:len [/disk/find where slot=\"usb1\"]] > 0) do={\r\ + \n :put \"USB found but not mounted. Format as ext4\?\"\r\ + \n :put \"Press 'y' to confirm:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n /disk/format-drive usb1 file-system=ext4 label=usb1\r\ + \n :delay 3s\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n } else={ :put \"Format failed, using disk1\" }\r\ + \n } else={ :put \"Using disk1\" }\r\ + \n } else={ :put \"No USB, using disk1\" }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall script\r\ + \n/system/script/add name=awg-VDSina-uninstall comment=awg-VDSina source={\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg-VDSina-\ + env\" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local storageDisk \"disk1\"\r\ + \n :do { :set storageDisk [/container/envs/get [find where list=\"awg-VDS\ + ina-env\" key=\"AWG_STORAGE\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg-VD\ + Sina-env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n }\r\ + \n /ip/route/remove [find where comment=awg-VDSina-tunnel]\r\ + \n /ip/route/remove [find where comment=awg-VDSina-dns]\r\ + \n /container/stop [find where interface=veth-awg-VDSina]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg-VDSina]\r\ + \n /container/envs/remove [find where list=\"awg-VDSina-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n }\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg-VDSina\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.75.208/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.75.209/30\"]\r\ + \n /interface/veth/remove [find where name=\"veth-awg-VDSina\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg-VDSin\ + a\"]\r\ + \n /ip/address/remove [find where interface=\"wg-awg-VDSina\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg-VDSina\"]\r\ + \n :do { /file/remove [find where name~\"awg-VDSina.+tar\"] } on-error={}\ + \r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/awg-VDSina\")]\ + \_} on-error={}\r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/ru_ranges_time\ + out.rsc\")] } on-error={}\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { /file/remove [find where name~(\$storageDisk . \"/pull\")] } o\ + n-error={}\r\ + \n }\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n /system/script/remove [find where name=awg-VDSina-uninstall]\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg-VDSina address=172.19.75.210/30 gatewa\ + y=172.19.75.209\r\ + \n/ip/address/add address=172.19.75.209/30 interface=veth-awg-VDSina\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.7\ + 5.208/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg-VDSina private-key=\"4CHyNhbOs923/E\ + yNDguMXJXdghL2I3UyzXPwrANVgHs=\" listen-port=14710 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg-VDSina public-key=\"o5Ig\ + Cl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\" preshared-key=\"RNvF7T1cg5tyXcY\ + QnD9N5BEp6e20vVJQTv0GMjyvHU0=\" endpoint-address=172.19.75.210 endpoint-po\ + rt=51820 allowed-address=0.0.0.0/0 persistent-keepalive=10\r\ + \n/ip/address/add address=10.9.0.3/32 interface=wg-awg-VDSina\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_LISTEN value=\":44044\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_REMOTE value=\"109.107.1\ + 77.79:55055\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JC value=\"9\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMIN value=\"105\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMAX value=\"920\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S1 value=\"90\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S2 value=\"136\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H1 value=\"472437748-472\ + 438637\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H2 value=\"707808381-707\ + 809250\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H3 value=\"1609078552-16\ + 09079495\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H4 value=\"1012329484-10\ + 12329741\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_SERVER_PUB value=\"o5IgC\ + l1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_CLIENT_PUB value=[/inter\ + face/wireguard/get [find name=wg-awg-VDSina] public-key]\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S3 value=\"45\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S4 value=\"27\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I3 value=\"\ + \"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I4 value=\"\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I5 value=\"\"\r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g-VDSina-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=8.8.8.8\r\ + \n#/ip/route/add dst-address=109.107.177.79/32 gateway=wg-awg-VDSina dista\ + nce=1 comment=awg-VDSina-dns\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_STORAGE value=\$awgDisk\ + \r\ + \n:if (\$awgDisk != \"disk1\") do={\r\ + \n :local tmpPath (\$awgDisk . \"/pull\")\r\ + \n /container/envs/add list=awg-VDSina-env key=AWG_PREV_TMPDIR value=[/co\ + ntainer/config/get tmpdir]\r\ + \n /container/config set tmpdir=\$tmpPath memory-high=200M\r\ + \n}\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={ :set file (\"awg-proxy-arm\" . \$suffix . \ + \".tar.gz\") }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath \$file\r\ + \n :if (\$awgDisk != \"disk1\") do={\r\ + \n :set filePath (\$awgDisk . \"/pull/\" . \$file)\r\ + \n :do { /file/make-directory (\$awgDisk . \"/pull\") } on-error={}\r\ + \n }\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0) do={\r\ + \n :local freeStorage 0\r\ + \n :if (\$awgDisk = \"disk1\") do={\r\ + \n :set freeStorage [/system/resource/get free-hdd-space]\r\ + \n } else={\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\$awgDis\ + k] free] } on-error={}\r\ + \n }\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n } else={\r\ + \n :put (\"File already exists: \" . \$filePath)\r\ + \n }\r\ + \n :local rootDir (\$awgDisk . \"/awg-VDSina\")\r\ + \n /container/add file=\$filePath interface=veth-awg-VDSina envlist=awg-V\ + DSina-env hostname=awg-VDSina root-dir=\$rootDir logging=no start-on-boot=\ + yes comment=awg-VDSina\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg-VDSina] shm-size=4M\"] }\r\ + \n /file/remove \$filePath\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg-VDSina]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg-VDSina\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 109.107.177.79 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 109.107.177.79 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg-VDSina \ + comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg-VDSina\ + \_comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg-VDSina-tunnel dst-\ + address=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg-VDSina-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awgVDSina dont-require-permissions=no name=awgVDSina-uninstall \ + owner=Manager policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstalling AmneziaWG...\"\r\ + \n :log info \"Uninstalling AmneziaWG...\"\r\ + \n /ip/route/remove [find where comment=awgVDSina-tunnel]\r\ + \n :do { /tool/netwatch/remove [find where comment=Monitor-AWGVDSINA] } o\ + n-error={}\r\ + \n :do { /ip/route/remove [find where comment=Monitor-AWGVDSINA] } on-err\ + or={}\r\ + \n /container/stop [find where interface=veth-awgVDSina]\r\ + \n :delay 7s\r\ + \n /interface/list/member/remove [find where interface=wg-awgVDSina]\r\ + \n /container/remove [find where interface=veth-awgVDSina]\r\ + \n /container/envs/remove [find where list=\"awgVDSina-env\"]\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awgVDSina\"]\r\ + \n /ip/address/remove [find where address=\"172.20.0.1/30\"]\r\ + \n /interface/veth/remove [find where name=\"veth-awgVDSina\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awgVDSina\ + \"]\r\ + \n /ip/address/remove [find where interface=\"wg-awgVDSina\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awgVDSina\"]\r\ + \n :do { /file/remove [find where name~\"awgVDSina.+tar\"] } on-error={}\ + \r\ + \n :do { /file/remove [find where name=\"disk1/awgVDSina\"] } on-error={}\ + \r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n /system/script/remove [find where name=awgVDSina-uninstall]\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/container config +set layer-dir=/usb1/docker memory-high=200.0MiB memory-max=2048.0KiB \ + registry-url=https://registry-1.docker.io tmpdir=/usb1/pull username=\ + amsternl +/disk settings +set auto-media-interface=lo +/interface bridge port +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 +add bridge=Bridge-LAN interface=ether1 +/ip neighbor discovery-settings +set discover-interface-list=Internet +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +add interface=ether1 list=Internet +add interface=Bridge-LAN list=LAN +/interface wireguard peers +add allowed-address=0.0.0.0/0,::/0 disabled=yes endpoint-address=172.20.0.2 \ + endpoint-port=51820 interface=wg-awgVDSina name=awgVDSina \ + persistent-keepalive=27s public-key=\ + "o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +add address=172.20.0.1/30 interface=veth-awgVDSina network=172.20.0.0 +add address=10.9.0.2 interface=wg-awgVDSina network=10.9.0.2 +/ip dns +set allow-remote-requests=yes servers=8.8.8.8 +/ip firewall nat +add action=masquerade chain=srcnat src-address=10.9.9.0/24 +add action=dst-nat chain=dstnat disabled=yes dst-port=443 in-interface=ether1 \ + protocol=udp to-addresses=10.9.9.2 to-ports=55055 +add action=dst-nat chain=dstnat disabled=yes dst-port=9443 in-interface=\ + ether1 protocol=tcp to-addresses=10.9.9.2 to-ports=443 +/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 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 check-gateway=ping disabled=no distance=2 dst-address=0.0.0.0/0 gateway=\ + 10.30.30.81 routing-table=main scope=30 target-scope=10 +add comment=Monitor-AWGVDSINA distance=1 dst-address=9.9.9.9/32 gateway=\ + wg-awgVDSina +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add forced-ip=109.107.177.79 interface=veth-awgVDSina type=external +add interface=lo type=internal +add interface=wlan2 type=internal +add interface=wlan1 type=internal +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/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=10.30.30.81 +add address=10.30.30.10 +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="Every Day Set Global Environment Variables" 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=Generator name=awg-VDSina on-event="# ============================\ + ================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v2)\r\ + \n# 2026-07-01 00:03:43\r\ + \n# ============================================================\r\ + \n\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Auto-detect storage\r\ + \n:global awgDisk \"disk1\"\r\ + \n{\r\ + \n :local usbFree 0\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] free] \ + } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n :put (\"Using USB: usb1 (\" . (\$usbFree / 1048576) . \" MB free)\")\ + \r\ + \n } else={\r\ + \n :if ([:len [/disk/find where slot=\"usb1\"]] > 0) do={\r\ + \n :put \"USB found but not mounted. Format as ext4\?\"\r\ + \n :put \"Press 'y' to confirm:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n /disk/format-drive usb1 file-system=ext4 label=usb1\r\ + \n :delay 3s\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n } else={ :put \"Format failed, using disk1\" }\r\ + \n } else={ :put \"Using disk1\" }\r\ + \n } else={ :put \"No USB, using disk1\" }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall script\r\ + \n/system/script/add name=awg-VDSina-uninstall comment=awg-VDSina source={\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg-VDSina-\ + env\" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local storageDisk \"disk1\"\r\ + \n :do { :set storageDisk [/container/envs/get [find where list=\"awg-VDS\ + ina-env\" key=\"AWG_STORAGE\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg-VD\ + Sina-env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n }\r\ + \n /ip/route/remove [find where comment=awg-VDSina-tunnel]\r\ + \n /ip/route/remove [find where comment=awg-VDSina-dns]\r\ + \n /container/stop [find where interface=veth-awg-VDSina]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg-VDSina]\r\ + \n /container/envs/remove [find where list=\"awg-VDSina-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n }\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg-VDSina\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.75.208/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.75.209/30\"]\r\ + \n /interface/veth/remove [find where name=\"veth-awg-VDSina\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg-VDSin\ + a\"]\r\ + \n /ip/address/remove [find where interface=\"wg-awg-VDSina\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg-VDSina\"]\r\ + \n :do { /file/remove [find where name~\"awg-VDSina.+tar\"] } on-error={}\ + \r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/awg-VDSina\")]\ + \_} on-error={}\r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/ru_ranges_time\ + out.rsc\")] } on-error={}\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { /file/remove [find where name~(\$storageDisk . \"/pull\")] } o\ + n-error={}\r\ + \n }\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n /system/script/remove [find where name=awg-VDSina-uninstall]\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg-VDSina address=172.19.75.210/30 gatewa\ + y=172.19.75.209\r\ + \n/ip/address/add address=172.19.75.209/30 interface=veth-awg-VDSina\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.7\ + 5.208/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg-VDSina private-key=\"QCMsDU98Gm+nhn\ + kYRcAN/dyczDYHOLsX3PfBRFjWBF4=\" listen-port=14710 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg-VDSina public-key=\"o5Ig\ + Cl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\" preshared-key=\"b39T9K2/LR8vNtY\ + AZw+sLRze6yGlS3EaZhAa7wiFB20=\" endpoint-address=172.19.75.210 endpoint-po\ + rt=51820 allowed-address=0.0.0.0/0 persistent-keepalive=10\r\ + \n/ip/address/add address=10.9.0.2/32 interface=wg-awg-VDSina\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_LISTEN value=\":51820\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_REMOTE value=\"109.107.1\ + 77.79:55055\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JC value=\"9\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMIN value=\"105\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMAX value=\"920\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S1 value=\"90\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S2 value=\"136\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H1 value=\"472437748-472\ + 438637\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H2 value=\"707808381-707\ + 809250\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H3 value=\"1609078552-16\ + 09079495\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H4 value=\"1012329484-10\ + 12329741\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_SERVER_PUB value=\"o5IgC\ + l1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_CLIENT_PUB value=[/inter\ + face/wireguard/get [find name=wg-awg-VDSina] public-key]\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S3 value=\"45\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S4 value=\"27\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I3 value=\"\ + \"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I4 value=\"\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I5 value=\"\"\r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g-VDSina-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=109.107.177.79\r\ + \n/ip/route/add dst-address=109.107.177.79/32 gateway=wg-awg-VDSina distan\ + ce=1 comment=awg-VDSina-dns\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_STORAGE value=\$awgDisk\ + \r\ + \n:if (\$awgDisk != \"disk1\") do={\r\ + \n :local tmpPath (\$awgDisk . \"/pull\")\r\ + \n /container/envs/add list=awg-VDSina-env key=AWG_PREV_TMPDIR value=[/co\ + ntainer/config/get tmpdir]\r\ + \n /container/config set tmpdir=\$tmpPath memory-high=200M\r\ + \n}\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={ :set file (\"awg-proxy-arm\" . \$suffix . \ + \".tar.gz\") }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath \$file\r\ + \n :if (\$awgDisk != \"disk1\") do={\r\ + \n :set filePath (\$awgDisk . \"/pull/\" . \$file)\r\ + \n :do { /file/make-directory (\$awgDisk . \"/pull\") } on-error={}\r\ + \n }\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0) do={\r\ + \n :local freeStorage 0\r\ + \n :if (\$awgDisk = \"disk1\") do={\r\ + \n :set freeStorage [/system/resource/get free-hdd-space]\r\ + \n } else={\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\$awgDis\ + k] free] } on-error={}\r\ + \n }\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n } else={\r\ + \n :put (\"File already exists: \" . \$filePath)\r\ + \n }\r\ + \n :local rootDir (\$awgDisk . \"/awg-VDSina\")\r\ + \n /container/add file=\$filePath interface=veth-awg-VDSina envlist=awg-V\ + DSina-env hostname=awg-VDSina root-dir=\$rootDir logging=no start-on-boot=\ + yes comment=awg-VDSina\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg-VDSina] shm-size=4M\"] }\r\ + \n /file/remove \$filePath\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg-VDSina]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg-VDSina\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 109.107.177.79 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 109.107.177.79 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg-VDSina \ + comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg-VDSina\ + \_comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg-VDSina-tunnel dst-\ + address=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg-VDSina-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-07-01 start-time=02:03:59 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment=Monitor-AWGVDSINA down-script=\ + "/ip route disable [find comment=\"Route-AWGVDSINA\"]" host=9.9.9.9 \ + interval=10s packet-count=5 thr-avg=0ms thr-loss-count=4 timeout=5s type=\ + icmp up-script="/ip route enable [find comment=\"Route-AWGVDSINA\"]" diff --git a/MikroGig/history/20260704/20260704062057-Diff-Config.rsc b/MikroGig/history/20260704/20260704062057-Diff-Config.rsc new file mode 100644 index 0000000..ff2503d --- /dev/null +++ b/MikroGig/history/20260704/20260704062057-Diff-Config.rsc @@ -0,0 +1,21 @@ +2959,2962c2959,2961 +< add allowed-address=0.0.0.0/0,::/0 disabled=yes endpoint-address=172.20.0.2 \ +< endpoint-port=51820 interface=wg-awgVDSina name=awgVDSina \ +< persistent-keepalive=27s public-key=\ +< "o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +--- +> add allowed-address=0.0.0.0/0,::/0 endpoint-address=172.20.0.2 endpoint-port=\ +> 51820 interface=wg-awgVDSina name=awgVDSina persistent-keepalive=27s \ +> public-key="o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +2977,2980c2976,2981 +< add action=dst-nat chain=dstnat disabled=yes dst-port=443 in-interface=ether1 \ +< protocol=udp to-addresses=10.9.9.2 to-ports=55055 +< add action=dst-nat chain=dstnat disabled=yes dst-port=9443 in-interface=\ +< ether1 protocol=tcp to-addresses=10.9.9.2 to-ports=443 +--- +> # in/out-interface matcher not possible when interface (ether1) is slave - use master instead (Bridge-LAN) +> add action=dst-nat chain=dstnat dst-port=443 in-interface=ether1 protocol=udp \ +> to-addresses=10.9.9.2 to-ports=55055 +> # in/out-interface matcher not possible when interface (ether1) is slave - use master instead (Bridge-LAN) +> add action=dst-nat chain=dstnat dst-port=9443 in-interface=ether1 protocol=\ +> tcp to-addresses=10.9.9.2 to-ports=443 -- 2.52.0