From 8a6f7ba71f8d0577523fa1f9667ae793efc64986 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 10:20:22 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 10:20:22. --- .../20260505/20260505102001-Binary.backup | Bin 0 -> 270775 bytes .../20260505/20260505102001-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505102001-Diff-Config.rsc | 16 + 3 files changed, 4522 insertions(+) create mode 100644 MikroMaster/20260505/20260505102001-Binary.backup create mode 100644 MikroMaster/20260505/20260505102001-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505102001-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505102001-Binary.backup b/MikroMaster/20260505/20260505102001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e8418efc94c673e95b3daac924e531f5445c5c9e GIT binary patch literal 270775 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온iTx3=J(x=yQ{ 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
  • ^ywGK?-niqAlVoFZrSluB%L^=Tf)4~a`m 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

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