From 01623211e04799c704bf1333cf4901f53a7c35b3 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sat, 12 Sep 2026 14:40:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 12 14:40:07. --- .../20260912/20260912144001-Binary.backup | Bin 0 -> 244012 bytes .../20260912/20260912144001-Config.rsc | 4335 +++++++++++++++++ .../20260912/20260912144001-Diff-Config.rsc | 4 + 3 files changed, 4339 insertions(+) create mode 100644 MikroMaster/20260912/20260912144001-Binary.backup create mode 100644 MikroMaster/20260912/20260912144001-Config.rsc create mode 100644 MikroMaster/history/20260912/20260912144001-Diff-Config.rsc diff --git a/MikroMaster/20260912/20260912144001-Binary.backup b/MikroMaster/20260912/20260912144001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..791183660aaff71522e4aa2494c9861927988fd3 GIT binary patch literal 244012 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

UTnB6$ut-;j?1-TB~sKf={ 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

& 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%0DSbH# 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 E*!lfm`v3p{ literal 0 HcmV?d00001 diff --git a/MikroMaster/20260912/20260912144001-Config.rsc b/MikroMaster/20260912/20260912144001-Config.rsc new file mode 100644 index 0000000..db50d57 --- /dev/null +++ b/MikroMaster/20260912/20260912144001-Config.rsc @@ -0,0 +1,4335 @@ +# 2026-09-12 14:40:02 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/16716/73429726\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 12:00:05 12.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/20260912/20260912144001-Diff-Config.rsc b/MikroMaster/history/20260912/20260912144001-Diff-Config.rsc new file mode 100644 index 0000000..2596ec2 --- /dev/null +++ b/MikroMaster/history/20260912/20260912144001-Diff-Config.rsc @@ -0,0 +1,4 @@ +3601c3601 +< set allow-remote-requests=yes servers=10.30.30.33,8.8.4.4 +--- +> set allow-remote-requests=yes servers=89.110.101.17,8.8.4.4 -- 2.52.0