From ed1e1540b0fe0ba8b5dd7ccfa140bf1e41d9f78d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 30 Apr 2026 22:20:09 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Apr 30 22:20:09. --- .../20260430/20260430222002-Binary.backup | Bin 0 -> 352369 bytes .../20260430/20260430222002-Config.rsc | 5544 +++++++++++++++++ .../20260430/20260430222002-Diff-Config.rsc | 23 + 3 files changed, 5567 insertions(+) create mode 100644 MikroMaster/20260430/20260430222002-Binary.backup create mode 100644 MikroMaster/20260430/20260430222002-Config.rsc create mode 100644 MikroMaster/history/20260430/20260430222002-Diff-Config.rsc diff --git a/MikroMaster/20260430/20260430222002-Binary.backup b/MikroMaster/20260430/20260430222002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..adcd816939afe1b7be8812adc4683748232803fa GIT binary patch literal 352369 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

3I~m-4?W_@WqhZxWXg1LIgTG{7Uj=8pJ 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 zℑ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

K}y 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%0AsFUV{2DDceyqxNBLJ(5pQUPAe z=4fmxa-fS0U=Awf*A?Oen&wT|{=4nmskWS^y?oTz z5nCtSkHGI-RA8}Ii5y(?lm4~e1h;`H7&cwZ2n6}Kp_bp_;K!NVZyQg1h#}4!mQE!@ zLtrlZp6F`V_^=iMd$d>%Fz@5-5={-P#LLF(Si*L&u=_fVr~i11wxk0v1{{rl9(+=- zjfJvq3p?6B`nB&K=}u=I>%czNRy!y!0FuTFrlgBfpk{O8a&$@Mq;$zbuhk~wt*T^$ zYIZICy@QwQK&+%XVp~~}q<0GNd3af&4AJGZ4d%X|P462xGG{zkD6P|>5WIq6t?Zm# z*vIzoa1EY+xnTvoZ;al32-h|{92s#u2*@h+sNYiYoT=(_9TLWSMrFF1MgUFzb^!3L zVO&tvOMO@E^i!hHCAPcwp0<2^ftb5-IAm$=`7cW~zsA;0&J;}aaIO>E~$S2U&hfGQRaSVIE?0s{OhrdcLLDnbh;%f9`3M1Xb6 z_cIi5Y~pMG28LjidqR}GGcl>ja!HQH` zW*JhH6NiStaqdO$P@lMOCVUFdFAnk;2xMrk@i)X>h6_CD^GO=&?wZi7f_MwRnJn$r z3JKPrT4Xfkm9v*7aDaJD;FFiD#j#e^77spqMLe*i{_@|GEv=9*4Hapub&QCt7D70j z^OtOpBWTL}#@+t)uSSz_Zz#O!Kg`fwSMXwPP~xR0mbn^QhWA>x#CDJ-XioGizM1A9$Gs6Rg(dGw-puqa9Yy1OF)1en?N%{0-WAUjxr-6BFhB~!?N-#; zEHfwe`7V(3iZsf+VzTgQi4h?gPTdoq0pjungO>x`?b_yQVO*LM4isk@Vr`}aLO=yX zW_y2pJkqq_X)ZEzInoFnPG%!HH%WoZC=TP=2`EDDZ~)^4T9K-oEutn-5$(QrK~R~E zjeXNrkX{*-Q3MoLx-7lc+}f%`O{>e;BQW#l$%=vO>g0l-w@H~jzok5ZDLgmhdA%#M z&8bu|&>IsM=k^t`4WOx5#8Pd|+(T;7LrNXa>eIV8`jpj~K4ZCQiVT-jw1GzSy8FfU zX+SBNijxZ@Tk$$B2(Xec8hR+=KqrgET=jIh)(0^6RgT)~7O4D>#rP~2%@}CmS;aSr zJ?Xev^s5;imE;PVI_q3Goi9AO5f>qws6Yu4qlmVcW(r>fopRhHI9kZn!6)}_#<`L@ zy_2)V_>o~#-pKMFnl1Dynv7?Q=WEmuMU@6Ij6qMXY(2D7B|1Kj%X+4TA8|1Qac(39 zDXWARUhYsk%b{US{dzH-KjeP5ozNmIcpxD52WkI*RLvDX8Gn(Ve2c79#bL?~xNF17 zTY)sfK)r6P)|kdTbmRAw_lFTRNMcy(`Bu-4;wNQ>lGOFnmguXiU#5|&fyc01uF&}C;JuMkwQ-Mw%OzTS(0cpINQZ49_OmBi9>oG18m0T`({A(W*FY_onYtqnmN&%OP z?ky7J6iS~Z*M@gTA~+Pr(hfCzzUXhHl}Sj8O_QJZgG{M)g8GSRlZYXPc(59}Ys(aX z4(+&jqO!Y5ZYDHTG=nk}y^yuuvwjB~%f09vy5@#VAJM-4vQ*CIDM#c|?>~+$*`~GG zhz5lgt3;JW+SDQ!r7HGY=J`+4a0vT@@EXdd52!`w;}!tx(JrV}7JgzU2g2?~8P3C* zd6i;XCVz8Pb@OyHy-DOhPq^crY!U1`AQ)?9b{1`hK0RUl!p|0cQCvnJI?p-T*S;W* zq}F5H1@w(A6F$(T6s6545fhTJ{K-rG`z0XP-~qvRt)8aHFr7ylxm4g0&Ht^=fY8|) zsKj9@$8x}zYpnEBP_AqqV+H%__EWCv`m0b`6*QFzkswLDCkjxeW#uBQOIm;HrKgFF zvU8e+ea7*DD3PFOlP=G|Q|^OsJ>WhAru%y*KYBO08Ndxl*}n`LJvc_$l96^fV5aGu zu(y8jJdZ3!2qaRj=fNd;c9|Q-^2ol2p#DeDC@m`^S}}1Krv~mAl%dcx9P~J>SH3fF zGt+Aq@Ksz%tpO$$nHt40<0cQH7uNd9$}y3Ic6QJgo6RfyW5hdfCUcr}YrGfOE?=0rJ&deq0h=G>TMoayK%02Hy9}V>5 z2GR#76lOU!wfB7Ev4w!eN`F~YKZu0_k6o0R)xjZml6qVk>@-VB2;jj@8D?$2cEWxm zAjm1hYAp$MnhLTRaRP={H)1#b@=tI=?#KPTPt~SqJ2g+xk%UI_oS~T-MLk3RI;z+xz(se%H^1fQnmB@ zEhQk}veAKPPt-}KO)LBn)a-Gxo~M=fl-ZoY=f{|C5QdYsL3& zB?w|30b2{^lYQ$Raiq+zgpu;ydrm%fb>_hY={K}lF{y;*5`@uKBQqafV9||`dfn0^ z7AEqc%s`-Vg0SZi&Xb(6rv(mkJ+1dwzTR z*+?@#{b+ySIk;z#t(DtO1^6_0UuMiU!P+- zCm`pDZ9%UB%Qj4Uk=AH6t%++5qLigfm!z0mo+qZ$E3(>3O;8l6@tkV<{)USGV;N`R zF@;3a)m9t)i~95&iWNr>6TssLq9CqkydoJTu3RZ}9N3C~5Wa>RDNQc#j;2aF1~(EV zYa=Y;h!KpMXdER9XrK!Q%!lAWzqCY(c#KKSPq6pOWG)?+^3@OlyY#gq#1$O~bIaoQ z;Gw{+Z3I>*!_^4=z!ve_wvN5AdndBC?LRhx6%l!T@(%)^~z$wJ?E^U;%CM>F7 zTN5l}lx9TaI}pa^-vf>t+8O>d$?GBaSKL~34CQ3Hmmf{$b;lxWb(2!PA)3SBi~wwP zj9dy(t-ZkGmMzDDH5Z5sD@HImL0HvIk8pLn%P`8ikQD?a9OanGHZ>e%u{qbaPj}H6 zzo1{)aE6V_ay$fd;JSc-3f!eCLcTI{Xtt5r|XGN2W7PV#*!UJt%kS#CmO= zjjtY*L4$3Tj7HOo%U9&)1nSG;K46_wL%M55$3sBR^ii_`32BEcauU!BrmLC9NDZU- z9DaBHyJ^Q=5Zrw43Yf6VXxWO+B&-c4lngM2)C6y~QLU+ntPjc23>j3ESv$eCkCL(x zsB@UXHeRq;?_#*mLm^Pm#Vjp^EHXzjLIfLzIb2&&+f7DT1mES-zc8uys|p&9$~V~x zziGdym_lSg_*UVfNkVM=(Tv6Ecc-258p)6NO%I>+yOR3eh|QrMtPCV+N(aaEdH{Nf zuoZ#93dlyf*G2}`-&{6f6fr6AaArn_P-}oG;n()P!tH9~KsOGGnM~*GFV$#jDoldV z9HAK@zm(81_@X1}z~9f^>1-mavlT7Ur0rXyl8I@I&&IPu@(~@|a%c1}LR&)KTQByu zB(i`9(I*sS%@y_ng}0ZOL+6VU;B-#)f*jo|`V>*$^MU~ypq`qI9!h+BSE&h#us2M{ co`DV9(0|j80j!iG9ngS1e0nOz=6pb+{O#lD@ literal 0 HcmV?d00001 diff --git a/MikroMaster/20260430/20260430222002-Config.rsc b/MikroMaster/20260430/20260430222002-Config.rsc new file mode 100644 index 0000000..6476dfb --- /dev/null +++ b/MikroMaster/20260430/20260430222002-Config.rsc @@ -0,0 +1,5544 @@ +# 2026-04-30 22:20:03 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/308/f5b1bfb4\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 21:50:02 30.04.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global ExitError;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n \$LogPrint warning \$0 (\"This system has low free flash space but \ + \" . \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint info \$0 (\"There are \" . \$CertCount . \" Certificates \ + with CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :global LogPrint;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {:set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :global LogPrint;\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\r\ + \n \r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ + \n \r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Setup Global Environment for scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$Name 0 1 ] = \"\\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);}\r\ + \n}\r\ + \n\r\ + \n:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false;\r\ + \n:local scriptVersion \"26.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ + ________\\n\" . \$mailBodyCopyright);\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set disable-ipv6=yes max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add comment=WAN interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + 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/20260430222002-Diff-Config.rsc b/MikroMaster/history/20260430/20260430222002-Diff-Config.rsc new file mode 100644 index 0000000..b53ed46 --- /dev/null +++ b/MikroMaster/history/20260430/20260430222002-Diff-Config.rsc @@ -0,0 +1,23 @@ +3661,3663c3661,3663 +< \n:local installOnlyPatchUpdates false;\r\ +< \n:local scriptVersion \"26.04.30\";\r\ +< \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ +--- +> \n:local installOnlyPatchUpdates false\r\ +> \n:local scriptVersion \"26.02.12\"\r\ +> \n\r\ +3963c3963,3964 +< (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ +--- +> (ver. \$scriptVersion) \\nhttps://github.com/beeyev/Mikrotik-RouterOS-auto\ +> matic-backup-and-update\";\r\ +3994c3995 +< : \" . \$PublicIpAddress . \".\");\r\ +--- +> : \$PublicIpAddress\");\r\ +4148,4149c4149,4150 +< \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ +< ________\\n\" . \$mailBodyCopyright);\r\ +--- +> \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n\\\ +> n\" . \$mailBodyCopyright);\r\ -- 2.52.0