From 2d7f2669b9eed4417e2356ca0e8e9292775ab9eb Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 18 Sep 2026 06:00:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 18 06:00:08. --- .../20260918/20260918060002-Binary.backup | Bin 0 -> 243756 bytes .../20260918/20260918060002-Config.rsc | 4336 +++++++++++++++++ .../20260918/20260918060002-Diff-Config.rsc | 27 + 3 files changed, 4363 insertions(+) create mode 100644 MikroMaster/20260918/20260918060002-Binary.backup create mode 100644 MikroMaster/20260918/20260918060002-Config.rsc create mode 100644 MikroMaster/history/20260918/20260918060002-Diff-Config.rsc diff --git a/MikroMaster/20260918/20260918060002-Binary.backup b/MikroMaster/20260918/20260918060002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0c1baa8c678a2136b408aff81a78a081ca957d1c GIT binary patch literal 243756 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�#hk|r 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

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