From 1b466b5793c826029e0482c6fd108567dfb78c02 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 27 Sep 2026 04:00:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 27 04:00:07. --- .../20260927/20260927040002-Binary.backup | Bin 0 -> 243756 bytes .../20260927/20260927040002-Config.rsc | 4337 +++++++++++++++++ .../20260927/20260927040002-Diff-Config.rsc | 4 + 3 files changed, 4341 insertions(+) create mode 100644 MikroMaster/20260927/20260927040002-Binary.backup create mode 100644 MikroMaster/20260927/20260927040002-Config.rsc create mode 100644 MikroMaster/history/20260927/20260927040002-Diff-Config.rsc diff --git a/MikroMaster/20260927/20260927040002-Binary.backup b/MikroMaster/20260927/20260927040002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e82a591862957bb2d3ab52ebdae61c245f9a6d2b GIT binary patch literal 243756 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%0ABfJ^e9r=kSL&*z((_FV0 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\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc 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 dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \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/17176/0d89ed8d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:04 14.09.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="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\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# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds 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=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-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 /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } 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=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\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 wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \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\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\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 :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\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 (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\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 /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /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-awg3vds]\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-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 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-awg3vds com\ + ment=awg3vds-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-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-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=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon 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=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-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 /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } 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=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\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 wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\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" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=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=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/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="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-Lan network=10.30.30.0 +add address=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=2ip.ru list=Test +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru comment=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" dst-port=80 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=80 +add action=dst-nat chain=dstnat comment="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip route +add disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/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=time.google.com +/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=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/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="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260927/20260927040002-Diff-Config.rsc b/MikroMaster/history/20260927/20260927040002-Diff-Config.rsc new file mode 100644 index 0000000..072eceb --- /dev/null +++ b/MikroMaster/history/20260927/20260927040002-Diff-Config.rsc @@ -0,0 +1,4 @@ +14c14 +< # channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +--- +> # channel: 5180/20-Ceee/ac/P(20dBm), SSID: vados5g, local forwarding -- 2.52.0