From e06175fd3614456031107338834215ca825d0281 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 15:40:17 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 15:40:17. --- .../20260505/20260505154001-Binary.backup | Bin 0 -> 279058 bytes .../20260505/20260505154001-Config.rsc | 4678 +++++++++++++++++ .../20260505/20260505154001-Diff-Config.rsc | 17 + 3 files changed, 4695 insertions(+) create mode 100644 MikroMaster/20260505/20260505154001-Binary.backup create mode 100644 MikroMaster/20260505/20260505154001-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505154001-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505154001-Binary.backup b/MikroMaster/20260505/20260505154001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..f79fe083196d9028f0b7372b97fb39525d485fbf GIT binary patch literal 279058 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 z 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

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