From 85dc70f709e129f2af713c5f3afe1f8dd4afe7f8 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 7 May 2026 07:20:16 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 07 07:20:16. --- .../20260507/20260507072001-Binary.backup | Bin 0 -> 284492 bytes .../20260507/20260507072001-Config.rsc | 4596 +++++++++++++++++ .../20260507/20260507072001-Diff-Config.rsc | 54 + 3 files changed, 4650 insertions(+) create mode 100644 MikroMaster/20260507/20260507072001-Binary.backup create mode 100644 MikroMaster/20260507/20260507072001-Config.rsc create mode 100644 MikroMaster/history/20260507/20260507072001-Diff-Config.rsc diff --git a/MikroMaster/20260507/20260507072001-Binary.backup b/MikroMaster/20260507/20260507072001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..3b1c3623d8b5cdf5362556a79d4de5f8b60a24b6 GIT binary patch literal 284492 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260507/20260507072001-Config.rsc b/MikroMaster/20260507/20260507072001-Config.rsc new file mode 100644 index 0000000..531ec46 --- /dev/null +++ b/MikroMaster/20260507/20260507072001-Config.rsc @@ -0,0 +1,4596 @@ +# 2026-05-07 07:20:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\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 UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \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\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 (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\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 };\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\"; \"mod/AM-\ + Certs-By-Ident\" } 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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/633/2f6d4158\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 14:35: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: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={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\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\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 warning (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :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" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\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# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\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# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/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 +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 +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 +set wlan1 enable-nstreme=yes +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,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/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=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 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 dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=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.4.4,8.8.8.8 +/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" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net 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 +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=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 disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +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="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-list=\ + Instagram new-routing-mark=To-VPN passthrough=no src-address=\ + 10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address-list=\ + Twitter new-routing-mark=To-VPN passthrough=no src-address=10.30.30.0/24 \ + src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address-list=\ + YouTube new-routing-mark=To-VPN passthrough=no src-address=10.30.30.0/24 \ + src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address-list=\ + facebook new-routing-mark=To-VPN passthrough=no 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 log-prefix=VPN-all new-routing-mark=To-VPN \ + passthrough=no 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 passthrough=no 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 log-prefix=VPN-Net new-routing-mark=To-VPN passthrough=no \ + src-address=10.30.30.0/24 +/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 \ + 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 dst-port=443 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat disabled=yes dst-port=22 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=22 +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=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add blackhole 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 +add interface=WG type=external +add interface=wlan2 type=internal +/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 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" disabled=yes 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/20260507/20260507072001-Diff-Config.rsc b/MikroMaster/history/20260507/20260507072001-Diff-Config.rsc new file mode 100644 index 0000000..62603fc --- /dev/null +++ b/MikroMaster/history/20260507/20260507072001-Diff-Config.rsc @@ -0,0 +1,54 @@ +4257,4259c4257,4259 +< add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +< add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +< add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +--- +> add address=10.30.30.33 comment=NUC list=NoWG +> add address=10.30.30.10 comment=MikroNUC list=NoWG +> add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +4296,4298d4295 +< add action=fasttrack-connection chain=forward comment=\ +< "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ +< connection-state=established,related,new +4303a4301,4303 +> add action=fasttrack-connection chain=forward comment=\ +> "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ +> connection-state=established,related,new +4342c4342,4343 +< log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +--- +> log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack passthrough=\ +> no +4349,4351c4350,4352 +< add action=mark-routing chain=prerouting comment=Twitter dst-address-list=\ +< Twitter new-routing-mark=To-VPN passthrough=no 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 \ +> passthrough=no src-address=10.30.30.0/24 src-address-list=!NoWG +4355,4357c4356,4358 +< add action=mark-routing chain=prerouting comment=facebook dst-address-list=\ +< facebook new-routing-mark=To-VPN passthrough=no 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 +4359,4360c4360,4361 +< dst-address=!10.30.30.0/24 log-prefix=VPN-all new-routing-mark=To-VPN \ +< passthrough=no src-address=10.30.30.0/24 src-address-list=!NoWG +--- +> log-prefix=VPN-all new-routing-mark=To-VPN passthrough=no src-address=\ +> 10.30.30.0/24 src-address-list=!NoWG +4365,4366c4366,4367 +< 10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN passthrough=no \ +< src-address=10.30.30.0/24 +--- +> 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 +4374c4375,4376 +< log-prefix=WG-nat out-interface=WG routing-mark=To-VPN +--- +> in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ +> To-VPN -- 2.52.0