From 82899876c875ec8d0a0e22e627ac999be532eb41 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 30 Sep 2026 03:40:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 30 03:40:07. --- .../20260930/20260930034002-Binary.backup | Bin 0 -> 243756 bytes .../20260930/20260930034002-Config.rsc | 4340 +++++++++++++++++ .../20260930/20260930034002-Diff-Config.rsc | 3 + 3 files changed, 4343 insertions(+) create mode 100644 MikroMaster/20260930/20260930034002-Binary.backup create mode 100644 MikroMaster/20260930/20260930034002-Config.rsc create mode 100644 MikroMaster/history/20260930/20260930034002-Diff-Config.rsc diff --git a/MikroMaster/20260930/20260930034002-Binary.backup b/MikroMaster/20260930/20260930034002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..f6125d51593680e6492cb965ac3270278ccc316d GIT binary patch literal 243756 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

CG4`{Ea*ZFz29Z3YS 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

L@-@S(OGH2rmFzr-{MUphiVmV|(C^P@ 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 ITbn$sLq5_=\"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/21588/923db97d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 10:10:04 29.09.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +add bridge=Bridge-Lan interface=ether2 +add bridge=Bridge-Lan interface=ether3 +add bridge=Bridge-Lan interface=ether4 +add bridge=Bridge-Lan interface=ether5 +add bridge=Bridge-Lan interface=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-Lan network=10.30.30.0 +add address=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +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/20260930/20260930034002-Diff-Config.rsc b/MikroMaster/history/20260930/20260930034002-Diff-Config.rsc new file mode 100644 index 0000000..d72403f --- /dev/null +++ b/MikroMaster/history/20260930/20260930034002-Diff-Config.rsc @@ -0,0 +1,3 @@ +4216,4217d4215 +< 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 -- 2.52.0