From a18570c0022507d16cdab1af365a26b833722a0a Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 03:21:16 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 03:21:16. --- .../20260505/20260505032002-Binary.backup | Bin 0 -> 269589 bytes .../20260505/20260505032002-Config.rsc | 4501 +++++++++++++++++ .../20260505/20260505032002-Diff-Config.rsc | 16 + 3 files changed, 4517 insertions(+) create mode 100644 MikroMaster/20260505/20260505032002-Binary.backup create mode 100644 MikroMaster/20260505/20260505032002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505032002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505032002-Binary.backup b/MikroMaster/20260505/20260505032002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e616f98ddab224a64d228bf850902b76c6252acc GIT binary patch literal 269589 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

v|8zQyy_ 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 HEd+}JzSJo* literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505032002-Config.rsc b/MikroMaster/20260505/20260505032002-Config.rsc new file mode 100644 index 0000000..1bd6a13 --- /dev/null +++ b/MikroMaster/20260505/20260505032002-Config.rsc @@ -0,0 +1,4501 @@ +# 2026-05-05 03:20:05 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/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.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 MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\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 :local mikro [ :tobool \$1 ];\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 :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\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 :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 :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\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 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 :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 :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 :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\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 warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\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 warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\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 warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\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 warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\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 warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\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 warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\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" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\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 +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/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 +add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" 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/20260505/20260505032002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505032002-Diff-Config.rsc new file mode 100644 index 0000000..a0e5b3d --- /dev/null +++ b/MikroMaster/history/20260505/20260505032002-Diff-Config.rsc @@ -0,0 +1,16 @@ +4169d4168 +< add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +4171c4170 +< add address=172.67.182.196 comment=rutracker.org list=FuckRKN +--- +> add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +4172a4172 +> add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4174d4173 +< add address=8.6.112.6 comment=dou.ua list=FuckRKN +4175a4175 +> add address=8.6.112.6 comment=dou.ua list=FuckRKN +4179d4178 +< add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +4180a4180 +> add address=172.67.172.95 comment=crimerussia.com list=FuckRKN -- 2.52.0