From 1d36ff0648496dbb20a7c83eb64f5cf4060581a1 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 07:00:25 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 07:00:25. --- .../20260504/20260504070002-Binary.backup | Bin 0 -> 266847 bytes .../20260504/20260504070002-Config.rsc | 4404 +++++++++++++++++ .../20260504/20260504070002-Diff-Config.rsc | 306 ++ 3 files changed, 4710 insertions(+) create mode 100644 MikroMaster/20260504/20260504070002-Binary.backup create mode 100644 MikroMaster/20260504/20260504070002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504070002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504070002-Binary.backup b/MikroMaster/20260504/20260504070002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e9a6d7c453db240b782c551faf39dd33908d3629 GIT binary patch literal 266847 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 z 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⩔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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504070002-Config.rsc b/MikroMaster/20260504/20260504070002-Config.rsc new file mode 100644 index 0000000..9691204 --- /dev/null +++ b/MikroMaster/20260504/20260504070002-Config.rsc @@ -0,0 +1,4404 @@ +# 2026-05-04 07:00:03 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 dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/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=vados 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 :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\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 true ] ];\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/20260504070002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504070002-Diff-Config.rsc new file mode 100644 index 0000000..0fd9918 --- /dev/null +++ b/MikroMaster/history/20260504/20260504070002-Diff-Config.rsc @@ -0,0 +1,306 @@ +2940,3240c2940,2942 +< add comment="download, import and update firewall address-lists" \ +< dont-require-permissions=no name=AM-FwAddrLists owner=vados 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 :log warning (\$ScriptName . \" Failed downloading address-list \ +< index, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\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 true ] ];\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\ +--- +> add 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\ -- 2.52.0