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