From fc53018e2fde26cdb17f3694ff4cda63fbdf9200 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 30 Apr 2026 19:20:10 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Apr 30 19:20:10. --- .../20260430/20260430192003-Binary.backup | Bin 0 -> 352520 bytes .../20260430/20260430192003-Config.rsc | 5550 +++++++++++++++++ .../20260430/20260430192003-Diff-Config.rsc | 191 + 3 files changed, 5741 insertions(+) create mode 100644 MikroMaster/20260430/20260430192003-Binary.backup create mode 100644 MikroMaster/20260430/20260430192003-Config.rsc create mode 100644 MikroMaster/history/20260430/20260430192003-Diff-Config.rsc diff --git a/MikroMaster/20260430/20260430192003-Binary.backup b/MikroMaster/20260430/20260430192003-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..4218e4caba97392c3ee78eac96dfaf13ce6f738d GIT binary patch literal 352520 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

?IUMVToZ=47h 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 $a4$r%xXPDBv;I2J_<6*jf1sJ!T$Mu0$<(`5GX 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

O9?oyRD*&TEW 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�+km<#C!k(I1?FFamVUHbP*4up9ZP! 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 z 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 X9e`u(S#Bdz^x!<^-!@LLa$x@KnV?m{ literal 0 HcmV?d00001 diff --git a/MikroMaster/20260430/20260430192003-Config.rsc b/MikroMaster/20260430/20260430192003-Config.rsc new file mode 100644 index 0000000..5901065 --- /dev/null +++ b/MikroMaster/20260430/20260430192003-Config.rsc @@ -0,0 +1,5550 @@ +# 2026-04-30 19:20:04 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + station-roaming=enabled wds-default-bridge=Bridge-LAN wds-mode=\ + dynamic-mesh wireless-protocol=802.11 wmm-support=enabled wps-mode=\ + disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz security=security ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac security=security ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +add name=mVados options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/293/c17fc8f9\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 16:15: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 :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [ :pick \$PubIpAddr 0 15]}\r\ + \n :local Return [:put [ \$PubIpAddr ]];\r\ + \n :return \$Return;\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\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.02.12\"\r\ + \n\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\nhttps://github.com/beeyev/Mikrotik-RouterOS-auto\ + matic-backup-and-update\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW 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\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n## IP address detection\r\ + \n :global DevInfoIncludeIP;\r\ + \n :if ([\$DevInfoIncludeIP] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress \$GetPubIp;\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP addre\ + ss: \" . \$PublicIpAddress . \".\");\r\ + \n :log info (\"\$SMP Public IP address detected: \" . \$PublicIpAddres\ + s);\r\ + \n } \r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n\\\ + n\" . \$mailBodyCopyright);\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTar\ + getOsVersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# #/system/script/environment remove [find name=\"OldMode\"];\ + \r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set disable-ipv6=yes max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add comment=WAN interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=git.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=ros.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid disabled=yes +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=dst-nat chain=dstnat comment=npm disabled=yes dst-port=81 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes dst-port=80 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" interval=1w \ + name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +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/20260430/20260430192003-Diff-Config.rsc b/MikroMaster/history/20260430/20260430192003-Diff-Config.rsc new file mode 100644 index 0000000..f27bb19 --- /dev/null +++ b/MikroMaster/history/20260430/20260430192003-Diff-Config.rsc @@ -0,0 +1,191 @@ +766c766 +< \n:global CommitId \"main/293/c17fc8f9\";\r\ +--- +> \n:global CommitId \"main/285/12e1c210\";\r\ +769c769 +< r: root, in 16:15:02 30.04.2026.\";\r\ +--- +> r: root, in 14:20:03 30.04.2026.\";\r\ +1276c1276,1277 +< \n\r\ +--- +> \n :global LogPrint;\r\ +> \n \r\ +1279d1279 +< \n :local JobName [ :jobname ];\r\ +1280a1281 +> \n# :retry command={abc} delay=1 max=2 on-error={:put \"got error\"} \r\ +1282,1283c1283,1284 +< \n :log debug (\$0 . \" Trying to detect public IP using default serv\ +< ice: \" . \$Url . \"...\");\r\ +--- +> \n \$LogPrint debug \$0 (\"Trying to detect public IP using default s\ +> ervice: \" . \$Url . \"...\");\r\ +1287,1288c1288,1291 +< \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ +< detect public IP using default service: \" . \$Url . \".\")}\r\ +--- +> \n delay=50ms max=5 on-error={\$LogPrint error [ :jobname ] (\"Fail\ +> ed to detect public IP using default service: \" . \$Url . \".\")}\r\ +> \n #:error \"Failed to detect public IP using default service: \$Url\ +> .\"};\r\ +1290,1291c1293,1294 +< \n :log error (\$0 . \" Failed to detect public IP using default serv\ +< ice: \" . \$Url . \".\");\r\ +--- +> \n \$LogPrint error \$0 (\"Failed to detect public IP using default s\ +> ervice: \" . \$Url . \".\");\r\ +1293,1294c1296,1297 +< \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ +< vice: \" . \$Url . \"...\");\r\ +--- +> \n \$LogPrint debug \$0 (\"Trying to detect public IP using fallback \ +> service: \" . \$Url . \"...\");\r\ +1298,1299c1301,1302 +< \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ +< \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ +--- +> \n delay=200ms max=5 on-error={\$LogPrint error [ :jobname ] (\"Fai\ +> led to detect public IP using fallback service: \" . \$Url . \".\")}\r\ +1301,1304c1304,1309 +< \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ +< {:set PubIpAddr [ :pick \$PubIpAddr 0 15]}\r\ +< \n :local Return [:put [ \$PubIpAddr ]];\r\ +< \n :return \$Return;\r\ +--- +> \n :if (\$PubIpAddr = false) do={\r\ +> \n :set PubIpAddr \"not-detected\";\r\ +> \n } else={\r\ +> \n :set PubIpAddr [ :pick \$PubIpAddr 0 15];\r\ +> \n }\r\ +> \n :return \$PubIpAddr;\r\ +1613d1617 +< \n\r\ +1618a1623 +> \n :global LogPrint;\r\ +1620,1621c1625,1626 +< \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ +< \\\r\ +--- +> \n \$LogPrint error \$Name ([ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\ +> \$\") \\\r\ +3478,3499d3482 +< \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\ +3501a3485 +> \n:global OSUpdateMode;\r\ +3539a3524 +> \n :global LogPrint;\r\ +3551c3536 +< \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ +--- +> \n :if ([ :len \$OnEvent ] > 0) do={ :set OnEvent \"/system/script { run \ +3564,3565c3549,3550 +< \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ +< SchedName . \" is NOT SET! Fix It Now!\");\r\ +--- +> \n \$LogPrint warning \$SchedName (\"System Scheduler for script: \" \ +> . \$SchedName . \" is NOT SET! Fix It Now!\");\r\ +3581c3566 +< \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ +--- +> \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ +3595,3596c3580,3581 +< \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ +< \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ +--- +> \n } do={\$LogPrint error \$0 (\"Failed to add/modify shceduler for '\" .\ +> \_\$SchedName . \"' failed: \" . \$Err); :return false};\r\ +3602,3604c3587,3589 +< \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ +< \$ScriptName . \"!\");\r\ +< \n :set ExitOK true;\r\ +--- +> \n \$LogPrint error \$ScriptName (\"Failed to add/modify shceduler for \"\ +> \_. \$ScriptName . \"!\");\r\ +> \n :set ExitOK false;\r\ +3608,3617d3592 +< \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\ +3619,3635c3594,3615 +< \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# Add global Function OSUpdateMode\r\ +> \n:if ([ :len \$OSUpdateMode ] = 0 || ![\$OSUpdateMode]) do={\r\ +> \n :set OSUpdateMode do={\r\ +> \n :local NewMode [ :tostr \$1 ];\r\ +> \n :global BackupAndUpdateMode;\r\ +> \n :global LogPrint;\r\ +> \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ +> \n :if ([ \$NewMode ] != false && \$NewMode != \$OldMode && \$NewMode =\ +> \_\"updateOnce\") do={\r\ +> \n :set BackupAndUpdateMode \$NewMode;\r\ +> \n \$LogPrint warning \$0 (\"/nOk. /\$OsUpdateMode = \" . \$NewMode .\ +> \_\".\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds.\");\ +> \r\ +> \n :delay 5;\r\ +> \n /system/script { run AM-Backup-UpdateEmail; };\r\ +> \n } else={\r\ +> \n \$LogPrint warning \$0 (\"/nFunction /\$OsUpdateMode is \" . \$NewMo\ +> de . \" but is may be only \\\"updateOnce\\\" value!\");\r\ +> \n :return false;\r\ +> \n }\r\ +> \n :error false;\r\ +> \n };\r\ +3983,3984c3963,3964 +< \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ +< lable: \$ROsVerAvail\");\r\ +--- +> \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW: \$R\ +> OsVerAvail\");\r\ +5510,5515d5489 +< 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 -- 2.52.0