From a695cd65baaccf92f98f5d877b4cd8c1b49fddab Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 6 May 2026 02:00:16 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 06 02:00:16. --- .../20260506/20260506020002-Binary.backup | Bin 0 -> 279058 bytes .../20260506/20260506020002-Config.rsc | 4678 +++++++++++++++++ .../20260506/20260506020002-Diff-Config.rsc | 7 + 3 files changed, 4685 insertions(+) create mode 100644 MikroMaster/20260506/20260506020002-Binary.backup create mode 100644 MikroMaster/20260506/20260506020002-Config.rsc create mode 100644 MikroMaster/history/20260506/20260506020002-Diff-Config.rsc diff --git a/MikroMaster/20260506/20260506020002-Binary.backup b/MikroMaster/20260506/20260506020002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..c61a591a56a7491c34f073856db29f0451ac9355 GIT binary patch literal 279058 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
    x6Jo-gYL}62HEbwCtnZskC`qNo<1=sEIhtD| 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

      JKG;>XZ-P>r_v1a!eww0(@uuci~@($ifT# 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 Rr&4?aOyoRsCOOl(UZU3A?uq~a literal 0 HcmV?d00001 diff --git a/MikroMaster/20260506/20260506020002-Config.rsc b/MikroMaster/20260506/20260506020002-Config.rsc new file mode 100644 index 0000000..9fa99de --- /dev/null +++ b/MikroMaster/20260506/20260506020002-Config.rsc @@ -0,0 +1,4678 @@ +# 2026-05-06 02:00:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +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=10.8.0.2/32,0.0.0.0/0 client-allowed-address=::/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=1.0.0.1,8.8.8.8 use-doh-server=\ + https://security.cloudflare-dns.com/dns-query +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" 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 list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + disabled=yes dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina \ + log-prefix=VPN-all new-routing-mark=To-VPN src-address=10.30.30.0/24 \ + src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat 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=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +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/20260506/20260506020002-Diff-Config.rsc b/MikroMaster/history/20260506/20260506020002-Diff-Config.rsc new file mode 100644 index 0000000..bf90528 --- /dev/null +++ b/MikroMaster/history/20260506/20260506020002-Diff-Config.rsc @@ -0,0 +1,7 @@ +4438,4440c4438,4439 +< disabled=yes dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina \ +< log-prefix=VPN-all new-routing-mark=To-VPN src-address=10.30.30.0/24 \ +< src-address-list=!NoWG +--- +> dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ +> new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG -- 2.52.0