From e843f30c24ac1b2a8cfa3cfbe786d71d9f8806e4 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 30 Apr 2026 14:40:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Apr 30 14:40:08. --- .../20260430/20260430144001-Binary.backup | Bin 0 -> 351638 bytes .../20260430/20260430144001-Config.rsc | 5524 +++++++++++++++++ .../20260430/20260430144001-Diff-Config.rsc | 85 + 3 files changed, 5609 insertions(+) create mode 100644 MikroMaster/20260430/20260430144001-Binary.backup create mode 100644 MikroMaster/20260430/20260430144001-Config.rsc create mode 100644 MikroMaster/history/20260430/20260430144001-Diff-Config.rsc diff --git a/MikroMaster/20260430/20260430144001-Binary.backup b/MikroMaster/20260430/20260430144001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..91f8cb887188e7e366852c73dc9c111706c1527a GIT binary patch literal 351638 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%0AcH`|Nq}e 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 z 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
p4dt-*)t}B^tH;8h(+!Bvi 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 Z%mYyAr8qAdn{9q4u$QHlRV(KZG(g;ZGZz2= literal 0 HcmV?d00001 diff --git a/MikroMaster/20260430/20260430144001-Config.rsc b/MikroMaster/20260430/20260430144001-Config.rsc new file mode 100644 index 0000000..05efab8 --- /dev/null +++ b/MikroMaster/20260430/20260430144001-Config.rsc @@ -0,0 +1,5524 @@ +# 2026-04-30 14:40:01 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/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 wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), 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 \ + station-roaming=enabled 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(17dBm), 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 station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/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 security=security 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 security=security 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 security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf 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 datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/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=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-AX disabled=no mode=ap name=5G-AX security=sec5G 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 +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys 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 +add name=mVados 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 +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/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 +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +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 dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-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/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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 true;\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 (!(((\$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 \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\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 dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \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\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \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\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/285/12e1c210\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 14:20:03 30.04.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global ExitError;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n :global LogPrint;\r\ + \n \r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n\r\ + \n# :retry command={abc} delay=1 max=2 on-error={:put \"got error\"} \r\ + \n :do {\r\ + \n \$LogPrint debug \$0 (\"Trying to detect public IP using default s\ + ervice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={\$LogPrint error [ :jobname ] (\"Fail\ + ed to detect public IP using default service: \" . \$Url . \".\")}\r\ + \n #:error \"Failed to detect public IP using default service: \$Url\ + .\"};\r\ + \n } on-error={\r\ + \n \$LogPrint error \$0 (\"Failed to detect public IP using default s\ + ervice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n \$LogPrint debug \$0 (\"Trying to detect public IP using fallback \ + service: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={\$LogPrint error [ :jobname ] (\"Fai\ + led to detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :if (\$PubIpAddr = false) do={\r\ + \n :set PubIpAddr \"not-detected\";\r\ + \n } else={\r\ + \n :set PubIpAddr [ :pick \$PubIpAddr 0 15];\r\ + \n }\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n \$LogPrint warning \$0 (\"This system has low free flash space but \ + \" . \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint info \$0 (\"There are \" . \$CertCount . \" Certificates \ + with CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :global LogPrint;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n \$LogPrint error \$Name ([ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\ + \$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {:set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :global LogPrint;\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\r\ + \n \r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ + \n \r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Setup Global Environment for scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\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\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\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 ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados 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 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.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + 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\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \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\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \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,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_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\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global OSUpdateMode;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :global LogPrint;\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] > 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n \$LogPrint warning \$SchedName (\"System Scheduler for script: \" \ + . \$SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={\$LogPrint error \$0 (\"Failed to add/modify shceduler for '\" .\ + \_\$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n \$LogPrint error \$ScriptName (\"Failed to add/modify shceduler for \"\ + \_. \$ScriptName . \"!\");\r\ + \n :set ExitOK false;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n# Add global Function OSUpdateMode\r\ + \n:if ([ :len \$OSUpdateMode ] = 0 || ![\$OSUpdateMode]) do={\r\ + \n :set OSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global LogPrint;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if ([ \$NewMode ] != false && \$NewMode != \$OldMode && \$NewMode =\ + \_\"updateOnce\") do={\r\ + \n :set BackupAndUpdateMode \$NewMode;\r\ + \n \$LogPrint warning \$0 (\"/nOk. /\$OsUpdateMode = \" . \$NewMode .\ + \_\".\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds.\");\ + \r\ + \n :delay 5;\r\ + \n /system/script { run AM-Backup-UpdateEmail; };\r\ + \n } else={\r\ + \n \$LogPrint warning \$0 (\"/nFunction /\$OsUpdateMode is \" . \$NewMo\ + de . \" but is may be only \\\"updateOnce\\\" value!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :error false;\r\ + \n };\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false\r\ + \n:local scriptVersion \"26.02.12\"\r\ + \n\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\nhttps://github.com/beeyev/Mikrotik-RouterOS-auto\ + matic-backup-and-update\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW: \$R\ + OsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n## IP address detection\r\ + \n :global DevInfoIncludeIP;\r\ + \n :if ([\$DevInfoIncludeIP] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress \$GetPubIp;\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP addre\ + ss: \" . \$PublicIpAddress . \".\");\r\ + \n :log info (\"\$SMP Public IP address detected: \" . \$PublicIpAddres\ + s);\r\ + \n } \r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n\\\ + n\" . \$mailBodyCopyright);\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTar\ + getOsVersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# #/system/script/environment remove [find name=\"OldMode\"];\ + \r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/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=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/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 disable-ipv6=yes 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 comment=WAN 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 cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/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-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/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="ether1 - Unet" \ + use-peer-dns=no +/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.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.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=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +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 +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 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=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=git.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=ros.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.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" 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" 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 +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=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/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=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 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=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +/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 disabled=yes +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 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/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="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +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=dst-nat chain=dstnat comment=npm disabled=yes 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" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes 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 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/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 walled-garden +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 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet 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 +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +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 packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/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="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" 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="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +/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/20260430/20260430144001-Diff-Config.rsc b/MikroMaster/history/20260430/20260430144001-Diff-Config.rsc new file mode 100644 index 0000000..97c34bd --- /dev/null +++ b/MikroMaster/history/20260430/20260430144001-Diff-Config.rsc @@ -0,0 +1,85 @@ +766c766 +< \n:global CommitId \"main/285/12e1c210\";\r\ +--- +> \n:global CommitId \"main/282/b16d3936\";\r\ +769c769 +< r: root, in 14:20:03 30.04.2026.\";\r\ +--- +> r: root, in 13:40:03 30.04.2026.\";\r\ +3487,3488d3486 +< \n:local SchedInterval \"7d\";\r\ +< \n:local SchedStartTime \"03:41:27\";\r\ +3490a3489,3490 +> \n:local SchedInterval \"7d 00:00:00\";\r\ +> \n:local SchedStartTime \"03:41:27\";\r\ +3497c3497 +< \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ +--- +> \n# 2. \$2 - Interval (e.g. \"1d 00:00:00\" (default is \"1d\")) [**]\r\ +3500,3502c3500 +< \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ +< \_[**]\r\ +< \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ +--- +> \n# 4. \$4 - On Event command (e.g. \"/system/script { run ; }\" (de\ +3504c3502 +< \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ +--- +> \n# 5. \$5 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ +3506c3504 +< \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ +--- +> \n# 6. \$6 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ +3507a3506,3508 +> \n# 7. \$7 - Comment (optional, default: \"Scheduler for script: \")\ +> \_[**]\r\ +> \n#\r\ +3519,3521c3520,3521 +< \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ +< scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ +< \_false; :error true;}\r\ +--- +> \n# :if ([ \$EditSchedulers \"my-script\" \"1d 00:00:00\" \"03:41:27\" ] =\ +> \_false) do={:set ExitOK false; :error true;}\r\ +3526d3525 +< \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ +3528c3527 +< \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ +--- +> \n :if ([ :len \$Interval ] = 0) do={:set Interval \"1d\"};\r\ +3530,3543c3529,3542 +< \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ +< time]; }\r\ +< \n :local Comment [ :tostr \$4 ];\r\ +< \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ +< \_\$SchedName\"; }\r\ +< \n :local OnEvent [ :tostr \$5 ];\r\ +< \n :if ([ :len \$OnEvent ] > 0) do={ :set OnEvent \"/system/script { run \ +< \$SchedName; }\"; }\r\ +< \n :local Policy [ :tostr \$6 ];\r\ +< \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ +< olicy,test,password,sniff,sensitive,romon\"; }\r\ +< \n :local StartDate [ :tostr \$7 ];\r\ +< \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ +< date]; }\r\ +--- +> \n :if ([ :len \$StartTime ] = 0) do={:set StartTime [/system/clock/get t\ +> ime]};\r\ +> \n :local OnEvent [ :tostr \$4 ];\r\ +> \n :if ([ :len \$OnEvent ] > 0) do={:set OnEvent \"/system/script { run \ +> \$SchedName; }\"};\r\ +> \n :local Policy [ :tostr \$5 ];\r\ +> \n :if ([ :len \$Policy ] = 0) do={:set Policy \"ftp,reboot,read,write,po\ +> licy,test,password,sniff,sensitive,romon\"};\r\ +> \n :local StartDate [ :tostr \$6 ];\r\ +> \n :if ([ :len \$StartDate ] = 0) do={:set StartDate [/system/clock/get d\ +> ate]};\r\ +> \n :local Comment [ :tostr \$7 ];\r\ +> \n :if ([ :len \$Comment ] = 0) do={:set Comment \"Scheduler for script: \ +> \$SchedName\"};\r\ +3585,3586c3584,3585 +< \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ +< SchedComment ] = false) do={\r\ +--- +> \n:if ([ \$EditSchedulers \$ScriptName \$SchedComment \$SchedInterval ] = \ +> false) do={\r\ -- 2.52.0