From bfd8324564c36594e0fb30226ad1b50cd1c2b1f4 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 13:01:02 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 13:01:02. --- .../20260504/20260504130002-Binary.backup | Bin 0 -> 261862 bytes .../20260504/20260504130002-Config.rsc | 4291 +++++++++++++++++ .../20260504/20260504130002-Diff-Config.rsc | 51 + 3 files changed, 4342 insertions(+) create mode 100644 MikroMaster/20260504/20260504130002-Binary.backup create mode 100644 MikroMaster/20260504/20260504130002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504130002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504130002-Binary.backup b/MikroMaster/20260504/20260504130002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..a7d98a778ba0037d3bd38f6932694f34ee8bbfff GIT binary patch literal 261862 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

|G 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%0D|LZ3T{1vC;|Ep(08H9e5J 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

JD-8j&i@w_GWyS=f@UEN3(}h%aA|mUin6`Dr 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 XmFTYZL6un?c7GmH@9ljB#47tjdISrs literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504130002-Config.rsc b/MikroMaster/20260504/20260504130002-Config.rsc new file mode 100644 index 0000000..6be2568 --- /dev/null +++ b/MikroMaster/20260504/20260504130002-Config.rsc @@ -0,0 +1,4291 @@ +# 2026-05-04 13:00:04 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\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/555/40c9fb70\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 12:45:02 04.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 GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\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 ExitError;\r\ + \n:global ExitOnError;\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 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\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n:global FetchLargeFiles;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n\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 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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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 /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 :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\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 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 [ :len\ + \_\$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 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: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 ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n :log debug (\$0 . \"Validation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\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 ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\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 \$fetchUrl dst-path=\$File\ + Name \\\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 :log error (\$0 . \" Failed downloading from \" . \$fetchUrl . \" - \ + \" . \$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 (\$0 . \"The file downloaded from \" . \$fetchUrl . \" di\ + d 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# \$RmFile \$FileName;\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\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# 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: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" +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 FwAddrListsDirName (\"fw-addr-lists.d/\" . [ /system identity g\ + et name ] . \"/\");\r\ + \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \$FwAddrListsDirName);\r\ + \n :local Index \"index.lst\";\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n :local FetchMode \"https-only\";\r\ + \n :local FetchMethod \"get\";\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchLargeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n\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 ] - 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 :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ + \n message=(\"\\\$LogPrint: The message is already in log, scripting \ + subsystem may have crashed before!\") ] ] > 0) do={\r\ + \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ + , possibly caused by us. Delaying!\");\r\ + \n :delay 5m;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local tmpIndex false;\r\ + \n :local IndexUrl (\$FwAddrListsUrl . \$Index);\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchLargeFiles \$ScriptName \$IndexUrl \ + \$CheckCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$IndexUrl);\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: \" . \$IndexUrl);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach FwListFile in=[ :deserialize \$tmpIndex delimiter=\"\\n\" fro\ + m=dsv options=dsv.plain ] do={\r\ + \n :local FwListName (\$FwListFile->0);\r\ + \n :local Delim [ \$FindDelim \$FwListName ];\r\ + \n :if (\$Delim = 0) do={ :set FwListName \"\"; };\r\ + \n :if ([ :len \$FwListName ] = 0) do={ :error true; }\r\ + \n :set FwListName [ :pick \$FwListName 0 \$Delim ];\r\ + \n\r\ + \n :local FwListUrl (\$FwAddrListsUrl . \$FwListName);\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 \$FwAddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchLargeFiles \$ScriptName \$FwListUrl t\ + rue \$FetchMode ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$FwListName . \"', \" . \$I . \". try from: \" . \$FwListUrl);\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 '\" . \ + \$FwListName . \"' from: \" . \$FwListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$FwListName . \"' from: \" \ + . \$FwListUrl);\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 Delim [ \$FindDelim \$Line ];\r\ + \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ + \n :if ([ :len \$Line ] = 0) do={ :error true; }\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 ] ];\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 :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ + \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={:log error (\$ScriptName . \" Failed parsing address: \ + \" . \$Line->0);}\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName 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 debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' 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 debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\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=\$FwListName 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 debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' 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 debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\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 debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName 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 IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\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 '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\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" +/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 +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +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 +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +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 +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=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,dns,www,api,reverse-proxy" crl-store=system +/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.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes 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 interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/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=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" 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=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/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 disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +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 graphs-plain=no rest-plain=no webfig-plain=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 +/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 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 +/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/20260504/20260504130002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504130002-Diff-Config.rsc new file mode 100644 index 0000000..f708bc3 --- /dev/null +++ b/MikroMaster/history/20260504/20260504130002-Diff-Config.rsc @@ -0,0 +1,51 @@ +937c937 +< \n:global CommitId \"main/555/40c9fb70\";\r\ +--- +> \n:global CommitId \"main/554/f4442323\";\r\ +940c940 +< r: root, in 12:45:02 04.05.2026.\";\r\ +--- +> r: root, in 12:20:03 04.05.2026.\";\r\ +2869,2872c2869,2870 +< \n :local FwAddrListsDirName (\"fw-addr-lists.d/\" . [ /system identity g\ +< et name ] . \"/\");\r\ +< \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \$FwAddrListsDirName);\r\ +< \n :local Index \"index.lst\";\r\ +--- +> \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ +> \n :local FwAddrListsIndexUrl (\$FwAddrListsUrl . \"index\");\r\ +2920,2921c2918 +< \n :local tmpIndex false;\r\ +< \n :local IndexUrl (\$FwAddrListsUrl . \$Index);\r\ +--- +> \n :local FwAddrListsIndex false;\r\ +2924,2927c2921,2924 +< \n :if (\$tmpIndex = false) do={\r\ +< \n :set tmpIndex [ :tolf [ \$FetchLargeFiles \$ScriptName \$IndexUrl \ +< \$CheckCerts ] ];\r\ +< \n :if (\$tmpIndex = false && \$I < 5) do={\r\ +--- +> \n :if (\$FwAddrListsIndex = false) do={\r\ +> \n :set FwAddrListsIndex [ :tolf [ \$FetchLargeFiles \$ScriptName \$F\ +> wAddrListsIndexUrl \$CheckCerts ] ];\r\ +> \n :if (\$FwAddrListsIndex = false && \$I < 5) do={\r\ +2929c2926 +< index, \" . \$I . \". try from: \" . \$IndexUrl);\r\ +--- +> index, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\r\ +2934c2931 +< \n :if (\$tmpIndex = false) do={\r\ +--- +> \n :if (\$FwAddrListsIndex = false) do={\r\ +2936,2937c2933,2934 +< x from: \" . \$IndexUrl);\r\ +< \n :set tmpIndex \"\";\r\ +--- +> x from: \" . \$FwAddrListsIndexUrl);\r\ +> \n :set FwAddrListsIndex \"\";\r\ +2940,2941c2937,2938 +< \n :foreach FwListFile in=[ :deserialize \$tmpIndex delimiter=\"\\n\" fro\ +< m=dsv options=dsv.plain ] do={\r\ +--- +> \n :foreach FwListFile in=[ :deserialize \$FwAddrListsIndex delimiter=\"\ +> \\n\" from=dsv options=dsv.plain ] do={\r\ -- 2.52.0