From 87b195b1a010939d763502489f1a9268ba588cc1 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 20:40:59 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 20:40:59. --- .../20260504/20260504204001-Binary.backup | Bin 0 -> 265009 bytes .../20260504/20260504204001-Config.rsc | 4394 +++++++++++++++++ .../20260504/20260504204001-Diff-Config.rsc | 166 + 3 files changed, 4560 insertions(+) create mode 100644 MikroMaster/20260504/20260504204001-Binary.backup create mode 100644 MikroMaster/20260504/20260504204001-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504204001-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504204001-Binary.backup b/MikroMaster/20260504/20260504204001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..dd56359f8ca67f990d757c377aacadd4fb9f5196 GIT binary patch literal 265009 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 z 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 D6qYec literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504204001-Config.rsc b/MikroMaster/20260504/20260504204001-Config.rsc new file mode 100644 index 0000000..e5082aa --- /dev/null +++ b/MikroMaster/20260504/20260504204001-Config.rsc @@ -0,0 +1,4394 @@ +# 2026-05-04 20:40:03 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="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 false;\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 ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\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 /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\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/593/61326945\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 20:25:03 04.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global 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 CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global 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 ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /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={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\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-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 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## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={: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={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="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 ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\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 ] 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 :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n# :do {\r\ + \n# :onerror Err {\r\ + \n# :log info (\$0 \" Fetching script '\" . \$ScriptName . \"' from u\ + rl: \" . \$Url);\r\ + \n# :set tmpIndex [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) \$Ur\ + l dst-path=\$tmpIndex ];\r\ + \n# } do={\r\ + \n# :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n# :log warning (\$ScriptName . \" Failed downloading address-list\ + s index from: '\" . \$Url . \"' Error: \" . \$Err);\r\ + \n# }\r\ + \n# :error false;\r\ + \n# }\r\ + \n# \$WaitForFile \$tmpIndex;\r\ + \n\r\ + \n# :if (\$tmpIndex->\"status\" = \"finished\") do={\r\ + \n# :set arrLists [ :tolf (\$tmpIndex->\"Lists\") ];\r\ + \n# }\r\ + \n# } do={\r\ + \n# :log warning (\$ScriptName . \" Failed downloading address-list\ + s index from: '\" . \$Url . \"' Error: \" . \$Err);\r\ + \n# :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n# :error false;\r\ + \n# }\r\ + \n# :set tmpIndex false;\r\ + \n# :set arrLists false;\r\ + \n# :error true;\r\ + \n# }\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\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 \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\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 '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\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 ] ] . (\$L\ + ist->\"cidr\"));\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=\ + {\r\ + \n :set (\$IPv4Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\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 }\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 }\r\ + \n } on-error={\r\ + \n :log error (\$ScriptName . \" Failed parsing address: \" . \$Lin\ + e->0);\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName 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 '\" . \$ListName . \"' 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 '\" . \$ListName . \".\");\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=\$ListName 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 '\" . \$ListName . \"' 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 '\" . \$ListName . \".\");\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 '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\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 '\" . \$ListName . \"': \" . \$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 '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName 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 IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\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="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="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/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/20260504204001-Diff-Config.rsc b/MikroMaster/history/20260504/20260504204001-Diff-Config.rsc new file mode 100644 index 0000000..a9d75ad --- /dev/null +++ b/MikroMaster/history/20260504/20260504204001-Diff-Config.rsc @@ -0,0 +1,166 @@ +937c937 +< \n:global CommitId \"main/593/61326945\";\r\ +--- +> \n:global CommitId \"main/589/c05c3863\";\r\ +940c940 +< r: root, in 20:25:03 04.05.2026.\";\r\ +--- +> r: root, in 19:45:02 04.05.2026.\";\r\ +2919,2922c2919,2921 +< 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\ +--- +> add 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\ +2983,2998c2982,2996 +< \n# :do {\r\ +< \n# :onerror Err {\r\ +< \n# :log info (\$0 \" Fetching script '\" . \$ScriptName . \"' from u\ +< rl: \" . \$Url);\r\ +< \n# :set tmpIndex [ /tool/fetch check-certificate=yes-without-crl \\\ +< \r\ +< \n# http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) \$Ur\ +< l dst-path=\$tmpIndex ];\r\ +< \n# } do={\r\ +< \n# :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ +< \n# :log warning (\$ScriptName . \" Failed downloading address-list\ +< s index from: '\" . \$Url . \"' Error: \" . \$Err);\r\ +< \n# }\r\ +< \n# :error false;\r\ +< \n# }\r\ +< \n# \$WaitForFile \$tmpIndex;\r\ +--- +> \n :do {\r\ +> \n :onerror Err {\r\ +> \n :log info (\$0 \" Fetching script '\" . \$ScriptName . \"' from ur\ +> l: \" . \$Url);\r\ +> \n :set tmpIndex [ /tool/fetch check-certificate=yes-without-crl \\\r\ +> \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) \$Url\ +> \_dst-path=\$tmpIndex ];\r\ +> \n } do={\r\ +> \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ +> \n :log warning (\$ScriptName . \" Failed downloading address-lists\ +> \_index from: '\" . \$Url . \"' Error: \" . \$Err);\r\ +> \n }\r\ +> \n :error false;\r\ +> \n }\r\ +> \n \$WaitForFile \$tmpIndex;\r\ +3014,3024c3012,3022 +< \n :for I from=1 to=5 do={\r\ +< \n :if (\$tmpIndex = false) do={\r\ +< \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ +< kCerts ] ];\r\ +< \n :if (\$tmpIndex = false && \$I < 5) do={\r\ +< \n :log warning (\$ScriptName . \" Failed downloading address-list \ +< index, \" . \$I . \". try from: \" . \$Url);\r\ +< \n :delay ((\$I * \$I) . \"s\");\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +--- +> \n# :for I from=1 to=5 do={\r\ +> \n# :if (\$tmpIndex = false) do={\r\ +> \n# :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$FwAddrLis\ +> tsUrl \$Index \$CheckCerts ] ];\r\ +> \n# :if (\$tmpIndex = false && \$I < 5) do={\r\ +> \n# :log warning (\$ScriptName . \" Failed downloading address-list\ +> \_index, \" . \$I . \". try from: \" . \$FwAddrListsUrl . \$Index);\r\ +> \n# :delay ((\$I * \$I) . \"s\");\r\ +> \n# }\r\ +> \n# }\r\ +> \n# }\r\ +3027c3025 +< x from: \" . \$Url);\r\ +--- +> x from: \" . \$FwAddrListsUrl . \$Index);\r\ +3029a3028 +> \n }\r\ +3047c3046 +< \n :local ListUrl (\$ListsUrl . \$ListName);\r\ +--- +> \n :local Url (\$ListsUrl . \$ListName);\r\ +3059,3060c3058,3059 +< \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ +< eckCerts ] ];\r\ +--- +> \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$CheckC\ +> erts ] ];\r\ +3063c3062 +< \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ +--- +> \" . \$ListName . \"', \" . \$I . \". try from: \" . \$Url);\r\ +3073c3072 +< \$ListName . \"' from: \" . \$ListUrl);\r\ +--- +> \$ListName . \"' from: \" . \$Url);\r\ +3077c3076 +< \$ListUrl);\r\ +--- +> \$Url);\r\ +3151c3150 +< \n list=\$ListName comment=\$ListComment ] do={\r\ +--- +> \n list=\$FwListName comment=\$ListComment ] do={\r\ +3159,3160c3158,3159 +< \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ +< \");\r\ +--- +> \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ +> .\");\r\ +3168c3167 +< \n \" from list '\" . \$ListName . \".\");\r\ +--- +> \n \" from list '\" . \$FwListName . \".\");\r\ +3176c3175 +< \n list=\$ListName comment=\$ListComment ] do={\r\ +--- +> \n list=\$FwListName comment=\$ListComment ] do={\r\ +3184,3185c3183,3184 +< \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ +< \");\r\ +--- +> \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ +> .\");\r\ +3193c3192 +< \n \" from list '\" . \$ListName . \".\");\r\ +--- +> \n \" from list '\" . \$FwListName . \".\");\r\ +3206,3207c3205,3206 +< \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ +< \");\r\ +--- +> \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +> .\");\r\ +3209,3210c3208,3209 +< \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ +< mment \\\r\ +--- +> \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ +> Comment \\\r\ +3216c3215 +< \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ +--- +> \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ +3227,3228c3226,3227 +< \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ +< \");\r\ +--- +> \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +> .\");\r\ +3230,3231c3229,3230 +< \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ +< Comment \\\r\ +--- +> \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ +> stComment \\\r\ +3237c3236 +< \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ +--- +> \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ +3242c3241 +< \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ +--- +> \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ -- 2.52.0

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≠?Zi3L)fR^?H-!0(ZIqCb= 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