From ae84425fedeedcef7311833b12550f6554844c71 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 30 Sep 2026 10:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 30 10:20:07. --- .../20260930/20260930102002-Binary.backup | Bin 0 -> 243756 bytes .../20260930/20260930102002-Config.rsc | 4340 +++++++++++++++++ .../20260930/20260930102002-Diff-Config.rsc | 8 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20260930/20260930102002-Binary.backup create mode 100644 MikroMaster/20260930/20260930102002-Config.rsc create mode 100644 MikroMaster/history/20260930/20260930102002-Diff-Config.rsc diff --git a/MikroMaster/20260930/20260930102002-Binary.backup b/MikroMaster/20260930/20260930102002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e96ea080cf1846ddd908d9e759399624dcecaed0 GIT binary patch literal 243756 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�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

mA4eg!dabvfA4R zk;d+&>?|405euJ35@Z?c6DqmThatRwq){GrHWd;-GC{(u6%rHsir?!RoETl!&@UVD zi(BD%i1|(ZqF~dy2@laYee}GWLiL?gfH}~)4xS@ZFR!!GN;`lw=t-bWcAh?uok--3 zWJLA5>Yp!WBtF6a#`rcat1jytiJM=2I&`8kt-7pr zwvj-cYV9c8XZZ{ci4(@%{bqzQmAj+(Qyc5!GUaH{iiJ=84QDcN>xwRBWncOL8SN#K8;owg@*Wu_yi3NUE_|9ETD1?L8>F$dMmYU5}t$C^7ETn`yW z5}F{(zohZ-gUUhIp zhq5bHj5b(}Tbs#P=mY0D2K7lOR9xS~R)MFT^z3TgFJ8fVR0{Y_HbAp@7$kF(BB*Fh zRm%6QZ^U2chWsdr)$1EyI!t9U<8-RG;s{oBg@oihP=!Hu-7T~E#xKB1Ljw4S=!7}G z80m;#%8RV_n8?}xgzP3=?EyAC_is^z0p-R8GeyIfQ%@y_RA~liVgwbVAfx%Fo+KPs z!*ru*vm#XE&!UZlf0fqkVcE&`8{gC@kf_#^CZTF`Z~-w#Z+>)XqEnnkSt~>O1Oy>@ zh_?{pdNGkfc9|^mroQ06$F&%UC3QPqXs?DBg*C_oYox^@U5^b`9iyHpZqqfRB!xhM zbc}MwuVT~Z=rAXuOkTwLikFXwqdqJQ#`2&pg0~+(itKL9Bbl7TB@T6QFSS@iumM1` zlQ?F_*D|LA_5i-0$DbsrBD^b%vpw{pr5>KMo{`#qbQ4EkXQCz95H#$=e)NCQm4C=~ zN{*6J`mxX2F`zt|Z_;?HW@M`_egLu-h zX($yRWdqU$2prUELXD36(ltXoRAD?mBt55NJ7vEu!hxmkh$cD{O9c~oZo95cUfu~D z>=K(q)dxb+dEZ{35e!|t{5N2+1CMh1df>EV=#@0nB7)ZR!JQ3KoQkW&zscFk zd;N$F2|9p}h~d(@ea@$L^hk=jP*hd;G)R*KK(M`k4nzEOD#nb=qQS7fTg4>*Bt{O4 zDo()&jcLbSsj#)p{jO1ftLN>N(b9p9%|0^l&VmQh=)vlb>uA?WwFaP5_h*esA56

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