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