From 012948b6739f5b951e0c608b95d92e07b26120ec Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 17:01:04 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 17:01:04. --- .../20260504/20260504170002-Binary.backup | Bin 0 -> 262171 bytes .../20260504/20260504170002-Config.rsc | 4299 +++++++++++++++++ .../20260504/20260504170002-Diff-Config.rsc | 78 + 3 files changed, 4377 insertions(+) create mode 100644 MikroMaster/20260504/20260504170002-Binary.backup create mode 100644 MikroMaster/20260504/20260504170002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504170002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504170002-Binary.backup b/MikroMaster/20260504/20260504170002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..3442a1e592cee34b0114d290d9c1c95b237d2ed3 GIT binary patch literal 262171 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 @AtTE5VUXDX=p~TU7eJoSVL9eePR3%L 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504170002-Config.rsc b/MikroMaster/20260504/20260504170002-Config.rsc new file mode 100644 index 0000000..63246a8 --- /dev/null +++ b/MikroMaster/20260504/20260504170002-Config.rsc @@ -0,0 +1,4299 @@ +# 2026-05-04 17:00:03 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n\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/576/0cc4cd57\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 16: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 GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n\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\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n# !!! 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 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 RunName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local fetchFile [:tostr \$3];\r\ + \n :local CheckCert [:tostr \$4];\r\ + \n :local fetchMode [:tostr \$5];\r\ + \n :local fetchMethod [:tostr \$6];\r\ + \n :local tmpName;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n :log error (\$RunName . \" Failed creating directory: \" . \$DirName\ + \_. \"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"-\ + \" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n :local Url (\$fetchUrl . \$fetchFile);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-value\ + ;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"'\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n :log error (\$RunName . \" The file downloaded from '\" . \$Url . \"\ + ' did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n \r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=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 :log warning (\$0 . \"Downloading certificate failed, trying without\ + .\");\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 :log 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=vados 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\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 :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchLargeFiles \$ScriptName \$FwAddrLis\ + tsUrl \$Index \$CheckCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$FwAddrListsUrl . \$Index);\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: \" . \$FwAddrListsUrl . \$Index);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach FwList in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=ds\ + v options=dsv.plain ] do={\r\ + \n :set FwList (\$FwList->0);\r\ + \n :local FwListName;\r\ + \n :local Delim [ \$FindDelim \$FwList ];\r\ + \n :if (\$Delim = 0) do={ :set FwList \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$FwList);\r\ + \n :if ([ :len \$FwList ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$FwList);\r\ + \n } else={\r\ + \n :set FwListName [ :pick \$FwList 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$FwListName . \" - Ok.\");\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 \$FwAddrLists\ + Url \$FwListName \$CheckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$FwListName . \"', \" . \$I . \". try from: \" . \$FwAddrListsUrl . \ + \$FwListName);\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: \" . \$FwAddrListsUrl . \$FwListName);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$FwListName . \"' from: \" \ + . \$FwAddrListsUrl . \$FwListName);\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 ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + {\r\ + \n :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={\r\ + \n :log error (\$ScriptName . \" Failed parsing address: \" . \$Lin\ + e->0);\r\ + \n }\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/20260504170002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504170002-Diff-Config.rsc new file mode 100644 index 0000000..f4905d3 --- /dev/null +++ b/MikroMaster/history/20260504/20260504170002-Diff-Config.rsc @@ -0,0 +1,78 @@ +937c937 +< \n:global CommitId \"main/576/0cc4cd57\";\r\ +--- +> \n:global CommitId \"main/568/5c207d26\";\r\ +940c940 +< r: root, in 16:45:02 04.05.2026.\";\r\ +--- +> r: root, in 14:55:02 04.05.2026.\";\r\ +2881a2882,2883 +> \n :local FetchMode \"https-only\";\r\ +> \n :local FetchMethod \"get\";\r\ +2888a2891,2892 +> \n :global Grep;\r\ +> \n \r\ +2914a2919,2925 +> \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\ +2936,2941c2947,2954 +< \n :foreach FwList in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=ds\ +< v options=dsv.plain ] do={\r\ +< \n :set FwList (\$FwList->0);\r\ +< \n :local FwListName;\r\ +< \n :local Delim [ \$FindDelim \$FwList ];\r\ +< \n :if (\$Delim = 0) do={ :set FwList \"\"; };\r\ +--- +> \n :foreach FwListName in=[ :deserialize \$tmpIndex delimiter=\"\\n\" fro\ +> m=dsv options=dsv.plain ] do={\r\ +> \n :set FwListName [ :tostr (\$FwListName->0) ];\r\ +> \n# :local FwListName;\r\ +> \n# :local FwListName (\$FwListFile->0);\r\ +> \n# :set FwListName [ \$Grep \$FwListName \"[^0-9a-zA-Z\\\\./:-]\" ];\r\ +> \n# :set FwListName ([ :pick \$FwList 0 [ \$FindDelim \$FwList ] ]);\r\ +> \n# :set FwListName [ \$Grep \$FwListName \"[^0-9a-zA-Z\\\\./:-]\" ];\r\ +2943,2944c2956,2960 +< \_. \$FwList);\r\ +< \n :if ([ :len \$FwList ] = 0) do={\r\ +--- +> \_. \$FwListName);\r\ +> \n\r\ +> \n# :local Delim [ \$FindDelim \$FwListName ];\r\ +> \n# :if (\$Delim = 0) do={ :set FwListName \"\"; };\r\ +> \n :if ([ :len \$FwListName ] = 0) do={\r\ +2946,2948c2962 +< try: \" . \$FwList);\r\ +< \n } else={\r\ +< \n :set FwListName [ :pick \$FwList 0 \$Delim ];\r\ +--- +> try: \" . \$FwListName);\r\ +2950,2951c2964,2966 +< \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ +< \_. \$FwListName . \" - Ok.\");\r\ +--- +> \n# :set FwListName [ :pick \$FwListName 0 \$Delim ];\r\ +> \n\r\ +> \n :local FwListUrl (\$FwAddrListsUrl . \$FwListName);\r\ +2999,3000c3014 +< \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ +< ist->\"cidr\"));\r\ +--- +> \n :set Address [ :pick \$Line 0 [ \$FindDelim \$Line ] ];\r\ +3018,3019c3032 +< {\r\ +< \n :set (\$IPv4Addresses->\$Branch) ({}) };\r\ +--- +> { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ +3049,3052c3062,3063 +< \n } on-error={\r\ +< \n :log error (\$ScriptName . \" Failed parsing address: \" . \$Lin\ +< e->0);\r\ +< \n }\r\ +--- +> \n } on-error={:log error (\$ScriptName . \" Failed parsing address: \ +> \" . \$Line->0);}\r\ -- 2.52.0