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