From e942add65b32c0dd6c5d6e0614d8b3f3bb02b60a Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 6 May 2026 13:20:21 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 06 13:20:21. --- .../20260506/20260506132002-Binary.backup | Bin 0 -> 279058 bytes .../20260506/20260506132002-Config.rsc | 4677 +++++++++++++++++ .../20260506/20260506132002-Diff-Config.rsc | 6 + 3 files changed, 4683 insertions(+) create mode 100644 MikroMaster/20260506/20260506132002-Binary.backup create mode 100644 MikroMaster/20260506/20260506132002-Config.rsc create mode 100644 MikroMaster/history/20260506/20260506132002-Diff-Config.rsc diff --git a/MikroMaster/20260506/20260506132002-Binary.backup b/MikroMaster/20260506/20260506132002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..7e0796f4ea23d092b9ae324dd83f6588a0338256 GIT binary patch literal 279058 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

ddpQ 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 RlrkSi+BG})vSKa_*4FkCLahJ* literal 0 HcmV?d00001 diff --git a/MikroMaster/20260506/20260506132002-Config.rsc b/MikroMaster/20260506/20260506132002-Config.rsc new file mode 100644 index 0000000..2045007 --- /dev/null +++ b/MikroMaster/20260506/20260506132002-Config.rsc @@ -0,0 +1,4677 @@ +# 2026-05-06 13:20:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global 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" \ + 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 disabled=yes dst-port=22 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=22 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +add interface=WG type=external +add interface=wlan2 type=internal +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260506/20260506132002-Diff-Config.rsc b/MikroMaster/history/20260506/20260506132002-Diff-Config.rsc new file mode 100644 index 0000000..54ad68b --- /dev/null +++ b/MikroMaster/history/20260506/20260506132002-Diff-Config.rsc @@ -0,0 +1,6 @@ +4461,4462c4461,4462 +< add action=dst-nat chain=dstnat disabled=yes dst-port=22 in-interface=\ +< "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=22 +--- +> add action=dst-nat chain=dstnat dst-port=22 in-interface="ether1 - Unet" \ +> protocol=tcp to-addresses=10.30.30.33 to-ports=22 -- 2.52.0