From 24464ea89f6dce5289ecf4114ad68fc624ba99a9 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 29 Sep 2026 10:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 29 10:20:07. --- .../20260929/20260929102002-Binary.backup | Bin 0 -> 243756 bytes .../20260929/20260929102002-Config.rsc | 4338 +++++++++++++++++ .../20260929/20260929102002-Diff-Config.rsc | 8 + 3 files changed, 4346 insertions(+) create mode 100644 MikroMaster/20260929/20260929102002-Binary.backup create mode 100644 MikroMaster/20260929/20260929102002-Config.rsc create mode 100644 MikroMaster/history/20260929/20260929102002-Diff-Config.rsc diff --git a/MikroMaster/20260929/20260929102002-Binary.backup b/MikroMaster/20260929/20260929102002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0c8a5e7ea42ab7937bc2864ebdb0a866373a7786 GIT binary patch literal 243756 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

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