From 32a08bee4e19cbd9ec8690ef925dfd83f8a9bf96 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 17 Sep 2026 20:20:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 17 20:20:08. --- .../20260917/20260917202002-Binary.backup | Bin 0 -> 243760 bytes .../20260917/20260917202002-Config.rsc | 4347 +++++++++++++++++ .../20260917/20260917202002-Diff-Config.rsc | 12 + 3 files changed, 4359 insertions(+) create mode 100644 MikroMaster/20260917/20260917202002-Binary.backup create mode 100644 MikroMaster/20260917/20260917202002-Config.rsc create mode 100644 MikroMaster/history/20260917/20260917202002-Diff-Config.rsc diff --git a/MikroMaster/20260917/20260917202002-Binary.backup b/MikroMaster/20260917/20260917202002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..8143078a2d274674ca5ff400fde0db2db4b97e85 GIT binary patch literal 243760 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

@F2@h({&j}fC%tx+&~_ta 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 -}oJMFw@3NV@ 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 z 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260917/20260917202002-Config.rsc b/MikroMaster/20260917/20260917202002-Config.rsc new file mode 100644 index 0000000..7342558 --- /dev/null +++ b/MikroMaster/20260917/20260917202002-Config.rsc @@ -0,0 +1,4347 @@ +# 2026-09-17 20: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 +/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/20260917/20260917202002-Diff-Config.rsc b/MikroMaster/history/20260917/20260917202002-Diff-Config.rsc new file mode 100644 index 0000000..fcf0bb1 --- /dev/null +++ b/MikroMaster/history/20260917/20260917202002-Diff-Config.rsc @@ -0,0 +1,12 @@ +71c71 +< set default as=64999 disabled=yes multihop=yes +--- +> set default disabled=yes +74d73 +< add disabled=no name=warp_table +4296,4297c4295,4296 +< add as=64999 disabled=yes hold-time=4m multihop=yes name=warp routing-table=\ +< *C8 use-bfd=yes +--- +> add as=64999 disabled=no hold-time=4m input.filter="" name=warp \ +> output.network="" routing-table=*C8 -- 2.52.0