From 57e39ee7c61ea7214a7c6217109b29aa6586fc7f Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 15 Sep 2026 02:40:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 15 02:40:08. --- .../20260915/20260915024002-Binary.backup | Bin 0 -> 243760 bytes .../20260915/20260915024002-Config.rsc | 4335 +++++++++++++++++ .../20260915/20260915024002-Diff-Config.rsc | 8 + 3 files changed, 4343 insertions(+) create mode 100644 MikroMaster/20260915/20260915024002-Binary.backup create mode 100644 MikroMaster/20260915/20260915024002-Config.rsc create mode 100644 MikroMaster/history/20260915/20260915024002-Diff-Config.rsc diff --git a/MikroMaster/20260915/20260915024002-Binary.backup b/MikroMaster/20260915/20260915024002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..b8a41b3abfacbdb59e6a321186e0dca0b571fe3c GIT binary patch literal 243760 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
  • K7&Pt-RUGo^0 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

    tP=%<~=>>-p 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

    {kddv>kH{%;bp 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 M9jpUwv(LTcg`S+&C;$Ke literal 0 HcmV?d00001 diff --git a/MikroMaster/20260915/20260915024002-Config.rsc b/MikroMaster/20260915/20260915024002-Config.rsc new file mode 100644 index 0000000..33e7627 --- /dev/null +++ b/MikroMaster/20260915/20260915024002-Config.rsc @@ -0,0 +1,4335 @@ +# 2026-09-15 02:40:03 by RouterOS 7.23.3 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-Lan +/interface wireless +# managed by CAPsMAN +set [ find default-name=wlan1 ] mode=ap-bridge ssid=vados wireless-protocol=\ + 802.11 +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ + wireless-protocol=802.11 +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC name=\ + "ether1 - Unet" +/interface veth +add address=172.19.14.102/30 container-mac-address=30:C8:D7:A4:6C:D6 dhcp=no \ + gateway=172.19.14.101 gateway6="" mac-address=30:C8:D7:A4:6C:D5 name=\ + veth-awg3vds +/interface wireguard +add listen-port=41430 mtu=1320 name=wg-awg3vds +add disabled=yes listen-port=32252 mtu=1420 name=wg1 +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon2.to \ + verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add address-pool=dhcp bootp-support=dynamic dhcp-option-set=domain-search-set \ + interface=Bridge-Lan name=masterDHCP server-address=10.30.30.81 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/routing table +add disabled=no fib name=To-VPN +/system script +add dont-require-permissions=no name=fetchCustom owner=admin policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n\ + \n\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/17464/4c4e7ea3\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:03 15.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/20260915/20260915024002-Diff-Config.rsc b/MikroMaster/history/20260915/20260915024002-Diff-Config.rsc new file mode 100644 index 0000000..d283149 --- /dev/null +++ b/MikroMaster/history/20260915/20260915024002-Diff-Config.rsc @@ -0,0 +1,8 @@ +606c606 +< \n:global CommitId \"main/17464/4c4e7ea3\";\r\ +--- +> \n:global CommitId \"main/17176/0d89ed8d\";\r\ +609c609 +< r: root, in 02:20:03 15.09.2026.\";\r\ +--- +> r: root, in 02:20:04 14.09.2026.\";\r\ -- 2.52.0