From 4671e0e4b10582cb7200328ae64e267b3f3d61bb Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 12:21:23 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 12:21:23. --- .../20260504/20260504122002-Binary.backup | Bin 0 -> 261836 bytes .../20260504/20260504122002-Config.rsc | 4288 +++++++++++++++++ .../20260504/20260504122002-Diff-Config.rsc | 58 + 3 files changed, 4346 insertions(+) create mode 100644 MikroMaster/20260504/20260504122002-Binary.backup create mode 100644 MikroMaster/20260504/20260504122002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504122002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504122002-Binary.backup b/MikroMaster/20260504/20260504122002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..24f737d041c85abf59e6e070954bdcb498c29fea GIT binary patch literal 261836 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

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