From 9926c70adf2ba2758eaa2063a726f431122d7d79 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 2 Oct 2026 10:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Oct 02 10:20:07. --- .../20261002/20261002102002-Binary.backup | Bin 0 -> 243756 bytes .../20261002/20261002102002-Config.rsc | 4340 +++++++++++++++++ .../20261002/20261002102002-Diff-Config.rsc | 8 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20261002/20261002102002-Binary.backup create mode 100644 MikroMaster/20261002/20261002102002-Config.rsc create mode 100644 MikroMaster/history/20261002/20261002102002-Diff-Config.rsc diff --git a/MikroMaster/20261002/20261002102002-Binary.backup b/MikroMaster/20261002/20261002102002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..7818542da8ab132c6dd89a9c1806f32bceee4ee9 GIT binary patch literal 243756 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 z

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

o+s^VsHu`MKq?8`| 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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/22452/a55d29d3\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 10:10:04 02.10.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +add bridge=Bridge-Lan interface=ether2 +add bridge=Bridge-Lan interface=ether3 +add bridge=Bridge-Lan interface=ether4 +add bridge=Bridge-Lan interface=ether5 +add bridge=Bridge-Lan interface=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-Lan network=10.30.30.0 +add address=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.33 name=prt.vados.ru type=A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=2ip.ru list=Test +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru comment=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" dst-port=80 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=80 +add action=dst-nat chain=dstnat comment="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip route +add disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +add check-gateway=ping disabled=no distance=1 dst-address=192.168.0.0/24 \ + gateway=10.30.30.85 routing-table=main 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/20261002/20261002102002-Diff-Config.rsc b/MikroMaster/history/20261002/20261002102002-Diff-Config.rsc new file mode 100644 index 0000000..b6ef7e8 --- /dev/null +++ b/MikroMaster/history/20261002/20261002102002-Diff-Config.rsc @@ -0,0 +1,8 @@ +607c607 +< \n:global CommitId \"main/22452/a55d29d3\";\r\ +--- +> \n:global CommitId \"main/22164/cc4a4bc7\";\r\ +610c610 +< r: root, in 10:10:04 02.10.2026.\";\r\ +--- +> r: root, in 10:10:04 01.10.2026.\";\r\ -- 2.52.0