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