From c05a6abc3311a9e7dba11dde43920e95acfff91b Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 5 Oct 2026 10:20:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Oct 05 10:20:08. --- .../20261005/20261005102002-Binary.backup | Bin 0 -> 243756 bytes .../20261005/20261005102002-Config.rsc | 4340 +++++++++++++++++ .../20261005/20261005102002-Diff-Config.rsc | 8 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20261005/20261005102002-Binary.backup create mode 100644 MikroMaster/20261005/20261005102002-Config.rsc create mode 100644 MikroMaster/history/20261005/20261005102002-Diff-Config.rsc diff --git a/MikroMaster/20261005/20261005102002-Binary.backup b/MikroMaster/20261005/20261005102002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..b3310d92305dbea880ba5410504a4758d0971f25 GIT binary patch literal 243756 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±jana&TJ>W6(8 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

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