From 772422cd18d0efeecbf719aea23038f4e36e7cd4 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 07:20:37 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 07:20:37. --- .../20260504/20260504072001-Binary.backup | Bin 0 -> 266728 bytes .../20260504/20260504072001-Config.rsc | 4401 +++++++++++++++++ .../20260504/20260504072001-Diff-Config.rsc | 16 + 3 files changed, 4417 insertions(+) create mode 100644 MikroMaster/20260504/20260504072001-Binary.backup create mode 100644 MikroMaster/20260504/20260504072001-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504072001-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504072001-Binary.backup b/MikroMaster/20260504/20260504072001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..ec0ce4bc63c611ff8aff1027bf278e26b2b0682c GIT binary patch literal 266728 zcmV+aKLEh*sF8E%5d;8z2)x=&a-A4HAjawtxLle5000O80004Z`T(2&Lm%ik@>ba< zBHosqDMV&R_d5?jPj%X$_8yUozR#g%A2ua&cGlc7;7|F4RJIjPHIO400iX+1TYkz7 zi1SF+%51Mxy8jOlF%rG<$rRoO16B;T6|-toyLNMj2&mi)wc!mo4VhlWP(v2U$b&ou zBGhlVC?M1G&6S#4MX?#KiR>hycbNopi{xJMYky5DV{vYXEDk z=u9W~(oVeha9&aB0Yr;Xit&c)F+6FG;z`2Us7PkujnKK0Gd|=uT2%&uAi!GFj0#T* z$VQgxg6t7svv272{SS^dFG$T(2npRKh*KyOJ&Zww^m8GbbsRA;iyEH|tjm+ow#Fsr zs@Up|&~|}GIn7$FR?e-{3suC;p?I_XLBw6N*@k9oZa~OdDEUejX*X%etxn9zr!oON zsktcMHI#8({SJjLwJ=<-dgeo-e@t3^4YXu5Rb!W3a)XB}Ec@B�tQ??4)(WmY1M7 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 z∨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 GdpLDWI*dmE literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504072001-Config.rsc b/MikroMaster/20260504/20260504072001-Config.rsc new file mode 100644 index 0000000..1089a69 --- /dev/null +++ b/MikroMaster/20260504/20260504072001-Config.rsc @@ -0,0 +1,4401 @@ +# 2026-05-04 07:20:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/368/b69ddb1c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:35:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global ExitError;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n# check and download required certificate\r\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# download and import certificate\r\ + \n# Usage: \$CertificateDownload \"Common Name\"\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonN\ + ame '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# name a certificate by its common-name\r\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {:set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :global LogPrint;\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\r\ + \n \r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ + \n \r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Setup Global Environment for scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add 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=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ + \n :local FwAddrListsIndexUrl (\$FwAddrListsUrl . \"index\");\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHuge;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=([ :len \$1 ] - 1) do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick \$1 \$I ] ] ] != \"num\ + \") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ + \n message=(\"\\\$LogPrint: The message is already in log, scripting \ + subsystem may have crashed before!\") ] ] > 0) do={\r\ + \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ + , possibly caused by us. Delaying!\");\r\ + \n :delay 5m;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local FwAddrListsIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$FwAddrListsIndex = false) do={\r\ + \n :set FwAddrListsIndex [ :tolf [ \$FetchHuge \$ScriptName \$FwAddrL\ + istsIndexUrl false ] ];\r\ + \n :if (\$FwAddrListsIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$FwAddrListsIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$FwAddrListsIndexUrl);\r\ + \n :set FwAddrListsIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach FwListFile in=[ :deserialize \$FwAddrListsIndex delimiter=\"\ + \\n\" from=dsv options=dsv.plain ] do={\r\ + \n :local FwListName (\$FwListFile->0);\r\ + \n :local Delim [ \$FindDelim \$FwListName ];\r\ + \n :if (\$Delim = 0) do={ :set FwListName \"\"; };\r\ + \n :if ([ :len \$FwListName ] = 0) do={ :error true; }\r\ + \n :set FwListName [ :pick \$FwListName 0 \$Delim ];\r\ + \n\r\ + \n :local FwListUrl (\$FwAddrListsUrl . \$FwListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$FwAddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHuge \$ScriptName \$FwListUrl false ]\ + \_];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$FwListName . \"', \" . \$I . \". try from: \" . \$FwListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$FwListName . \"' from: \" . \$FwListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$FwListName . \"' from: \" \ + . \$FwListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Delim [ \$FindDelim \$Line ];\r\ + \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ + \n :if ([ :len \$Line ] = 0) do={ :error true; }\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address [ :pick \$Line 0 [ \$FindDelim \$Line ] ];\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ + \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n } on-error={:log error (\$ScriptName . \" Failed parsing address: \ + \" . \$Line->0);}\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName .\".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Windows Update script" disabled=yes interval=2d5m name=\ + WU-script-run-schedule on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" disabled=yes interval=1d name="DNS Cache Flush" \ + on-event=DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" disabled=yes name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260504/20260504072001-Diff-Config.rsc b/MikroMaster/history/20260504/20260504072001-Diff-Config.rsc new file mode 100644 index 0000000..d168b56 --- /dev/null +++ b/MikroMaster/history/20260504/20260504072001-Diff-Config.rsc @@ -0,0 +1,16 @@ +2941,2943c2941,2943 +< dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ +< policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ +< source="#!rsc by Vados\r\ +--- +> 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\ +3008a3009,3011 +> \n :log warning (\$ScriptName . \" Failed downloading address-list \ +> index, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\r\ +> \n\r\ +3012c3015 +< istsIndexUrl false ] ];\r\ +--- +> istsIndexUrl true ] ];\r\ -- 2.52.0