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