From 44e6451e3e830374c6bb40147832153d3ff52f6b Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 8 Oct 2026 10:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Oct 08 10:20:07. --- .../20261008/20261008102002-Binary.backup | Bin 0 -> 243756 bytes .../20261008/20261008102002-Config.rsc | 4340 +++++++++++++++++ .../20261008/20261008102002-Diff-Config.rsc | 8 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20261008/20261008102002-Binary.backup create mode 100644 MikroMaster/20261008/20261008102002-Config.rsc create mode 100644 MikroMaster/history/20261008/20261008102002-Diff-Config.rsc diff --git a/MikroMaster/20261008/20261008102002-Binary.backup b/MikroMaster/20261008/20261008102002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5dfc1b44fa5b589dc3f9527e344b990e6402bc80 GIT binary patch literal 243756 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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/24180/73847c4d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 10:10:04 08.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/20261008/20261008102002-Diff-Config.rsc b/MikroMaster/history/20261008/20261008102002-Diff-Config.rsc new file mode 100644 index 0000000..db22918 --- /dev/null +++ b/MikroMaster/history/20261008/20261008102002-Diff-Config.rsc @@ -0,0 +1,8 @@ +607c607 +< \n:global CommitId \"main/24180/73847c4d\";\r\ +--- +> \n:global CommitId \"main/23892/25da9dda\";\r\ +610c610 +< r: root, in 10:10:04 08.10.2026.\";\r\ +--- +> r: root, in 10:10:04 07.10.2026.\";\r\ -- 2.52.0