From 40c647323da49f4450768b2d8b9921c7a56f2194 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 3 May 2026 19:00:18 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 03 19:00:18. --- .../20260503/20260503190001-Binary.backup | Bin 0 -> 221610 bytes .../20260503/20260503190001-Config.rsc | 4073 +++++++++++++++++ .../20260503/20260503190001-Diff-Config.rsc | 106 + 3 files changed, 4179 insertions(+) create mode 100644 MikroMaster/20260503/20260503190001-Binary.backup create mode 100644 MikroMaster/20260503/20260503190001-Config.rsc create mode 100644 MikroMaster/history/20260503/20260503190001-Diff-Config.rsc diff --git a/MikroMaster/20260503/20260503190001-Binary.backup b/MikroMaster/20260503/20260503190001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..a23978a17dbe1ff3b967f87f4e5b1096210e52e9 GIT binary patch literal 221610 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 JwH{dvUp1BzXJ7yT literal 0 HcmV?d00001 diff --git a/MikroMaster/20260503/20260503190001-Config.rsc b/MikroMaster/20260503/20260503190001-Config.rsc new file mode 100644 index 0000000..b78858c --- /dev/null +++ b/MikroMaster/20260503/20260503190001-Config.rsc @@ -0,0 +1,4073 @@ +# 2026-05-03 19:00:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/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 dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \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#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \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#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$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=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\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 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \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 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 \"\";\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/\");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\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/368/b69ddb1c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:35:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\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 GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\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 ExitError;\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 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 WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\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 FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\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# check and download required certificate\r\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\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# download and import certificate\r\ + \n# Usage: \$CertificateDownload \"Common Name\"\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 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 http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$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 warning (\$0 . \" Failed downloading certificate with CommonN\ + ame '\" . \$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# name a certificate by its common-name\r\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\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 (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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 MiniDateTimeStamp do={\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 :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\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={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {: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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\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 :global LogPrint;\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 \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint 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 \$LogPrint 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 \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint 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 \$LogPrint 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 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 [ :len\ + \_\$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 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 LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 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: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: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 LogPrint;\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 \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\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 \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', 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: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: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:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\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 \$LogPrint 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: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: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: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:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\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: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# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\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 #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\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 :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\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 \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\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 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={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\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 \"Setup Global Environment for scripts\";\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#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\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# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\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} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"GTS-Root-R1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\r\ + \n:set CertName \"ISRG-Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\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" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +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=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 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=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/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.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D 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.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF 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 +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F 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 cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" 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=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage 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 +/ip firewall address-list +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=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +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 list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=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 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 list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 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 +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +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,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +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=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +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" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + 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 \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=masquerade chain=srcnat out-interface-list=WAN +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/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 hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/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=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/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=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Setup Global Environment for scripts" 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="Windows Update script" disabled=yes interval=2d5m name=\ + WU-script-run-schedule on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" disabled=yes interval=1d name="DNS Cache Flush" \ + on-event=DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" disabled=yes name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260503/20260503190001-Diff-Config.rsc b/MikroMaster/history/20260503/20260503190001-Diff-Config.rsc new file mode 100644 index 0000000..8730362 --- /dev/null +++ b/MikroMaster/history/20260503/20260503190001-Diff-Config.rsc @@ -0,0 +1,106 @@ +3658,3677c3658,3661 +< add action=add-src-to-address-list address-list="Honeypot Hacker" \ +< address-list-timeout=12h chain=input comment="block honeypot DNS" \ +< connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ +< udp +< add action=add-src-to-address-list address-list="Honeypot Hacker" \ +< address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ +< in-interface="ether1 - Unet" protocol=tcp +< 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,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ +< !TRUSTED +< 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=5d chain=input comment="block honeypot NTP" \ +< connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ +< udp src-address=!10.30.30.0/24 +--- +> add action=accept chain=input protocol=icmp +> add action=accept chain=input connection-state=established +> add action=accept chain=input connection-state=related +> add action=drop chain=input in-interface-list=!LAN +3681,3684d3664 +< add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ +< in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +< add action=accept chain=input disabled=yes dst-port=443 in-interface=\ +< "ether1 - Unet" protocol=tcp +3711a3692,3694 +> add action=accept chain=input connection-state=established disabled=yes +> add action=accept chain=input connection-state=related disabled=yes +> add action=drop chain=input disabled=yes in-interface-list=!LAN +3713,3714c3696,3730 +< "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ +< connection-state=new in-interface="ether1 - Unet" +--- +> "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ +> facebook +> add action=drop chain=forward comment=\ +> "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ +> dst-address-list=YouTube +> add action=accept chain=input comment=\ +> "accept NTP clients on local area network" dst-port=123 in-interface=\ +> Bridge-LAN in-interface-list=LAN protocol=udp +> add action=accept chain=output disabled=yes protocol=tcp src-port=443 +> add action=fasttrack-connection chain=forward comment=\ +> "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ +> connection-state=established,related,new disabled=yes +> add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ +> connection-state=established,related,new disabled=yes routing-mark=\ +> !To-VPN +> 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" disabled=yes \ +> protocol=icmp +> add action=accept chain=input comment=\ +> "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ +> dst-address=127.0.0.1 +> add action=accept chain=output disabled=yes src-address=127.0.0.1 +> add action=accept chain=forward comment="defconf: accept in ipsec policy" \ +> ipsec-policy=in,ipsec +> add action=accept chain=forward comment="defconf: accept out ipsec policy" \ +> 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 +3767a3784 +> add action=masquerade chain=srcnat out-interface-list=WAN +3773,3777d3789 +< add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ +< 10.30.30.0/24 to-ports=53 +< add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ +< dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ +< time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +3781d3792 +< add action=masquerade chain=srcnat out-interface-list=WAN +3784a3796,3803 +> add action=redirect chain=dstnat comment=\ +> "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ +> src-address=10.30.30.0/24 to-ports=53 +> add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ +> 10.30.30.0/24 to-ports=53 +> add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ +> dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ +> time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +3953,3958c3972,3976 +< add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +< add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +< add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +< add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +< add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ +< To-VPN scope=30 target-scope=10 +--- +> add disabled=yes dst-address=0.0.0.0/0 gateway=10.30.30.81 +> add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ +> routing-table=main scope=30 target-scope=10 +> add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ +> routing-table=main scope=30 target-scope=10 -- 2.52.0