From 020b6be2e0049ec896a68ff97b71828d56d71567 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 09:20:35 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 09:20:35. --- .../20260504/20260504092002-Binary.backup | Bin 0 -> 253454 bytes .../20260504/20260504092002-Config.rsc | 4016 +++++++++++++++++ .../20260504/20260504092002-Diff-Config.rsc | 541 +++ 3 files changed, 4557 insertions(+) create mode 100644 MikroMaster/20260504/20260504092002-Binary.backup create mode 100644 MikroMaster/20260504/20260504092002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504092002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504092002-Binary.backup b/MikroMaster/20260504/20260504092002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5b5321bc697a068f8228c1a24951882dc743b0f9 GIT binary patch literal 253454 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

3`N$G9C?C!c3 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

r7NE#Aaz8$et-i-ZB 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504092002-Config.rsc b/MikroMaster/20260504/20260504092002-Config.rsc new file mode 100644 index 0000000..b290fcc --- /dev/null +++ b/MikroMaster/20260504/20260504092002-Config.rsc @@ -0,0 +1,4016 @@ +# 2026-05-04 09:20:03 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add 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\ + \n# RouterOS script: AM-GglobalFunc\ + \n# Script comment: Global functions\ + \n# Copyright (c) 2005-2026 Vados \ + \n#\ + \n#\ + \n# requires RouterOS, version=7.19\ + \n# requires device-mode, fetch, scheduler\ + \n:local ExitOK false;\ + \n:local ScriptName [ :jobname ];\ + \n#:global checkRunJob \$SriptName;\ + \n#:global fixCRLF;\ + \n#:if (\$fixCRLF != false) do={\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\ + \n#}\ + \n:global GlobalFuncReady false;\ + \n\ + \n# Git commit id & info, expected configuration version\ + \n:global CommitId \"main/532/43b89fd9\";\ + \n:global CommitTAG \"unknown\";\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:00:03 04.05.2026.\";\ + \n\ + \n# The variables are received right here.\ + \n:global GlobalConfVersion 138;\ + \n\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\ + \n\ + \n:global Identity [/system/identity/get name];\ + \n:global IdentityShort [:pick \$Identity 0 18];\ + \n\ + \n:global devBoardName [/system/resource/get board-name];\ + \n:global devMode [/system/device-mode/get mode];\ + \n:global devCurArch [/system/resource/get architecture-name];\ + \n:global devCurVersion [/system/resource/get version];\ + \n\ + \n# Variables defined in AM-GlobalConfig.rsc\ + \n:global TerminalColorOutput;\ + \n:global CommentsInScripts;\ + \n:global DetectIpAddrDefault;\ + \n:global DetectIpAddrFallback;\ + \n:global updateChannel;\ + \n:global Domain;\ + \n:global EmailGeneralTo;\ + \n:global BackupAndUpdateMode;\ + \n\ + \n# Single functions, without nested functions.\ + \n:global GlobalEnvRemove;\ + \n:global MiniDateTimeStamp;\ + \n\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\ + \n:global LogPrint;\ + \n\ + \n# DeviceInfo and Updates\ + \n:global IsCheckUpdates;\ + \n:global WaitCheckUpdates;\ + \n:global GetPubIp;\ + \n\ + \n:global GetArrDeviceInfo;\ + \n:global WaitArrDeviceInfo;\ + \n\ + \n:global devModel;\ + \n:global devRunningMode;\ + \n\ + \n:global devRbRevision;\ + \n:global devRbSerialNumber;\ + \n:global devRbVerAvail;\ + \n\ + \n:global runningChannelVersion;\ + \n:global runningChannel;\ + \n:global runningVersion;\ + \n\ + \n:global devBuildTime;\ + \n:global ROsVerAvail;\ + \n:global PkgUpdStatus;\ + \n:global currentUpdateChannel;\ + \n\ + \n:global ScriptInstallUpdate;\ + \n\ + \n:global DeviceInfo;\ + \n\ + \n:global OldMode;\ + \n\ + \n:global ParseKeyValueStore;\ + \n:global RandomDelay;\ + \n:global GetRandomNumber;\ + \n:global EscapeForRegEx;\ + \n:global ExitError;\ + \n:global ExitOnError;\ + \n:global CharacterMultiply;\ + \n:global CharacterReplace;\ + \n:global CleanFilePath;\ + \n:global CleanName;\ + \n\ + \n:global CommitBrief;\ + \n\ + \n:global EitherOr;\ + \n:global FormatLine;\ + \n:global GetRandom20CharAlNum;\ + \n:global Grep;\ + \n:global IfThenElse;\ + \n:global MAX;\ + \n:global MIN;\ + \n:global HumanReadableNum;\ + \n\ + \n:global IsFullyConnected;\ + \n:global IsDNSResolving;\ + \n:global IsTimeSync;\ + \n:global IsTimeSyncCached;\ + \n:global IsTimeSyncResetNtp;\ + \n\ + \n:global WaitDNSResolving;\ + \n:global WaitFullyConnected;\ + \n:global WaitTimeSync;\ + \n:global MkDir;\ + \n:global RmDir;\ + \n:global RmFile;\ + \n:global FileGet;\ + \n:global Unix2Dos;\ + \n:global UrlEncode;\ + \n:global WaitForFile;\ + \n:global ScriptLock;\ + \n:global SendTelegram;\ + \n:global NotificationFunctions;\ + \n:global SendNotification;\ + \n:global SendNotification2;\ + \n:global SymbolForNotification;\ + \n:global SymbolByUnicodeName;\ + \n:global ValidateSyntax;\ + \n:global CheckSumsVerify;\ + \n:global GlobalConfChanges;\ + \n:global GlobalConfMigration;\ + \n:global VersionToNum;\ + \n:global RequiredRouterOS;\ + \n\ + \n:global FetchHuge;\ + \n:global FetchUserAgentStr;\ + \n:global CertificateAvailable;\ + \n:global CertificateDownload;\ + \n:global CertificateNameByCN;\ + \n:global CharacterMultiply;\ + \n:global FetchLargeFiles;\ + \n:global InspectVar;\ + \n:global InspectVarRet;\ + \n:global ParseCustom;\ + \n\ + \n:set IsCheckUpdates do={\ + \n :local isInfo [:tobool \$1];\ + \n :global LogPrint;\ + \n :global updateChannel;\ + \n :global PkgUpdStatus;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n :global arrDeviceInfo;\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \ + \n :local CurrentChannel [ /system/package/update/get channel ];\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \n }\ + \n\ + \n :local Update [ /system/package/update/get ];\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\ + \n :set currentUpdateChannel \$Channel;\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\ + \n\ + \n\ + \n :local StatusPkg \"undefined\";\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\ + \n delay=300ms max=5 on-error={};\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\ + \n }\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\ + \n :return true;\ + \n } else={\ + \n :return \$PkgUpdStatus;\ + \n }\ + \n}\ + \n\ + \n:set WaitCheckUpdates do={\ + \n :global IsCheckUpdates;\ + \n :global PkgUpdStatus;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n :global arrDeviceInfo;\ + \n\ + \n :local Status \"\";\ + \n :local Update;\ + \n :local WaitCount 0;\ + \n\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\ + \n :return false;\ + \n }\ + \n\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\ + \n :delay 1s;\ + \n :set WaitCount (\$WaitCount + 1);\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\ + \n }\ + \n\ + \n :set Update [ /system/package/update/get ];\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\ + \n :set PkgUpdStatus true;\ + \n } else={\ + \n :set PkgUpdStatus false;\ + \n }\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\ + \n }\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\ + \n\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set WaitArrDeviceInfo do={\ + \n :global GetArrDeviceInfo;\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\ + \n :delay 1s;\ + \n }\ + \n}\ + \n\ + \n:set GetArrDeviceInfo do={\ + \n :global LogPrint;\ + \n :global arrDeviceInfo;\ + \n\ + \n :global devBoardName;\ + \n :global devModel;\ + \n :global devRunning;\ + \n :global devCurArch;\ + \n :global devRbRevision;\ + \n :global devRbSerialNumber;\ + \n :global devBuildTime;\ + \n :global runningChannelVersion;\ + \n :global runningChannel;\ + \n :global runningVersion;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n\ + \n :local DeviceInfo;\ + \n :local Resource [/system/resource/get];\ + \n :local Update [ /system/package/update/get ];\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\ + \n :local RouterBoard;\ + \n :local IsRouterBoard false;\ + \n :local RunningMode \"\";\ + \n\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\ + \n :set runningChannelVersion \$VersionString;\ + \n :set runningVersion \$VersionString;\ + \n :set runningChannel \"\";\ + \n\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\ + \n }\ + \n }\ + \n\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\ + \n :do {\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\ + \n# :set RouterBoard [ /system/routerboard/get ];\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\ + \n :set IsRouterBoard true;\ + \n }\ + \n } on-error={}\ + \n }\ + \n\ + \n :do {\ + \n :set RunningMode [ /system/device-mode/get mode ];\ + \n } on-error={\ + \n :do {\ + \n :set RunningMode [ /system/device-mode/get running ];\ + \n } on-error={\ + \n :set RunningMode \"\";\ + \n }\ + \n }\ + \n :set devRunning \$RunningMode;\ + \n\ + \n :if (\$IsRouterBoard = true) do={\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\ + \n } else={\ + \n :set devModel \$devBoardName;\ + \n :set devRbRevision \"\";\ + \n :set devRbSerialNumber \"\";\ + \n }\ + \n\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\ + \n\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\ + \n\ + \n :set arrDeviceInfo \$DeviceInfo;\ + \n :return \$DeviceInfo;\ + \n}\ + \n\ + \n:set DeviceInfo do={\ + \n :global GetArrDeviceInfo;\ + \n :global GlobalConfVersion;\ + \n :global Identity;\ + \n :global IfThenElse;\ + \n :global FormatLine;\ + \n :global CommitBrief;\ + \n\ + \n :local License [/system/license/get];\ + \n :local Snmp [ /snmp/get ];\ + \n :local Info [ \$GetArrDeviceInfo ];\ + \n\ + \n :if ([ :typeof \$Info ] != \"array\") do={\ + \n :return false;\ + \n }\ + \n\ + \n :return ( \\\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\ + \n \"Hardware:\\n\" . \\\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\ + \n \"RouterOS:\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\ + \n \"RouterOS-Scripts:\\n\" . \\\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\ + \n}\ + \n\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\ + \n:set GetRandom20CharAlNum do={\ + \n :global EitherOr;\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\ + \n}\ + \n\ + \n:global checkRunJob;\ + \n:set checkRunJob do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLock; \ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \ + \n}\ + \n\ + \n:set InspectVar do={\ + \n :global InspectVarRet;\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\ + \n}\ + \n\ + \n:set CommitBrief do={\ + \n :global CommitId;\ + \n :global CommitInfo;\ + \n :if (\$CommitId = \"unknown\") do={\ + \n :return \"unknown\";\ + \n }\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\ + \n}\ + \n\ + \n:set InspectVarRet do={\ + \n :local Input \$1;\ + \n :local Level (0 + [ :tonum \$2 ]);\ + \n :global CharacterReplace;\ + \n :global IfThenElse;\ + \n :global InspectVarRet;\ + \n :local IndentReturn do={\ + \n :local Prefix [ :tostr \$1 ];\ + \n :local Value [ :tostr \$2 ];\ + \n :local Level [ :tonum \$3 ];\ + \n :global CharacterMultiply;\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\ + \n }\ + \n :local TypeOf [ :typeof \$Input ];\ + \n :local Len [ :len \$Input ];\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\ + \n :if (\$TypeOf = \"array\") do={\ + \n :foreach Key,Value in=\$Input do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\ + \n }\ + \n } else={\ + \n :if (\$TypeOf = \"str\") do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\ + \n }\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\ + \n }\ + \n }\ + \n :if (\$TypeOf != \"nothing\") do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\ + \n }\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n# !!! The function is not ready !!!\ + \n:global FetchHttpInfo do={\ + \n :local Mac [ :tostr \$1 ];\ + \n :global CertificateAvailable;\ + \n :global IsMacLocallyAdministered;\ + \n :global LogPrint;\ + \n :local Url \"https://api.macvendors.com/\";\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\ + \n :do {\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\ + \n :error false;\ + \n }\ + \n :local Vendor ([ /tool/fetch \ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\ + \n :return \$Vendor;\ + \n } on-error={\ + \n :onerror Err {\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\ + \n :return \"unknown vendor\";\ + \n }\ + \n}\ + \n\ + \n:set GetPubIp do={\ + \n :global DetectIpAddrDefault;\ + \n :global DetectIpAddrFallback;\ + \n\ + \n :local PubIpAddr false;\ + \n :local Url \$DetectIpAddrDefault;\ + \n :local JobName [ :jobname ];\ + \n\ + \n :do {\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\ + \n } on-error={\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\ + \n :set Url \$DetectIpAddrFallBack;\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\ + \n };\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\ + \n :return \$PubIpAddr;\ + \n}\ + \n\ + \n:set FormatLine do={\ + \n :local Key [ :tostr \$1 ];\ + \n :local Value [ :tostr \$2 ];\ + \n :local Indent [ :tonum \$3 ];\ + \n :local Spaces;\ + \n :local Return \"\";\ + \n :global CharacterMultiply;\ + \n :global EitherOr;\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ParseCustom do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\ + \n :local End [ :tostr \$3 ];\ + \n :local Num [ :tonum \$4 ];\ + \n :local Return;\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\ + \n :set End [:find \$rest \$End];\ + \n :set Return [:pick \$rest 0 \$End];\ + \n }\ + \n:return \$Return;\ + \n}\ + \n\ + \n:set LogPrint do={\ + \n :local Severity [ :tostr \$1 ];\ + \n :local Name [ :tostr \$2 ];\ + \n :local Message [ :tostr \$3 ];\ + \n :global PrintDebug;\ + \n :global PrintDebugOverride;\ + \n :global EitherOr;\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\ + \n :local PrintSeverity do={\ + \n :global TerminalColorOutput;\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\ + \n}\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\ + \n}\ + \n\ + \n# check and download required certificate\ + \n# Description: This function checks if a certificate with given Common N\ + ame is available in the system or not.\ + \n# If not, it tries to download it from repository. It also \ + checks the certificate chain and downloads missing intermediate certificat\ + es if needed.\ + \n# Arguments: \"Common Name\" - the common name of the certificate to che\ + ck\ + \n# \"fetch\" - if the intended use for certificate is \"fetch\ + \", it will check if the certificate is available for fetch option and ret\ + urn true if it is, otherwise it will check other options as well and retur\ + n true if the certificate is available for at least one of the options.\ + \n# \"tls\" - if the intended use for certificate is \"tls\", i\ + t will check if the certificate is available for tls option and return tru\ + e if it is, otherwise it will check other options as well and return true \ + if the certificate is available for at least one of the options.\ + \n# \"all\" - if the intended use is \"all\", it will check all\ + \_options and return true if the certificate is available for at least one\ + \_of the options.\ + \n# \"undefined\" - if the intended use for certificate is not \ + defined, it will check all options and log a warning as well.\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\ + \n:set CertificateAvailable do={\ + \n :local CommonName [ :tostr \$1 ];\ + \n :local UseFor [ :tostr \$2 ];\ + \n\ + \n :global CertificateDownload;\ + \n :global ParseKeyValueStore;\ + \n\ + \n :if ([ :len \$UseFor ] = 0) do={\ + \n :log warning (\$0 . \"The intended use is undefined!\");\ + \n :set UseFor \"undefined\";\ + \n }\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\ + \n [ /certificate/settings/get crl-download ] = true && \\\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\ + \n \"is configured to download certificate CRLs to system!\");\ + \n }\ + \n :if ([ :len \$CommonName ] = 0) do={\ + \n :log warning (\$0 . \"No CommonName given!\");\ + \n :return false;\ + \n }\ + \n :local CertSettings [ /certificate/settings/get ];\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\ + \n :return true;\ + \n }\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\ + \n :return true;\ + \n }\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n# download and import certificate\ + \n# Description: This function downloads a certificate with given Common N\ + ame from repository and imports it to the system.\ + \n# It also checks the certificate chain and downloads missin\ + g intermediate certificates if needed from repository.\ + \n# If the certificate is already available, it does nothing.\ + \n# If the certificate is not available in repository, it att\ + empts to download it from mkcert.org.\ + \n# If it is also not available there, it logs a warning and \ + returns false.\ + \n# If the certificate is downloaded but still not available \ + after import, it removes all certificates with the same Common Name and lo\ + gs a warning, assuming the certificate was imported but not named properly\ + .\ + \n# Or if there are multiple certificates with the same Commo\ + n Name, it does nothing as well, assuming the certificate is already impor\ + ted but not named properly.\ + \n# Usage: \$CertificateDownload \"Common Name\"\ + \n:set CertificateDownload do={\ + \n :local CommonName [ :tostr \$1 ];\ + \n :global ScriptUpdatesBaseUrl;\ + \n :global ScriptUpdatesUrlSuffix;\ + \n :global CertificateNameByCN;\ + \n :global CleanName;\ + \n :global FetchUserAgentStr;\ + \n :global RmFile;\ + \n :global WaitForFile;\ + \n\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \n \"CommonName '\" . \$CommonName . \"'.\");\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\ + \n :do {\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\ + \n dst-path=\$FileName as-value;\ + \n \$WaitForFile \$FileName;\ + \n } on-error={\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\ + \n \"' from repository! Trying fallback to mkcert.org...\");\ + \n :do {\ + \n :local CertSettings [ /certificate/settings/get ];\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \n :return false;\ + \n }\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\ + \n dst-path=\$FileName as-value;\ + \n \$WaitForFile \$FileName;\ + \n :if ([ /file/get \$FileName size ] = 0) do={\ + \n \$RmFile \$FileName;\ + \n :error false;\ + \n }\ + \n } on-error={\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\ + \n :return false;\ + \n }\ + \n }\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\ + \n :delay 1s;\ + \n \$RmFile \$FileName;\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\ + \n :return false;\ + \n }\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n# name a certificate by its common-name\ + \n# Description: Some RouterOS functions require certificate name instead \ + of common-name or fingerprint.\ + \n# This function finds a certificate by common-name, fingerp\ + rint or name and sets its name to a clean version of common-name\ + \n# (only letters, numbers and dashes, other chars are replac\ + ed with dash).\ + \n# If there are multiple certificates with the same common-n\ + ame, it will rename the first one found and log a warning.\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\ + \n:set CertificateNameByCN do={\ + \n :local Match [ :tostr \$1 ];\ + \n :global CleanName;\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\ + \n :if ([ :len \$Cert ] = 0) do={\ + \n :log warning (\$0 .\" No matching certificate found.\");\ + \n :return false;\ + \n }\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\ + \n :return true;\ + \n}\ + \n\ + \n:set CharacterMultiply do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Num [ :tonum \$2 ];\ + \n :if (\$Num = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n\ + \n:set FetchUserAgentStr do={\ + \n :local Caller [ :tostr \$1 ];\ + \n\ + \n :global GlobalScriptsUrl;\ + \n :global CommitBrief;\ + \n :global IfThenElse;\ + \n :local Resource [ /system/resource/get ];\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\ + \n}\ + \n\ + \n:set Grep do={\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\ + \n :local Pattern [ :tostr \$2 ];\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\ + \n :do {\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\ + \n } while=([ :len \$Input ] > 0);\ + \n :return [];\ + \n}\ + \n\ + \n:set HumanReadableNum do={\ + \n :local Input [ :tonum \$1 ];\ + \n :local Base [ :tonum \$2 ];\ + \n :global EitherOr;\ + \n :global IfThenElse;\ + \n :local Prefix \"kMGTPE\";\ + \n :local Pow 1;\ + \n :set Base [ \$EitherOr \$Base 1024 ];\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\ + \n :if (\$Input < \$Base) do={:return \$Input}\ + \n :for I from=0 to=[ :len \$Prefix ] do={\ + \n :set Pow (\$Pow * \$Base);\ + \n :if (\$Input / \$Base < \$Pow) do={\ + \n :set Prefix [ :pick \$Prefix \$I ];\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\ + \n :local Tmp2 (\$Tmp1 / 100);\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\ + \n :return (\$Tmp2 . \".\" . \\\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\ + \n \$Prefix . \$Bin);\ + \n }\ + \n }\ + \n}\ + \n\ + \n:set CleanName do={\ + \n :local Input [ :tostr \$1 ];\ + \n :local Return \"\";\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \ + \n };\ + \n :set Return (\$Return . \$Char)};\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set GetRandomNumber do={\ + \n :global EitherOr;\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \n}\ + \n\ + \n:set RandomDelay do={\ + \n :local Time [ :tonum \$1 ];\ + \n :local Unit [ :tostr \$2 ];\ + \n :global EitherOr;\ + \n :global GetRandomNumber;\ + \n :global MAX;\ + \n :if (\$Time = 0) do={:return false}\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\ + \n}\ + \n\ + \n:set EscapeForRegEx do={\ + \n :local Input [ :tostr \$1 ];\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\ + \n :set Return (\$Return . \$Char);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ExitError do={\ + \n :local ExitOK [ :tostr \$1 ];\ + \n :local Name [ :tostr \$2 ];\ + \n :local Error [ :tostr \$3 ];\ + \n :global IfThenElse;\ + \n :if (\$ExitOK = \"false\") do={\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\ + \n }\ + \n}\ + \n\ + \n:set ExitOnError do={\ + \n :local Name [ :tostr \$1 ];\ + \n :local Error [ :tostr \$2 ];\ + \n :global IfThenElse;\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\ + \n}\ + \n\ + \n:set MiniDateTimeStamp do={\ + \n /system/clock;\ + \n :local vdate [get date];\ + \n :local vtime [get time];\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\ + \n :local M [:tonum \$MM];\ + \n :if (\$vdate ~ \".../../....\") do={\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\ + \n :if (\$M>12) do={:set M (\$M - 12)}\ + \n :set MM [:pick (100 + \$M) 1 3];\ + \n }\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\ + \n :local HH [:pick \$vtime 0 2];\ + \n :local mm [:pick \$vtime 3 5];\ + \n :local ss [:pick \$vtime 6 8];\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \n}\ + \n\ + \n:set WaitForFile do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :local WaitTime [ :totime \$2 ];\ + \n :global CleanFilePath;\ + \n :global EitherOr;\ + \n :global MAX;\ + \n :set FileName [ \$CleanFilePath \$FileName ];\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\ + \n :do {\ + \n :retry {\ + \n /file/get \$FileName;\ + \n :return true;\ + \n } delay=\$Delay max=10;\ + \n } on-error={ }\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\ + \n :do {\ + \n /file/get \$FileName;\ + \n :return true;\ + \n } on-error={ }\ + \n :delay \$Delay;\ + \n :set Delay (\$Delay * 3 / 2);\ + \n }\ + \n :return false;\ + \n}\ + \n\ + \n:set FileGet do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :global WaitForFile;\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\ + \n :local FileVal false;\ + \n :do {:set FileVal [ /file/get \$FileName ];\ + \n } on-error={ }\ + \n :return \$FileVal;\ + \n}\ + \n\ + \n:set RmDir do={\ + \n :local DirName [ :tostr \$1 ];\ + \n :global FileGet;\ + \n :global LogPrint;\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\ + \n :local DirVal [ \$FileGet \$DirName ];\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \n :return true;\ + \n}\ + \n\ + \n:set RmFile do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :global FileGet;\ + \n :global LogPrint;\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\ + \n :local FileVal [ \$FileGet \$FileName ];\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\ + \n :onerror Err {\ + \n /file/remove \$FileName;\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\ + \n :return true;\ + \n}\ + \n\ + \n:set MkDir do={\ + \n :local Path [ :tostr \$1 ];\ + \n :global CleanFilePath;\ + \n :global FileGet;\ + \n :global RmDir;\ + \n :global WaitForFile;\ + \n :global LogPrint;\ + \n :local MkTmpfs do={\ + \n :global WaitForFile;\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\ + \n :if ([ :len \$TmpFs ] = 1) do={\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\ + \n /disk/enable \$TmpFs;\ + \n }\ + \n :return true;\ + \n }\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\ + \n \$RmDir \"tmpfs\";\ + \n :onerror Err {\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\ + \n \$WaitForFile \"tmpfs\";\ + \n } do={\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n }\ + \n :set Path [ \$CleanFilePath \$Path ];\ + \n :if (\$Path = \"\") do={\ + \n :return true;\ + \n }\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\ + \n :local PathVal [ \$FileGet \$Path ];\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\ + \n :return true;\ + \n }\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\ + \n :if ([ \$MkTmpfs ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :onerror Err {\ + \n /file/add type=\"directory\" name=\$Path;\ + \n \$WaitForFile \$Path;\ + \n } do={\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\ + \n :return \$2;\ + \n}\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\ + \n :return \$2;\ + \n}\ + \n\ + \n:set CharacterMultiply do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Num [ :tonum \$2 ];\ + \n :if (\$Num = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set CharacterReplace do={\ + \n :local String [ :tostr \$1 ];\ + \n :local ReplaceFrom [ :tostr \$2 ];\ + \n :local ReplaceWith [ :tostr \$3 ];\ + \n :local Return \"\";\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\ + \n }\ + \n :return (\$Return . \$String);\ + \n}\ + \n\ + \n:set CleanFilePath do={\ + \n :local Path [ :tostr \$1 ];\ + \n :global CharacterReplace;\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\ + \n :return \$Path;\ + \n}\ + \n\ + \n:set IfThenElse do={\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\ + \n :return \$3;\ + \n}\ + \n\ + \n:set EitherOr do={\ + \n :global IfThenElse;\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\ + \n# this works for boolean values, literal ones with parentheses\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\ + \n}\ + \n\ + \n:set ParseKeyValueStore do={\ + \n :local Source \$1;\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\ + \n :do {\ + \n :return [ :deserialize from=json \$Source ];\ + \n } on-error={ }\ + \n } \ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\ + \n :local Result ({});\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\ + \n :if (\$Value=\"true\") do={:set Value true}\ + \n :if (\$Value=\"false\") do={:set Value false}\ + \n :set (\$Result->\$Key) \$Value;\ + \n } else={:set (\$Result->\$KeyValue) true}\ + \n }\ + \n :return \$Result;\ + \n}\ + \n:set RequiredRouterOS do={\ + \n :local Caller [ :tostr \$1 ];\ + \n :local Required [ :tostr \$2 ];\ + \n :local Warn [ :tostr \$3 ];\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global VersionToNum;\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \n :return false;\ + \n }\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\ + \n :if (\$Warn = \"true\") do={\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\ + \n }\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n:set VersionToNum do={\ + \n :local Input [ :tostr \$1 ];\ + \n :local Multi 0x1000000;\ + \n :local Return 0;\ + \n :global CharacterReplace;\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \n }\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\ + \n :local Num [ :tonum \$Value ];\ + \n :if (\$Multi = 0x100) do={\ + \n :if ([ :typeof \$Num ] = \"num\") do={\ + \n :set Return (\$Return + 0xff00);\ + \n :set Multi (\$Multi / 0x100);\ + \n } else={\ + \n :if (\$Value = \"zero\") do={ }\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\ + \n }\ + \n }\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\ + \n :set Multi (\$Multi / 0x100);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n:set ScriptLock do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local WaitMax [ :totime \$2 ];\ + \n :global GetRandom20CharAlNum;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global ScriptLockOrder;\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\ + \n :set ScriptLockOrder ({});\ + \n }\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n }\ + \n :local JobCount do={\ + \n :local Script [ :tostr \$1 ];\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \n }\ + \n :local TicketCount do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLockOrder;\ + \n :local Count 0;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\ + \n }\ + \n :return \$Count;\ + \n }\ + \n :local IsFirstTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Check [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if (\$Ticket = \$Check) do={:return true}\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\ + \n }\ + \n :return false;\ + \n }\ + \n :local AddTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Add [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :while (true) do={\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\ + \n :delay 10ms;\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\ + \n }\ + \n }\ + \n :local RemoveTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Remove [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\ + \n :delay 10ms;\ + \n }\ + \n }\ + \n }\ + \n :local CleanupTickets do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\ + \n }\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n }\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\ + \n :error false;\ + \n }\ + \n :if ([ \$JobCount \$Script ] = 0) do={\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\ + \n :error false;\ + \n }\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n /system/script/job/remove [ find where script=\$Script ];\ + \n }\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\ + \n \$AddTicket \$Script \$MyTicket;\ + \n :local WaitInterval (\$WaitMax / 20);\ + \n :local WaitTime \$WaitMax;\ + \n :while (\$WaitTime > 0 && \\\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\ + \n :delay \$WaitInterval;\ + \n }\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\ + \n \$RemoveTicket \$Script \$MyTicket;\ + \n \$CleanupTickets \$Script;\ + \n :return true;\ + \n }\ + \n \$RemoveTicket \$Script \$MyTicket;\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\ + \n :return false;\ + \n}\ + \n:set SendNotification do={ :onerror Err {\ + \n :global SendNotification2;\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\ + \n}\ + \n:set SendNotification2 do={\ + \n :local Notification \$1;\ + \n :global NotificationFunctions;\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\ + \n }\ + \n}\ + \n:set SymbolByUnicodeName do={\ + \n :local Name [ :tostr \$1 ];\ + \n :global EitherOr;\ + \n :global LogPrint;\ + \n :global SymbolsExtra;\ + \n :local Symbols ({\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\ + \n \"cloud\"=\"\\E2\\98\\81\";\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\ + \n \"gear\"=\"\\E2\\9A\\99\";\ + \n \"heart\"=\"\\E2\\99\\A5\";\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\ + \n \"information\"=\"\\E2\\84\\B9\";\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\ + \n \"scissors\"=\"\\E2\\9C\\82\";\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\ + \n \"star\"=\"\\E2\\AD\\90\";\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\ + \n }, \$SymbolsExtra);\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\ + \n :local Special {\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\ + \n :return \"\";\ + \n }\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\ + \n}\ + \n:set SymbolForNotification do={\ + \n :global NotificationsWithSymbols;\ + \n :global SymbolByUnicodeName;\ + \n :global IfThenElse;\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\ + \n :local Return \"\";\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\ + \n :return (\$Return . \" \");\ + \n}\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\ + \n:set UrlEncode do={\ + \n :local Input [ :tostr \$1 ];\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :local Replace [ :find \$Chars \$Char ];\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\ + \n :set Return (\$Return . \$Char);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n:set ValidateSyntax do={\ + \n :local Code [ :tostr \$1 ];\ + \n :global LogPrint;\ + \n :onerror Err {\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\ + \n } do={\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n:set IsDNSResolving do={\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\ + \n :return true;\ + \n}\ + \n:set IsFullyConnected do={\ + \n :global IsDNSResolving;\ + \n :global IsTimeSync;\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\ + \n :return true;\ + \n}\ + \n:set IsTimeSync do={\ + \n :global IsTimeSyncCached;\ + \n :global IsTimeSyncResetNtp;\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\ + \n :set IsTimeSyncCached true;\ + \n :return true;\ + \n }\ + \n :local Uptime [ /system/resource/get uptime ];\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\ + \n :set IsTimeSyncResetNtp \$Uptime;\ + \n }\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\ + \n :set IsTimeSyncResetNtp \$Uptime;\ + \n /system/ntp/client/set enabled=no;\ + \n :delay 20ms;\ + \n /system/ntp/client/set enabled=yes;\ + \n :return false;\ + \n }\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\ + \n :return true;\ + \n }\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\ + \n :set IsTimeSyncCached true;\ + \n :return true;\ + \n }\ + \n :return false;\ + \n }\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \n :return true;\ + \n}\ + \n\ + \n# read parts of a large file\ + \n:set FetchLargeFiles do={\ + \n :local FetchLargeScript [:tostr \$1];\ + \n :local fetchUrl [:tostr \$2];\ + \n :local CheckCert [:tostr \$3];\ + \n :local fetchMode [:tostr \$4];\ + \n :local fetchMethod [:tostr \$5];\ + \n :local FetchString \"undefined\";\ + \n \ + \n :global CleanName;\ + \n :global FetchUserAgentStr;\ + \n :global GetRandom20CharAlNum;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global MkDir;\ + \n :global RmDir;\ + \n :global RmFile;\ + \n :global WaitForFile;\ + \n\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\ + \n \ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$FetchLargeScript ]);\ + \n :if ([ \$MkDir \$DirName ] = false) do={\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\ + \n :return false;\ + \n }\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScript ] }) as-value\ + ;\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\ + \n :onerror Err {\ + \n :set FetchString (\"/tool/fetch \" . \\\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScript ] })\ + \_as-value);\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\ + \n :put [\$FetchString];\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$FetchLargeScript ] }) as-value];\ + \n } do={\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\ + \n \$RmFile \$FileName;\ + \n }\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\ + \n \$RmDir \$DirName;\ + \n :return false;\ + \n }\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\ + \n :return false;\ + \n }\ + \n :local FileSize [ /file/get \$FileName size ];\ + \n :local Return \"\";\ + \n :local VarSize 0;\ + \n :while (\$VarSize != \$FileSize) do={\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\ + \n :set FileSize [ /file/get \$FileName size ];\ + \n :set VarSize [ :len \$Return ];\ + \n :if (\$VarSize > \$FileSize) do={\ + \n :delay 100ms;\ + \n }\ + \n }\ + \n \$RmDir \$DirName;\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ScriptInstallUpdate do={ :onerror Err {\ + \n :local Scripts [ :toarray \$1 ];\ + \n :local NewComment [ :tostr \$2 ];\ + \n :global InitSetup;\ + \n\ + \n :global CommitId;\ + \n :global ScriptUpdatesCRLF;\ + \n :global GlobalConfVersion;\ + \n :global Identity;\ + \n :global CertificateAvailable;\ + \n :global CheckSumsVerify;\ + \n :global GlobalScriptsUrl;\ + \n :global SumsDirAndFileName;\ + \n :global GlobalScriptsUrlSuffix;\ + \n :global EitherOr;\ + \n :global FetchUserAgentStr;\ + \n :global Grep;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global ParseKeyValueStore;\ + \n :global RequiredRouterOS;\ + \n :global SendNotification2;\ + \n :global SymbolForNotification;\ + \n :global ValidateSyntax;\ + \n :global CommentsInScripts;\ + \n\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\ + \n }\ + \n\ + \n :foreach Script in=\$Scripts do={\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\ + \n }\ + \n }\ + \n\ + \n :local CommitIdBefore \$CommitId;\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\ + \n :local ReloadGlobal false;\ + \n :local DeviceMode [ /system/device-mode/get ];\ + \n\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :local CheckSums ({});\ + \n :do {\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\ + \n }\ + \n\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\ + \n :local ScriptVal [ /system/script/get \$Script ];\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\ + \n :local SourceNew;\ + \n\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\ + \n }\ + \n }\ + \n :do {\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\ + \n :error true;\ + \n }\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\ + \n :error true;\ + \n }\ + \n }\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\ + \n }\ + \n }\ + \n :onerror Err {\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\ + \n :if (\$Result->\"status\" = \"finished\") do={\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\ + \n } \ + \n } do={\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\ + \n :error false;\ + \n }\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\ + \n /system/script/remove \$Script;\ + \n :error false;\ + \n }\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\ + \n [ :len \$CheckSum ] = 0) do={\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\ + \n }\ + \n }\ + \n :error false;\ + \n }\ + \n\ + \n :if ([ :len \$SourceNew ] = 0) do={\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\ + \n :error false;\ + \n }\ + \n\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\ + \n if (\$ScriptUpdatesCRLF = false) do={\ + \n :put [ :tolf \$SourceNew ];\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\ + \n }\ + \n :error false;\ + \n }\ + \n }\ + \n\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\ + \n :error false;\ + \n }\ + \n\ + \n :if (\$CommentsInScripts = true) do={\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\ + \n :if ([ :len \$CommentLine ] = 0) do={\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\ + \n :error false;\ + \n } else={\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\ + \n } else={\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\ + \n :error false;\ + \n }\ + \n } \ + \n }\ + \n\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\ + \n :error false;\ + \n }\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\ + \n :local MissingDM ({});\ + \n :foreach Feature,Value in=\$RequiredDM do={\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\ + \n :set MissingDM (\$MissingDM, \$Feature);\ + \n }\ + \n }\ + \n :if ([ :len \$MissingDM ] > 0) do={\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\ + \n :error false;\ + \n }\ + \n\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\ + \n :error false;\ + \n }\ + \n \ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\ + \n\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\ + \n :set ReloadGlobal true;\ + \n }\ + \n } on-error={ }\ + \n }\ + \n :if (\$ReloadGlobal = true) do={\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\ + \n :onerror Err {\ + \n :global InitSetup (a);\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\ + \n }\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\ + \n \". Installed an older version\?\");\ + \n }\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\ + \n :global GlobalConfChanges;\ + \n :global GlobalConfMigration;\ + \n :local ChangeLogCode;\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\ + \n :onerror Err {\ + \n [ :parse \$ChangeLogCode ];\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\ + \n }\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\ + \n :do {\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\ + \n :error false;\ + \n }\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\ + \n :error false}\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\ + \n :onerror Err {\ + \n [ :parse \$Migration ];\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\ + \n } on-error={ }\ + \n }\ + \n }\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\ + \n \$LogPrint info \$0 (\$NotificationMessage);\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\ + \n }\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\ + \n\ + \n :set GlobalConfChanges;\ + \n :set GlobalConfMigration;\ + \n }\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\ + \n}\ + \n\ + \n# Add and fix global scheduler\ + \n:put \"Add or/and fix Global scheduler...\";\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\ + \n:local Comment \"Every Day Set Global Environment Variables\";\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\ + \n}\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\ + \n}\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\ + \n}\ + \n# Add Update Script scheduler\ + \n:put \"Add or/and fix Update Script scheduler\";\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \n:set Comment \"Every Day Check For Update Scripts\";\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\ + \n}\ + \n\ + \n#:local Resource [ /system/resource/get ];\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\ + \n\ + \n:onerror Err {\ + \n :global GlobalConfReady;\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\ + \n\ + \n# signal we are ready\ + \n:set GlobalFuncReady true;\ + \n:set ExitOK true;\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\ + \n\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\ + \n# log the successful load of the script, or an error if it failed\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\ + \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/20260504092002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504092002-Diff-Config.rsc new file mode 100644 index 0000000..e9025c0 --- /dev/null +++ b/MikroMaster/history/20260504/20260504092002-Diff-Config.rsc @@ -0,0 +1,541 @@ +512,513c512 +< add comment="Script for setup routeros script system" \ +< dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ +--- +> add dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ +725,755c724,753 +< 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\ +--- +> add 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\ +> \n# RouterOS script: AM-GlobalConfig\ +> \n# Script comment: Global Config Script\ +> \n# Copyright (c) 2007-2026 Vados \ +> \n#\ +> \n#\ +> \n# Warning: Dont touch this line!\ +> \n:global Identity [ /system identity get name ];\ +> \n:global GlobalConfReady false;\ +> \n#\ +> \n#\ +> \n# Global Url For Amster scripts to fetch\ +> \n# most be defined in AM-Init-Script or AM-setup scripts\ +> \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ +> \n:global ScriptsUrlSuffix \"\";\ +> \n:global CheckSumsVerify true;\ +> \n\ +> \n:global ScriptUpdatesCRLF true;\ +> \n:global CommentsInScripts true;\ +> \n\ +> \n# Debug output:\ +> \n:global PrintDebug true; #false;\ +> \n\ +> \n# Debug output for specific script:\ +> \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ +> \n\ +> \n# Debug logs\ +> \n# Other actions (disk, email, remote or support) can be used as well.\ +757,766c755,764 +< 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\ +--- +> eworm.de/main/DEBUG.html#debug-output).\ +> \n#/system/logging/add topics=script,debug action=memory;\ +> \n\ +> \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ +> \n:global Domain \"WORKGROUP\";\ +> \n\ +> \n:global EmailGeneralTo \"vados@vados.ru\";\ +> \n#:global EmailGeneralCc \"\";\ +> \n\ +> \n# \$ScriptInstallUpdate mod/notification-telegram\ +768,771c766,769 +< \";\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:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ +> \n# Use this to send notifications to a specific topic in group.\ +> \n#:global TelegramThreadId \"30\";\ +773,796c771,794 +< !)\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# or user names. Groups allow to chat with devices simultaneously.\ +> \n:global TelegramChatIdsTrusted {\ +> \n \"454403445\"\ +> \n \"-1003631309063\"\ +> \n \"-5124482807\"\ +> \n \"1087968824\";\ +> \n};\ +> \n# \"-5294757340\";\ +> \n\ +> \n:global TelegramChatGroups \"(all)\";\ +> \n#:global TelegramChatGroups \"(all|home|office)\";\ +> \n\ +> \n:global NotificationFunctions {\ +> \n \"email\"\ +> \n \"telegram\";\ +> \n};\ +> \n# Toggle this to disable symbols in notifications.\ +> \n:global NotificationsWithSymbols true;\ +> \n:global TerminalColorOutput true;\ +> \n\ +> \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ +> \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ +> \n\ +798,800c796,798 +< ent\r\ +< \n:global updateChannel \"stable\";\r\ +< \n\r\ +--- +> ent\ +> \n:global updateChannel \"stable\";\ +> \n\ +802,816c800,814 +< \");\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:global CertRenewTime 2w;\ +> \n:global CertRenewPass {\ +> \n \"\";\ +> \n# \"v3ry-s3cr3t\";\ +> \n# \"4n0th3r-s3cr3t\";\ +> \n};\ +> \n:global CertWarnTime 1w;\ +> \n:global CertIssuedExportPass {\ +> \n \"\";\ +> \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ +> \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ +> \n};\ +> \n\ +> \n# Script BackupAndUpdate mode, possible values: backup,\ +818c816 +< n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ +--- +> n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ +820c818 +< \_(ignores `forceBackup`)\r\ +--- +> \_(ignores `forceBackup`)\ +822,880c820,878 +< \_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\ +--- +> \_without updates\ +> \n# osnotify - Set `forceBackup` to always create backups on every run\ +> \n:global DevInfoIncludeIP true;\ +> \n:global BackupAndUpdateMode \"osnotify\"\ +> \n\ +> \n:global forceBackup true;\ +> \n:global BackupPassword \"Peskar55\";\ +> \n\ +> \n# SFTP Backup Variables\ +> \n:global BackupRandomDelay 0;\ +> \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ +> \n:global BackupUploadUser \$Identity;\ +> \n:global BackupUploadPass \"root.mnuc.backuper\";\ +> \n\ +> \n:global BackupSendBinary true;\ +> \n:global BackupSendExport true;\ +> \n:global BackupSendGlobalConfig true;\ +> \n:global BackupSendScripts true;\ +> \n\ +> \n# Remove local file after uploading if no errors\ +> \n:global BackupRmLocal true;\ +> \n\ +> \n# Local Backups Root Directory \ +> \n:global BackupLocalRoot \"tmpfs\";\ +> \n\ +> \n# Encrypt Backup\ +> \n:global BackupEncrypt true;\ +> \n\ +> \n# Sensitive information in Backups\ +> \n:global BackupSens true;\ +> \n\ +> \n# User Export\ +> \n:global BackupUser true;\ +> \n\ +> \n# License Export (not for CHR, will silently skip)\ +> \n:global BackupLicense false;\ +> \n\ +> \n# SSH Keys\ +> \n:global BackupSshKeys true;\ +> \n\ +> \n# Certificate Export\ +> \n:global BackupCerts true;\ +> \n\ +> \n# Certificate Password\ +> \n:global BackupCertsPasswd \"\";\ +> \n\ +> \n# User-Manager Export\ +> \n:global BackupUserMan false;\ +> \n\ +> \n# The Dude Export\ +> \n:global BackupDude false;\ +> \n\ +> \n# User Files to export, comma-separated string or array of strings\ +> \n# User Files are not removed on backup\ +> \n# Any directory paths will be removed (/ -> _) on remote file\ +> \n# Nonpresent files are silently skipped\ +> \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ +> \n\ +> \n# load functions and any custom scripts\ +882c880 +< erlay\" ], \\\r\ +--- +> erlay\" ], \\\ +884,885c882,883 +< verlay\\\\.d/.\" ]\r\ +< \n#\r\ +--- +> verlay\\\\.d/.\" ]\ +> \n#\ +888,891c886,888 +< \r\ +< \n# :onerror Err {\r\ +< \n# /system/script/run \$Script;\r\ +< \n# } do={\r\ +--- +> \n# :onerror Err {\ +> \n# /system/script/run \$Script;\ +> \n# } do={\ +893,897c890,894 +< \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ +< \n# }\r\ +< \n#}\r\ +< \n#:log info \"\\ndevMode = \$devMode\";\r\ +< \n#:log info \"\\ndevRunning = \$devRunning\";\r\ +--- +> \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ +> \n# }\ +> \n#}\ +> \n#:log info \"\\ndevMode = \$devMode\";\ +> \n#:log info \"\\ndevRunning = \$devRunning\";\ +899,902c896,899 +< GlobalRUN\\r\?\\n\" ] do={\r\ +< \n :onerror Err {\r\ +< \n /system/script/run \$Script;\r\ +< \n } do={\r\ +--- +> GlobalRUN\\r\?\\n\" ] do={\ +> \n :onerror Err {\ +> \n /system/script/run \$Script;\ +> \n } do={\ +904,910c901,907 +< ] . \" 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\ +--- +> ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ +> \n }\ +> \n}\ +> \n\ +> \n# signal we are ready\ +> \n:set GlobalConfReady true;\ +> \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ +936c933 +< \n:global CommitId \"main/532/43b89fd9\";\ +--- +> \n:global CommitId \"main/529/575f9924\";\ +939c936 +< r: root, in 09:00:03 04.05.2026.\";\ +--- +> r: root, in 08:35:02 04.05.2026.\";\ +1052c1049 +< \n\ +--- +> \n:global FetchLargeFiles;\ +1059c1056 +< \n:global FetchLargeFiles;\ +--- +> \n\ +1745a1743,1805 +> \n# fetch huge data to file, read in chunks\ +> \n:set FetchHuge do={\ +> \n :local FetchScript [ :tostr \$1 ];\ +> \n :local Url [ :tostr \$2 ];\ +> \n :local CheckCert [ :tostr \$3 ];\ +> \n\ +> \n :global CleanName;\ +> \n :global FetchUserAgentStr;\ +> \n :global GetRandom20CharAlNum;\ +> \n :global IfThenElse;\ +> \n :global LogPrint;\ +> \n :global MkDir;\ +> \n :global RmDir;\ +> \n :global RmFile;\ +> \n :global WaitForFile;\ +> \n\ +> \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ +> ithout-crl\" ];\ +> \n\ +> \n :local DirName (\"tmpfs/\" . [ \$CleanName \$FetchScript ]);\ +> \n :if ([ \$MkDir \$DirName ] = false) do={\ +> \n \$LogPrint error \$0 (\"Failed creating directory!\");\ +> \n :return false;\ +> \n }\ +> \n\ +> \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ +> \$GetRandom20CharAlNum ]);\ +> \n :onerror Err {\ +> \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ +> \\\ +> \n http-header-field=({ [ \$FetchUserAgentStr \$FetchScript ] }) as-v\ +> alue;\ +> \n } do={\ +> \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\ +> \n \$RmFile \$FileName;\ +> \n }\ +> \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ +> \_. \$Err);\ +> \n \$RmDir \$DirName;\ +> \n :return false;\ +> \n }\ +> \n\ +> \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\ +> \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ +> \_not show up.\");\ +> \n :return false;\ +> \n }\ +> \n\ +> \n :local FileSize [ /file/get \$FileName size ];\ +> \n :local Return \"\";\ +> \n :local VarSize 0;\ +> \n :while (\$VarSize != \$FileSize) do={\ +> \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ +> 768 file=\$FileName as-value ]->\"data\"));\ +> \n :set FileSize [ /file/get \$FileName size ];\ +> \n :set VarSize [ :len \$Return ];\ +> \n :if (\$VarSize > \$FileSize) do={\ +> \n :delay 100ms;\ +> \n }\ +> \n }\ +> \n \$RmDir \$DirName;\ +> \n :return \$Return;\ +> \n}\ +2822a2883,2906 +> \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\ +> \n:set GlobalEnvRemove do={\ +> \n :local doRmEnv [ :tostr \$1 ];\ +> \n :global GlobalScriptsUrl;\ +> \n :local ScriptsUrl;\ +> \n :global LogPrint;\ +> \n :if (\$doRmEnv != \"True\") do={\ +> \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ +> rue\\\" for confirm to remove global environment variables!\");\ +> \n :return [];\ +> \n :error true; \ +> \n } else={\ +> \n :set ScriptsUrl \$GlobalScriptsUrl;\ +> \n :delay 5;\ +> \n :foreach var in=[/system/script/environment print as-value] do={/sy\ +> stem/script/environment remove (\$var->\".id\")}\ +> \n :delay 5;\ +> \n :global GlobalScriptsUrl \$ScriptsUrl;\ +> \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\ +> \n :return [];\ +> \n :error false;\ +> \n }\ +> \n}\ +> \n\ +2827,2874c2911 +< \n:local Comment \"Every Day Set Global Environment Variables\";\ +< \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ +< = 0) do={\ +< \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ +< ent=\$OnEvent start-time=startup;\ +< \n}\ +< \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ +< \_do={\ +< \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\ +< \n}\ +< \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ +< ) do={\ +< \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\ +< \n}\ +< \n# Add Update Script scheduler\ +< \n:put \"Add or/and fix Update Script scheduler\";\ +< \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ +< \n:set Comment \"Every Day Check For Update Scripts\";\ +< \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ +< \" ] ] = 0) do={\ +< \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ +< start-time=startup interval=1d on-event=\$OnEvent;\ +< \n}\ +< \n\ +< \n#:local Resource [ /system/resource/get ];\ +< \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ +< . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ +< \".\");\ +< \n\ +< \n:onerror Err {\ +< \n :global GlobalConfReady;\ +< \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ +< \_not ready.\"); }; } delay=100ms max=5;\ +< \n\ +< \n# signal we are ready\ +< \n:set GlobalFuncReady true;\ +< \n:set ExitOK true;\ +< \n:log warning (\"This script \$ScriptName Loaded \" . \\\ +< \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ +< \") ] . \\\ +< \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ +< \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\ +< \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\ +< \n\ +< \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\ +< \n# log the successful load of the script, or an error if it failed\ +< \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\ +< \n" +--- +> \n:local Comment \"Every Day Set Global Environm" +3973,3981d4009 +< 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 -- 2.52.0