From fb7ef75f625ace4796399b4e58cc68cff06affac Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 02:20:09 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 02:20:09. --- .../20260501/20260501022001-Binary.backup | Bin 0 -> 352614 bytes .../20260501/20260501022001-Config.rsc | 5548 +++++++++++++++++ .../20260501/20260501022001-Diff-Config.rsc | 12 + 3 files changed, 5560 insertions(+) create mode 100644 MikroMaster/20260501/20260501022001-Binary.backup create mode 100644 MikroMaster/20260501/20260501022001-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501022001-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501022001-Binary.backup b/MikroMaster/20260501/20260501022001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..37cc09cf7e29453484507fec60c59b3b3b352f10 GIT binary patch literal 352614 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%0Ajldi#awMSr?y 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

oY-43K=@6`Rh55gVo?55E9Saqg!Y;=bm0P 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 z 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 N!E=PcN|`&{^cgp(!}I_E literal 0 HcmV?d00001 diff --git a/MikroMaster/20260501/20260501022001-Config.rsc b/MikroMaster/20260501/20260501022001-Config.rsc new file mode 100644 index 0000000..91d6f68 --- /dev/null +++ b/MikroMaster/20260501/20260501022001-Config.rsc @@ -0,0 +1,5548 @@ +# 2026-05-01 02:20:02 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 +add name=hostname-search-set options=HostName +/ip dns forwarders +add comment=BS 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 +add comment=telegram dns-servers=10.30.30.81 name=api.telegram.org \ + 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/308/f5b1bfb4\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 21:50:02 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\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n :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\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set 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:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$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:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\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 :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 :log 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={:log error (\$SchedName . \"Failed to add/modify scheduler 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 :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\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.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\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) \\n\$copyrightUrl\";\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 Avai\ + lable: \$ROsVerAvail\");\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## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \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}\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 :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# :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=HostName \ + 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 +add address=api.telegram.org list=Telegram +/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 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/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/20260501/20260501022001-Diff-Config.rsc b/MikroMaster/history/20260501/20260501022001-Diff-Config.rsc new file mode 100644 index 0000000..3fe6c4b --- /dev/null +++ b/MikroMaster/history/20260501/20260501022001-Diff-Config.rsc @@ -0,0 +1,12 @@ +123d122 +< add name=hostname-search-set options=HostName +4444,4447c4443,4446 +< add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=HostName \ +< 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 +--- +> add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ +> domain-search-list,HostName 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 -- 2.52.0