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