From c2e6a7c63bf79cc83ae3711a927e375287b7c1f8 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 18 Sep 2026 05:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 18 05:20:07. --- .../20260918/20260918052001-Binary.backup | Bin 0 -> 243760 bytes .../20260918/20260918052001-Config.rsc | 4352 +++++++++++++++++ .../20260918/20260918052001-Diff-Config.rsc | 4 + 3 files changed, 4356 insertions(+) create mode 100644 MikroMaster/20260918/20260918052001-Binary.backup create mode 100644 MikroMaster/20260918/20260918052001-Config.rsc create mode 100644 MikroMaster/history/20260918/20260918052001-Diff-Config.rsc diff --git a/MikroMaster/20260918/20260918052001-Binary.backup b/MikroMaster/20260918/20260918052001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..9f80473f43c462f4001c5ca1c5824a305e3aa938 GIT binary patch literal 243760 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

    J}NV~^ra{m$-u!Gu*jy*!KME!oK3h-*5 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⩓dtZZArw_HwjRer80@$zM*ykzCRPBCL6W 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%0AMIT6aa0)W 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

    ClvYb#o8&Fd!9+6%&a9<>aeC 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 M1yYV5*{DJ<*KOgp*#H0l literal 0 HcmV?d00001 diff --git a/MikroMaster/20260918/20260918052001-Config.rsc b/MikroMaster/20260918/20260918052001-Config.rsc new file mode 100644 index 0000000..cb91c44 --- /dev/null +++ b/MikroMaster/20260918/20260918052001-Config.rsc @@ -0,0 +1,4352 @@ +# 2026-09-18 05:20:03 by RouterOS 7.23.3 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-Lan +/interface wireless +# managed by CAPsMAN +set [ find default-name=wlan1 ] mode=ap-bridge ssid=vados wireless-protocol=\ + 802.11 +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ + wireless-protocol=802.11 +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC name=\ + "ether1 - Unet" +/interface veth +add address=172.19.14.102/30 container-mac-address=30:C8:D7:A4:6C:D6 dhcp=no \ + gateway=172.19.14.101 gateway6="" mac-address=30:C8:D7:A4:6C:D5 name=\ + veth-awg3vds +/interface wireguard +add listen-port=60585 mtu=1280 name=WARP +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 bgp template +set default as=64999 disabled=yes multihop=yes +/routing table +add disabled=no fib name=To-VPN +add disabled=no name=warp_table +/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/18038/819287c3\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:04 17.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=" +add allowed-address=0.0.0.0/0,::/0 client-allowed-address=::/0 \ + endpoint-address=engage.cloudflareclient.com endpoint-port=2408 \ + interface=WARP name=CloudFlare public-key=\ + "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" +/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 +add address=172.16.0.2/24 interface=WARP network=172.16.0.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 +/routing bgp template +add as=64999 disabled=yes hold-time=4m multihop=yes name=warp routing-table=\ + *C8 use-bfd=yes +/routing filter community-list +add communities=65444:900,65445:643 disabled=no list=COUNTRY_RU +add communities=65444:900,65445:112 disabled=no list=COUNTRY_BY +/routing filter rule +add chain=200 disabled=yes rule="" +/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/20260918052001-Diff-Config.rsc b/MikroMaster/history/20260918/20260918052001-Diff-Config.rsc new file mode 100644 index 0000000..c07784b --- /dev/null +++ b/MikroMaster/history/20260918/20260918052001-Diff-Config.rsc @@ -0,0 +1,4 @@ +4302c4302 +< add chain=200 disabled=yes rule="" +--- +> add chain=200 disabled=no rule="" -- 2.52.0