From 2279070859b53c7b95a9856d874fddf160b283c3 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 18 Sep 2026 07:20:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 18 07:20:08. --- .../20260918/20260918072002-Binary.backup | Bin 0 -> 243756 bytes .../20260918/20260918072002-Config.rsc | 4336 +++++++++++++++++ .../20260918/20260918072002-Diff-Config.rsc | 12 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20260918/20260918072002-Binary.backup create mode 100644 MikroMaster/20260918/20260918072002-Config.rsc create mode 100644 MikroMaster/history/20260918/20260918072002-Diff-Config.rsc diff --git a/MikroMaster/20260918/20260918072002-Binary.backup b/MikroMaster/20260918/20260918072002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..3890aeac8e97edb778e2c35ebd62907b75b261dd GIT binary patch literal 243756 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\W05E9v^-|LDP`pqP~ef*83hwxTo#mR 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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 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=no 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/20260918/20260918072002-Diff-Config.rsc b/MikroMaster/history/20260918/20260918072002-Diff-Config.rsc new file mode 100644 index 0000000..2f74810 --- /dev/null +++ b/MikroMaster/history/20260918/20260918072002-Diff-Config.rsc @@ -0,0 +1,12 @@ +11,12c11,12 +< set [ find default-name=wlan2 ] disabled=no mode=ap-bridge name=wlan1 ssid=\ +< vados wireless-protocol=802.11 +--- +> set [ find default-name=wlan1 ] disabled=no mode=ap-bridge ssid=vados \ +> wireless-protocol=802.11 +15,16c15,16 +< set [ find default-name=wlan1 ] disabled=no mode=ap-bridge name=wlan2 ssid=\ +< vados5g wireless-protocol=802.11 +--- +> set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ +> wireless-protocol=802.11 -- 2.52.0