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