From b47028db74716dffc48b5225bf1988c10b957ae6 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 29 Sep 2026 04:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 29 04:20:07. --- .../20260929/20260929042002-Binary.backup | Bin 0 -> 243756 bytes .../20260929/20260929042002-Config.rsc | 4338 +++++++++++++++++ .../20260929/20260929042002-Diff-Config.rsc | 2 + 3 files changed, 4340 insertions(+) create mode 100644 MikroMaster/20260929/20260929042002-Binary.backup create mode 100644 MikroMaster/20260929/20260929042002-Config.rsc create mode 100644 MikroMaster/history/20260929/20260929042002-Diff-Config.rsc diff --git a/MikroMaster/20260929/20260929042002-Binary.backup b/MikroMaster/20260929/20260929042002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..75f23edd564a3c0f1659eb24f504b67dda339b28 GIT binary patch literal 243756 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
b*Rs{mt3E3pW)%uEmeLcCin2b%@^qYokHO-D1X zDg~&?L!Gw%EdZRjjfp@Owyi^35(ltK6{~2&kR@URfGT`IT@W_`h)uKoO0ME-wFYRz zMSdK!##YHGon&d84Exa#hx)3YSB1pddMo76&srZEQue1DI{ko#Yb zEMbkpf$g?1aA%@0eAIMj$vODC#b39ooQD@M`8dN+y$_lXsb%`W8x-Wz6ytwjq!yVd zyh1vql7 zvCWTCUO?Z^nY>ufY*oJbs{3YuMDF2c)8O=nQn%{4aT*ZqQjX1I@<7_GHD~_X>$*yd zvCuAFML(buquX&{eWuEuwlgJ;SVt)T-0_^R2&z>*P!Pjak0Ve!T>|uD3tu3i6n;C@epPn~ z|DenqAabgI>G%#gj;T4Hch$bJ>*kR+w1_2cwO!ge;AW0zL6JqyKBW|tV^-G{{QroA zLjigibdzsVYp3IIBNnBCEzIwotQcd} zm@^7D`zrW&U%3RZ8C()=DLL%!9yy1jMY8GG!p1RiY5-W?+lSPtE878^QNwfcif7E{srN zYXBcyk5#6@O&(gub*rub49M#t9CQ`RGYdB?sDiqaY5T#x{TZkij)EnY#oIzq4D%4% zK7wy$c@Gb`7ORRtO$RC7SeVExfHy(J(6{WUJO?mPk3zI9grA^KgO}%xV4-+xLhdFj zWPkr-CVS?jYv!3|4Mx?K+#eq`f+{EETk9Ykk3e;>l$Q(_Q*sp1G&_wL90bU}WQNuT z7(VRLL3H*<5Jh6l-Oq1TYiWo0&-^CoIa}3~&V(FgM4`ig?7UwlvWtDS(uw3K`O_d( z1t{r!JqVZkO=%s#sG$)49lar9<5h^c67|b5YI!der+R5;IX0NiuW4Ctrs}_MUfAjf zx8k9A!3!=>b6fW*$!eDL6=eULIL}OyQ#}%LmB^))@XY)U;dutfgDfzz?N38EkPZa&|CS=GLQIg#4PouFN?+0xiFw%E}Ek=AeBmmdwmWPF#iFdzx zDzQa7{+mA-h8X6~C=MpKRzK+kv`%bP6ljWI5{Ikh=p*;YN>93%=%>zr*oZyNKW9FZ)4fr~NEea8CClJe+#SSzzh4{;8Yc=yS8i}5$Pk8Kmrl@K@)8T$^vQ|c* z-kfcZ$_?m5ZGx_%AZu*6gLxW5=BrSf1d5%SBZSF6D+S6K^H}kih1<~7(6i0#)kMDJ zS5e%+a^WOAfD?osNNQ>^lHfqHXNyxoYPI+Hz(pRwPT>tM5{G5NT6d-wR&WOk>aR7& z#3sQ!$>5;2qQAadgPW{PG$_=1@?R;3YOZX8vF-_!86mgl+dCmwJ}|!KxF~Q
m3u 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

YswC7J5aGuRv~Jo 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 I!9o1ibn++6#sB~S literal 0 HcmV?d00001 diff --git a/MikroMaster/20260929/20260929042002-Config.rsc b/MikroMaster/20260929/20260929042002-Config.rsc new file mode 100644 index 0000000..da206b3 --- /dev/null +++ b/MikroMaster/20260929/20260929042002-Config.rsc @@ -0,0 +1,4338 @@ +# 2026-09-29 04: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/17176/0d89ed8d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:04 14.09.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +add bridge=Bridge-Lan interface=ether2 +add bridge=Bridge-Lan interface=ether3 +add bridge=Bridge-Lan interface=ether4 +add bridge=Bridge-Lan interface=ether5 +add bridge=Bridge-Lan interface=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 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/20260929042002-Diff-Config.rsc b/MikroMaster/history/20260929/20260929042002-Diff-Config.rsc new file mode 100644 index 0000000..2861afb --- /dev/null +++ b/MikroMaster/history/20260929/20260929042002-Diff-Config.rsc @@ -0,0 +1,2 @@ +3622d3621 +< add address=10.30.30.33 name=prt.vados.ru type=A -- 2.52.0