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