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