From 69747cdc05f4d015feaeb4deab914a393ef4a6ab Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 08:00:25 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 08:00:25. --- .../20260504/20260504080001-Binary.backup | Bin 0 -> 264085 bytes .../20260504/20260504080001-Config.rsc | 4319 +++++++++++++++++ .../20260504/20260504080001-Diff-Config.rsc | 83 + 3 files changed, 4402 insertions(+) create mode 100644 MikroMaster/20260504/20260504080001-Binary.backup create mode 100644 MikroMaster/20260504/20260504080001-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504080001-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504080001-Binary.backup b/MikroMaster/20260504/20260504080001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..a9c01a8fd825240b24003994783f2f1bdcfccf41 GIT binary patch literal 264085 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%0Ak7^+Gy#CvZ}eGT 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≥A;09B&92xV5a{-HG*hrgg(CDSBI7; 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504080001-Config.rsc b/MikroMaster/20260504/20260504080001-Config.rsc new file mode 100644 index 0000000..e39c5c9 --- /dev/null +++ b/MikroMaster/20260504/20260504080001-Config.rsc @@ -0,0 +1,4319 @@ +# 2026-05-04 08: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 Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\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 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/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-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/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-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 \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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\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" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ + \n :local FwAddrListsIndexUrl (\$FwAddrListsUrl . \"index\");\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHuge;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=([ :len \$1 ] - 1) do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick \$1 \$I ] ] ] != \"num\ + \") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ + \n message=(\"\\\$LogPrint: The message is already in log, scripting \ + subsystem may have crashed before!\") ] ] > 0) do={\r\ + \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ + , possibly caused by us. Delaying!\");\r\ + \n :delay 5m;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local FwAddrListsIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$FwAddrListsIndex = false) do={\r\ + \n :set FwAddrListsIndex [ :tolf [ \$FetchHuge \$ScriptName \$FwAddrL\ + istsIndexUrl false ] ];\r\ + \n :if (\$FwAddrListsIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$FwAddrListsIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$FwAddrListsIndexUrl);\r\ + \n :set FwAddrListsIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach FwListFile in=[ :deserialize \$FwAddrListsIndex delimiter=\"\ + \\n\" from=dsv options=dsv.plain ] do={\r\ + \n :local FwListName (\$FwListFile->0);\r\ + \n :local Delim [ \$FindDelim \$FwListName ];\r\ + \n :if (\$Delim = 0) do={ :set FwListName \"\"; };\r\ + \n :if ([ :len \$FwListName ] = 0) do={ :error true; }\r\ + \n :set FwListName [ :pick \$FwListName 0 \$Delim ];\r\ + \n\r\ + \n :local FwListUrl (\$FwAddrListsUrl . \$FwListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$FwAddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHuge \$ScriptName \$FwListUrl false ]\ + \_];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$FwListName . \"', \" . \$I . \". try from: \" . \$FwListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$FwListName . \"' from: \" . \$FwListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$FwListName . \"' from: \" \ + . \$FwListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Delim [ \$FindDelim \$Line ];\r\ + \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ + \n :if ([ :len \$Line ] = 0) do={ :error true; }\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address [ :pick \$Line 0 [ \$FindDelim \$Line ] ];\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ + \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n } on-error={:log error (\$ScriptName . \" Failed parsing address: \ + \" . \$Line->0);}\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName .\".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/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: 5260/20-Ceee/ac/DP(18dBm), 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: 5260/20-Ceee/ac/DP(18dBm), 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,dns,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 disabled=yes 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 +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + 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-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +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=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +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=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="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 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=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +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 graphs-plain=no rest-plain=no webfig-plain=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/20260504/20260504080001-Diff-Config.rsc b/MikroMaster/history/20260504/20260504080001-Diff-Config.rsc new file mode 100644 index 0000000..97d4819 --- /dev/null +++ b/MikroMaster/history/20260504/20260504080001-Diff-Config.rsc @@ -0,0 +1,83 @@ +2622a2623,2704 +> 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" -- 2.52.0