From b1181af37cede92e58a0f461d85de37d64777e78 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 14:00:17 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 14:00:17. --- .../20260505/20260505140002-Binary.backup | Bin 0 -> 271563 bytes .../20260505/20260505140002-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505140002-Diff-Config.rsc | 20 + 3 files changed, 4526 insertions(+) create mode 100644 MikroMaster/20260505/20260505140002-Binary.backup create mode 100644 MikroMaster/20260505/20260505140002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505140002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505140002-Binary.backup b/MikroMaster/20260505/20260505140002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..4677e59d54fde7b8f1535565a3c3afbcf9baad8c GIT binary patch literal 271563 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℘D^ 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 F8@6-;=fD5} literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505140002-Config.rsc b/MikroMaster/20260505/20260505140002-Config.rsc new file mode 100644 index 0000000..4331ebb --- /dev/null +++ b/MikroMaster/20260505/20260505140002-Config.rsc @@ -0,0 +1,4506 @@ +# 2026-05-05 14:00: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: 5200/20-eCee/ac/P(21dBm), 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: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +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/20260505140002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505140002-Diff-Config.rsc new file mode 100644 index 0000000..7a8735a --- /dev/null +++ b/MikroMaster/history/20260505/20260505140002-Diff-Config.rsc @@ -0,0 +1,20 @@ +3355c3355 +< # channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +--- +> # channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +3369c3369 +< # channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +--- +> # channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +4165d4164 +< add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4167c4166 +< add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +--- +> add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4168a4168 +> add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +4172d4171 +< add address=8.6.112.6 comment=dou.ua list=FuckRKN +4173a4173 +> add address=8.6.112.6 comment=dou.ua list=FuckRKN -- 2.52.0