From 2fe54686867d6d622dbba4e5c7dd6adb92275994 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 13 Sep 2026 02:40:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 13 02:40:08. --- .../20260913/20260913024002-Binary.backup | Bin 0 -> 244012 bytes .../20260913/20260913024002-Config.rsc | 4335 +++++++++++++++++ .../20260913/20260913024002-Diff-Config.rsc | 8 + 3 files changed, 4343 insertions(+) create mode 100644 MikroMaster/20260913/20260913024002-Binary.backup create mode 100644 MikroMaster/20260913/20260913024002-Config.rsc create mode 100644 MikroMaster/history/20260913/20260913024002-Diff-Config.rsc diff --git a/MikroMaster/20260913/20260913024002-Binary.backup b/MikroMaster/20260913/20260913024002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..561ac9e02fd8b3d72b425b1239d07244647af3ac GIT binary patch literal 244012 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%0DO5&Y;9KkXw*lXiyI93sAN0#;bsE=6B^mvs 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�=kn&=em=x?CMBIk~JapmHw%galtn#}O!b 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

0?Lbe@a|oYl?+MXmEHR_wR|&Th!{Jtvl+Mq< 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%0D7-@t!&bzf7vP$|Ljwk;OWId=^+ zZC0t@*}jU{DI#ZyJC261O7JCuWq=O;*4CcD!F<#@hlHML4MAt3bWB-HBJOz9ohg}l z3PFfn7n@#St{tL4ejzOpjk$CMvte&eo+a_;hVPM9XD@GFKU9qRr58mwj3SNds=h}9 zB9Qqn35uxk&SDbwO-n!s)0S2@Rh6B2!?`Wz21&TcyqqqOAtm);1!GWrA9WcUK)HDN zma=7fm~k_`OTDhf=bZoC8z?h|DReb3%)JzNF|IvT*!_1#e<`Ab05P%;Gvkvb7d@p; zI9v}ea$aP*bM|dD0i6;4_{f~DYG1NJm|);@pfMH+**l;bTZHT3BIUCbrs^^|=Mi%u zgO&#KH!j{g!qiR7!HMu;X5zBP71Ek-A?Lk!5;Z#mMF#5^13y610r{8R{{FHyjT6IW zFHil(X`%p0Xj~}55%UF!MSS95*N2uFdv>{)t$pZXFKabYI~up-qLXfnkP$7Kj*D8P zS#tWCiy8oNCAI_Qx%NcX`!VvV0*+C#HH2WzUCaciWy6p3Rp7rPWETq*B3A%VT!oh zWxK|*J|8es$O|_n!zj~(RFsCyyp`_br^(0U|IwyKcF_>RSi{JHu;JU|M!NK(4vGD= z_RpRIy2WP(%FI&jMA(d~=1l!YkYVO;wP-u#{8_n`C7wF@*mNCwlEECz5o!}x4Q-Hx zSfHj2EmBAo7>Y>*Vztn6O9A}G3fz|!IKBugB6*bZvsg=9B-uuCe_27w^s7@A%bB~3 zT)lk!R~#YBiBYM!0QJd+FDM8efz&6}cMAVY3cAmEd!GuvpLo&Ar(5L?9#y`#QdqH& zDUIb&VBTt$I2iI@amt>GK32B`wID9ZYJ#N)5IrNY6|r8GU6^%pzYq*sCKkxQK5-Cq z^FX&P&v)En9i6#MK`z_rxO-<`7_7NE<7o-bth0#iKP2%>^!Q*K20pMfQ*9LVcPiPNMwX(ZxY15@(!bm*3m?~i zIh|leo#L*brCQ;=GX@`f^fF($hAeX6=_^ zdwf0ca;)l7oJ$)xRWR7IUu-tpw^vba!~ z$Nr^xnS`Ob%~8`2{`ukVVfUr?xJrnu>^QwFG52~%@zRpY4dkw8mT znr&BGa~5KT&Jsrf`F#FDEOzm_GU{gYSJ`Maa+)Ks6(D((D_qEFp;~$gHl+eSdENt9 zE=_cN?ywsl7TXL=D}@*m@ny9UyhpQn*V=Kkv z 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

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