From 89e2551c7b53e9e7dd0e1659efa42cfd9a9a05f4 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 04:55:57 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 04:55:57. --- .../20260505/20260505045520-Binary.backup | Bin 0 -> 270775 bytes .../20260505/20260505045520-Config.rsc | 4504 +++++++++++++++++ .../20260505/20260505045520-Diff-Config.rsc | 30 + 3 files changed, 4534 insertions(+) create mode 100644 MikroMaster/20260505/20260505045520-Binary.backup create mode 100644 MikroMaster/20260505/20260505045520-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505045520-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505045520-Binary.backup b/MikroMaster/20260505/20260505045520-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e4bb8722ceb1cfb4569f83156ca1f379aab53e53 GIT binary patch literal 270775 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
gcbr-&MsE;8RG~(kt*tVlbw@lsdAt>+D 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505045520-Config.rsc b/MikroMaster/20260505/20260505045520-Config.rsc new file mode 100644 index 0000000..1898840 --- /dev/null +++ b/MikroMaster/20260505/20260505045520-Config.rsc @@ -0,0 +1,4504 @@ +# 2026-05-05 04:55:21 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 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=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=104.16.4.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.41 comment=pornolab.net list=FuckRKN +add address=185.110.92.40 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 note +set show-at-login=no +/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 routerboard settings +# Warning: cpu not running at default frequency +set cpu-frequency=700MHz +/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/20260505045520-Diff-Config.rsc b/MikroMaster/history/20260505/20260505045520-Diff-Config.rsc new file mode 100644 index 0000000..c4a9a06 --- /dev/null +++ b/MikroMaster/history/20260505/20260505045520-Diff-Config.rsc @@ -0,0 +1,30 @@ +3370a3371,3372 +> /caps-man manager +> set enabled=yes +4165d4166 +< add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4167c4168 +< add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +--- +> add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4169c4170 +< add address=172.67.182.196 comment=rutracker.org list=FuckRKN +--- +> add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +4170a4172 +> add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4172d4173 +< add address=8.6.112.6 comment=dou.ua list=FuckRKN +4173a4175 +> add address=8.6.112.6 comment=dou.ua list=FuckRKN +4175d4176 +< add address=185.110.92.41 comment=pornolab.net list=FuckRKN +4176a4178 +> add address=185.110.92.41 comment=pornolab.net list=FuckRKN +4436,4437d4437 +< /system note +< set show-at-login=no +4448,4450d4447 +< /system routerboard settings +< # Warning: cpu not running at default frequency +< set cpu-frequency=700MHz -- 2.52.0