From f55265d09f01d5ae50335dd5c47ddd17a9ccb94e Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 10:40:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 10:40:07. --- .../20260501/20260501104001-Binary.backup | Bin 0 -> 374052 bytes .../20260501/20260501104001-Config.rsc | 5898 +++++++++++++++++ .../20260501/20260501104001-Diff-Config.rsc | 4 + 3 files changed, 5902 insertions(+) create mode 100644 MikroMaster/20260501/20260501104001-Binary.backup create mode 100644 MikroMaster/20260501/20260501104001-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501104001-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501104001-Binary.backup b/MikroMaster/20260501/20260501104001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0df6635abe3959fbc362dd89aa871506ef5291a3 GIT binary patch literal 374052 zcmV+aKLEh*sF8CdwFLlQo0&V^kM9DnYmf#~O0#bO0000C{QrKCk_7-*;^}tWXn)p@ zW7+>Y(SxZ8l($N`1i^GT4a%gme{p=g&+UkHZyW#Bb0a>tTr62Y@WFiku zJs7$ssMf4h8r;_2xnN((!JxY;q$dWKEl$fdcd2Lw3@_lcja&^_Q}%6eVTDpZt#j#r z*I}=o;H^3x}@ zIfh-&CvJ}CG!m8Ncii)E2O(t+lmvdif}j4!yjCO)NpKu=iTDktwGSgh)eP&7(eq{L zstd94x3bZ3^%SA7@o$asJ3{fberey8jB<7(69T9TXYTwyp{~G)VriAI{? zSkqPdZIO4-_Bzs0$`)8Y0Q3@1T_*Dt4JFFFnA!b#Ghh!ibECcJ9jJ=MnpBvQgYj+& z_6~MxifhnqOaCgOh3m1`MFk@vP6n*??M=B@Fb-jc;(8R;?`wJ(sf5(k&)Q$4a}chu zkTpBPm~LE`Q>9KNd)0)%WMWa-ArM3=A3k-J3}*iDciB}p*p0}{DPlcPj2)bsci9Bu zL&p6|3RXwu{wP|EMuI(n(e{OS`(e$!hfKx!p-Esh&nJ;C_SFxMUALC$T%D2nEgl-A zMO_bX6p2@$ORA<%Gz06~7z{>{dUr6v5I|zH!oW**+09LhY(cVSY2wE%ww8L?q(L*a zDM-i6*NArFsK2sfees+LgW~x)#%LR|0Rxc#;QiOur=91(D~rM?iRig-jGP_)5oHVR zpz*Kh=s#hTw+TTy&`A;e#FL^s%bdQ6z&arMBN; zgduKAYYEs44oDZ)Z(j_}s|8R|x{74KyLl^vrh2k&$&l#9fE}M%gcW6%6FA?)>)5B9 zAk#Q5Vc|=HR~^j8`xXU_TN=$Bw?6QA}kIP>30J{glZ{VX`J`D3v#WY1X$jp z$e7Lk1lF95sg?QgCkIu~yzOR_+B>_-+4>BGkS$EpQ$G}M%lcN5Z-;6gy2&!yaG;~M zbQM4)ImdL$^c$Z$H7eFfHsC2J3CAE5ZDh|eW zyBlwI@0B0`vP9-l(vPL9C1B2UelwhcduTOm+}1%x^;t6J09E=FO#U{t9^`Y3VmVo^ zM+2m83d^{omIOj|Xy+*e)kQNtO90)!S2^f83+%1=3_Q+)Id2)Oc#r5dR^hSF4hWKm z03qV?kyW?&HYC5rm#Dz9rgSrtPnGldG^Rql@K#~e5gZ&(Cz82n7JIV^A%!d^R>0BV zd{cpzU- z7KjmnybwZq5|iyWaaxXP`dK`zdIAK7Q9ez&A+TysD?YMY!r1kH$JL@twUveY7|t

^$Ii2}Usgftk(8x7v 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

VW1|c3D5i+qs$ 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%0D2*pQL<5pZD;hQeFc)h4FB+2}h4| zybe(Go}9X20lDpe2p&EekS=z$%nX6A$1WGoMf>-K?>f8D1)fHhUpd2cHiXGXct3S0 zmzA((2GOem%(P$T&Qk9kpotmA^YGA};jVtWZ1uKpbs8q{VlvJt@4@8J-w{8`jm{x5 zA)f$fX$^eisz}>ZZD@R?dDFCgd=4&BC4N`OrW8w|!oaoUfpme6!j%xv1i1UdMx>(K zY@l%auJO8D*v5}5&DIc{eUcHQkV!hrIBG?I=$}~!65)_FjrfY+38k31#s0+&{oq2k z_BL%$G|ZzrDXadl{jDx}W*03=m;N!Ln`Ejb-6;h-iOI!H;j;)7MU(jvefF8=-{pZg zl_0bds3x_7$jVRvPH6HnLfp`6MEJToX_kLCx#+X`i-pURtKPaV@d3*DZWxVSEi?10 zRmRB$@>?+8X*(Kb8$+iDsF zBr&wrv*$}E_r;Th2(*Xy%W_4044&JOpJ3vjA^s*Tzq->QMB+>YCQ{E3p9T+o9lQ6! zNY1BfvE^;W_fYDB&TOOu7ui<7e_OHo#Eeg_d42+I&tmBO?LiNjiwpc(CjTGd_XSo0 zD(IYg%Mh1e#)Pg^ck=B_Y!+=i2Mf8P)jdlx8EN>VIE_^iYetfZ4i%%jytL2<+n997 z1BRK9NRII0ns}R#8Qg!P>`$VvZe#Fd1CqLBiH>)|Jd`~sjBydBLG}oX2h@Hw^A0RD zuo&9jV!EaLn3TYyJ{kxs%mMr#iqiO$;icwYiWZ?qv@!5>jq82iC^>oSW&st?5YSs* zx~zwFxUg3d(^HeIIc|nXi62UmQ0NM&uQtG?r&>k}N!KSP$d>BwWGqBZ8T;c0t&9P% z)U=7qdpBzX>~|W{`0m0LmA~*+3ent^sBKLfApxWH)LYsPRu)2)2V&uXhsnEjv zh2k*Q0K~La0Ct7qMTZiRH2j3s)jcbgruEaig=T?X@E}~W=)xwYqzGh>)WiIuN4u*` zPH%X>@>p|jAVB}a7N+OK5H8kZ9b1~c4f;2#zuB3u3{6E1edE3sH~+j%vgTN+9VZVq zOToAIj;QswwPBll5MLHU&SI|c>5=jhzLkh(EtFL{Cw7|%rDRfr8OyP9(%36CC@m7% zE0k!%?nIT9p;c5IZG_U!uQcX_HmQ!2CSA` z%24^;e%gKs?HW%|wwvK@^^bwSH#Z|eKKDF$qB7MBU)UfRjT+{>gz6BXPJP&&r@!H= zKKl&HGcF;ime1`w9?uq3KWi=Ti%&q*7#f96B(mTjO$7t@NP@J4`*2zyr_G?~bX~C? z6AtB!O1?vqZ!WgGtP0A?!w^G*0iHoED(8GqX!ZMIh^>I=OjG|7M2O*ddI88N#`uU7 z={q{Ucmds2Z=C0FvMPQA8&(VG2@$4P#oM|MvUN@-=$cFLKeKBYL*KW);n;IhBR^0I z=ZO1R7}ZK(sD3k9OaicbOdjX1_&1y>e%EzV#bmmZS+XwcC;;<-z9}3?>*g?`;30~L z>bDV&6amrWdFPAO^6RXE(r>w%H9vyta#1Zu)NdAO^ov5}F5Rg~UX{%2{0wm~&J@#8 zX^$-5J@4a>h;hJ%N6=33VoYsr5#RoUpARS-r3B!{1vp zd^}@Hvj~SMyvT6M<*-RMvL^7HwbBeGAa*t`M3!snnm||`?|VtZ;5+?$TmPN?AU=#U zpyVjpDEF$X#kAabWt4ZJlDe+n^6I`!Y2@DeKB1Flql4PGk7wE{7@WK)E=MP5dA`9KGlEfrw~j?x)8$pe0Tce}DoQt8xx;roQ*i_B$=*J5e8 zxxnq29q{O5M|>{XG!quRGLgDeM~C~X#F>^ykL3weVJ*e)MQu}4@795~_^ArV_Y;y( zvEbS}8vqpSJp|r{DHN(Ra-qtq@i=#?|JGU^54^xKGR27El&M{#?LB{l4N1WPxxoFK z;$`jGx!91AZ#TO~`nMdn^^-{`!KusTJ>N!^Adv;HSKZVklH_7I ztAv#m%JY8P68-ZHaeKX`99SaF%b&JM-*|w#m78CrHxqQ;Fq1>o$Izq<8R7i?r{wxi z0ys@~8dfaf&4}B%9H_HLb{=C+nOUf|_3o;iIV-e<_`om5$2BN$B#WiJs{^L)jB2#%aFwU zA{Y6HUg0sxKXOYFH#I5XSd6f2O*mQZZ7|9o7~G^8|x8`3Q84tpKb4QF=>A8`&K0-nppAS4w{Rv<_aaWuf*n=9t|uQ@Um$h?eXL3>vNO|z0Td9|8@OA z#7xs4MwRRhY|bbs4;$m$4Z&Ll+0!FZW^s=Rg#xe|*Vo|WUk_8T0m(Drya`Erk z?CGiit)#E=JPiT1D%`S5uh|5JNDgD3dTwqu9{>J6f+P!sb=1q&8Kqa(EojAGJy?;t zOZC`Z%NRv`muzaWItSs;l{@o4PSYk3eU8VC0uPn4fcV|#yb(~kH@6jnqm1o+?6~n zE@UgkHRhjgjZz>G!)9||qP6X=m2vg2OPtOAG#3sadpG5y-%O=AcqsM-J>KGm8Q6Eg z4665agp;YW9WgxKEie@`s3`})mHj^Ac&DL(;bFN26rL%h2idQL5o^|g`pobW=|G#o zR1y1rxy;?G$xbH~J{NW|A2R4y2QlA0p46qVmS>J9_s4c-wHXF6XrV6CV)sXkp+~t+W&>$+}{7q|DbR-5DGpxpP-#2%VFITdV90YHisC5g4Zxs#K}g= zcs^%?e7@!@%TWj;aqrX2KAk9t1O{5TqmLv1@hxeH)`d^$#(oqZ@C(!kS*-3-v-pJu zS+T;Nz|$cHifE`bC6bDtzSx&!!Oo~6aq5Aj+E?A*PLB4H?lKr|6;;BwXGaFxd>t}4 z)9XLn6S{+aCNTH7@S2v5Gl(Pd)fxZnl0MdqKoI+L#St$bvCfV5@;IeRedT6l`T(Ng zG7W3pr-TGHCjEJAB7g`=?!YC6|v56H+*|2vW6lQwHz=7 zy>n?XwsG)3W=cTj@GRxWU9Y!Nw+z3nLwd_|#M+CUupNRx`Vs87j7>`8x#lSnWGB2r ziJ>^j3+7z~8LQ5pt~=~Ivn^ohf3{K_mUNXjYcyJzRkC7~fBcFg`A_cU`KZ=0v6TsYc)+OjhtrW?A$45! z2j}W$*j&q1fi)qseIpytHh(X36b5Uv3KKLEgE{IXqi(vA*bTLPT##IXA%TF!Ijb@{R3r}oZW z`09Y)OSF4SO1ZdY{%Ct>3~G|5-LzZ~OpJosGsoz)PK+ETJ0et*7|Y}W77t0ljqLRi z`gf*@@4UE5avS>)ac5ZP>R~poT?sc=jVIMj_IZc|`Iez;nu5RSz&}e$Pou(aqo!+->N5I4 zi+GR@w6XcVu;L;rAF-oFIX9pvJP=Mr-qBPv1b=o^>>DIKksqS}W z*j+*YYTaVAb|)R=9TW@cjWUSr0uI`(Xf%c1SxjYGr*!_hZpn{5zJVVA^r|Pf1bj9M zo^CfrDLjnIFqI@T%UI8X(NMd!Ii8Au7@juHJ13q@h*2`I$}}4bWpH}um@86mpoL~ z<|NX^Mn0Z%i-aybX*$a+NCwl)_OA9_oULY2UV8iz-iunwcK)z`ireU&xCjjmGW#&? zn5jX)GBcDI%=9oF@kJ|gmR|+-;vPtxo|}9W4roFFj_dc<+9~|{n&>OA{g@#s0zFAQ zeVsgtW5nW=JX5AU!2|=IU{(hW0?>SK=Qm(u;AQ27{Y@KI6a8LIpr!AGy3Ekz6N3f-?m8Wx z=w4SY3K~wWxxu?`3F~ z!SL-NFwaFvPR6e?doOuP(9<> z%SVuSq%Oq^&cRcaahw&dwp78hMX9mVz3@Tc+YjjTXE?^owPm8E8G@!v*{jJJmLZe= z+|?o4@~Ocv4o!hypvk(PhheyLR>fg6B;=($tl0K~pc-gnrB3Ssc5>1me7bAA%U6B4 zPyqUJdJBY&hi$l%1qgQM6MD0^%0Mj0(lWb^#E4j-X(m@5uVE#>0IBDlUDZ>gn8T8PymjT4c5%EV{D`SWlzV% zb_VYZWhE2hWb^NF9MNXK^cGaqC~+yN=T1$Y8c&-H)WjgVF&75(wX zg@soLSIwOAsq3=hfK27zOoMIqgeS&`76fEwCzp?5r__ zw8^=fCmV|{B>9wAt`wEzSprPPB$bpg8|` zk7Qycg@^#o>0RF}(;Z0+HHbq#@bsqaXr}f^cAjD;nYZQ!e3#?39S{|;-<+r>Kzw)s z`I=5QG}}~3xNS$>5ESA3XkKh)J>@@F{h97UPxFg3BB;$FsOtc}%4jsJnHP~eL8W}O z1LMQRsLBqAeh5$+R{-$XUnJe7ryD&4Z}A@1b@zdzjEwhWPxLpZ)Ou(w?dBM6&q)}- zq>VnCFCX4Vv&J9o<-3+(Ugya!9ki=xhc*UA9~|uX@B|sDV^MjQ(mm91&tkPTt^MY$ zD_oN71|_2zY%$qnjfASQ!L`^PRvTsU#CdcnWkC~V2`Fge=g-Q`W$?+amQpmG^u~n% zzsOf^#91z3f)pUUVm(N~ZT*wUcu zmv|W;{sM1$DL_z4G9Eo|r;TFteGkyCX=5ceg`D?A+009!kJTi9QV{5v9ge$vgL{Ij z`16DP?41TUvza>VJ$*`fjre!wO*Gh)-~7?Shei8el(Rkyb!5Cd6M_!aEm80@hnEnEC2pZM26C?os-L|l8dbNiOvZ^ReZCW-2)%-@ z*6E+|VRyDjE=`P1T_65P&zpi5MeJ2hTX0h{{`L?hFrB3Q@Ah{J|ABvc1xsJD6th4s zQH;USK}qQvuZ~A9O=n?+v}oKZ27kXf>IAe<%y&&6#zgKA+oD|{rP&sj3%x3wuRJ~f zpZ$UffPT~{J#~V@n?J7@;F17EGZV|P+?ACD z%Y=!ObW!lzcbiDh&#DY!mpgL_@qHCsLv;Z)9C>&0lzvKj)RM0w3^38C4QbC}bVh5S zp}PQa0lz>E(;S?lp;rU+sQztLK5FrLjImzf(b7Rw8e2@UxUhmasO?NlJ(R#rqHB&H zw1s$K1&IZkJB6W=w6K1%3_I8KY?E84hCP6!coH6Nc0N6t1J=K8~ppm{b&*3Aqi1?c6RYDy~}M0rYQq ziWMJe({@piAUgq*>iQHE=WF-0UQ?clf_zN?di+rt2rwmFTEo8jruvzw)ZFLo;TTTW zpw;=N(rsQSl8X@?tS)Y?wL~~E!zV%Ccb&=GM##@^6!Aj)6mL$#u)C_H18X7HfgAGL z14f5@B5WQYqP=?c1;lcdTUAa75_y(s*$I-v;pFbFu1qH0ylt-?){3^z4C8xDdSva= zGTY!d5USo?lOOVQ7vibIOG1R+&K{ix)vCceWYsspZ*PkByr3Pqh0>F!+#FX+g-HXhtx7PuNo!F-CC*CO+^ZoVE%%@x(fVIGg$n>&?4uSGP4v5l8^ zRDDVL*P;;^5P%$odjpK9@(x6TN$^RuTC7q-4U2GZQ`EBu%sOvz(QXvPtS zo;NdP**y>&Tq`0yitlxO*K6Dqqbo!HIBjRX1YXpmcBm1hCQIJTX^2l4-&jsG>KLdshMQnX(9L5bd<#^>cq{HzosF zn2~jRGtVlDnkk&8ZITKcL6}E0qHJRlX@!k_+9C?!H4Gz$Aq!I1F(Q5`a&MCKdnlz| z@bJ)Sksdb7XKAhn7pwkPDHPCq_=cjC=d9f~4`1BlyC%r!z_U+!CwRLkAN3#S=4LId zpVLyv!5~U_t!tqG>-Re^XSW1+qCgLW@nNszV>?0iQ}^FA1(+q-7>`%sE!V6%7Fc05T{&iy$u*P`2UfCZy_HFeuzg~;nqmR5jl zh>t)Gnn^oPzEh`EoxD_F*0vp0sq4D*G>S0VU@f;tN@7;xH^E4bg)|4aMnd98@-O~Z zHBCsL0<-Q{MWdFG&u3axG6CQn)N{E$1ed>MWGI*odh}8tA}l4_fK*1=%sl&e%34@z zF8$&v_^AS%)GgPiz;z>?(9L99XK(fjy-(HWl8>Dg@0gi5MaC_N%7lYdKdqM7z2?YD z7#FI8)&|~7IO066IRI|G*RP$pJZoa$x}q(VmXjn(iRz7E7L7+TEfMf2RPGu@@_8$^?@xPaH8V8tkqu}griG^J+MKT zs$)Rr0F~vev)L!uw8fK9(-53*ngI}1B03r%e$`Dr;xvDV%-If5+Z`5M4W<`h-_KZ} z5B(r)QoiyEid`QUAqRGK)W6bXGe&*B{!P-ChC8u~2q&gpGdHi6`jESYdApjQi&F!B3H`3vAJnv8TdV$he2Bdfy%ja8~OMb5Pu959} zJ>>V^(bH|a2Ti4(`Nz0}1H5)e)!rO$7ts&C8;~%Iq5

  • Wu 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
    L?X_p>@iYP2BO;s;En4;o2gzk`hCT=vOM0~ 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260501/20260501104001-Config.rsc b/MikroMaster/20260501/20260501104001-Config.rsc new file mode 100644 index 0000000..5a7f3d1 --- /dev/null +++ b/MikroMaster/20260501/20260501104001-Config.rsc @@ -0,0 +1,5898 @@ +# 2026-05-01 10:40:02 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + station-roaming=enabled wds-default-bridge=Bridge-LAN wds-mode=\ + dynamic-mesh wireless-protocol=802.11 wmm-support=enabled wps-mode=\ + disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz security=security ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac security=security ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +add name=mVados options=HostName +add name=hostname-search-set options=HostName +/ip dns forwarders +add comment=BS dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +add comment=telegram disabled=yes dns-servers=10.30.30.81 name=\ + api.telegram.org verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/366/ab812be1\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 08:50:03 01.05.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# check and download required certificate\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n\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\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\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\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={\r\ + \n :return false;\r\ + \n }\r\ + \n }\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\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={\r\ + \n :return false;\r\ + \n }\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# download and import certificate\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n\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 \" .\ + \_\\\r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\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 (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n 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 :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$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=\"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\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# name a certificate by its common-name\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global LogPrint;\r\ + \n\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#\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 :set mailStep1Body (\$mailStep1Body . \"\\n[*** TEST START ***]\\n\\\ + \$DeviceInfo: \" . [ \$DeviceInfo ] . \"\\n[*** TEST END ***]\\n\");\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" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\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 GlobalScriptsUrl;\r\ + \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ + \n\r\ + \n :local FwAddrLists {\r\ + \n \"allow\"={\r\ + \n { url=(\$FwAddrListsUrl . \"allow\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n \"block\"={\r\ + \n { url=(\$FwAddrListsUrl . \"block\");\r\ + \n cert=\"ISRG Root X2\" };\r\ + \n# { url=\"https://raw.githubusercontent.com/stamparm/ipsum/refs/hea\ + ds/master/levels/4.txt\";\r\ + \n# # higher level (decrease the numerical value) for more addresses, \ + and vice versa\r\ + \n# cert=\"ISRG Root X1\" };\r\ + \n# { url=\"https://www.dshield.org/block.txt\"; cidr=\"/24\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://lists.blocklist.de/lists/strongips.txt\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v4.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v6.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n };\r\ + \n# \"mikrotik\"={\r\ + \n# { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ + \n# cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n# };\r\ + \n \"FuckRKN\"={\r\ + \n { url=(\$FwAddrListsUrl . \"FuckRKN\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n };\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHuge;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\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 :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ + \n message=(\"\\\$LogPrint: The message is already in log, scripting \ + subsystem may have crashed before!\") ] ] > 0) do={\r\ + \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ + , possibly caused by us. Delaying!\");\r\ + \n :delay 5m;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n\r\ + \n :foreach FwListName,FwList in=\$FwAddrLists do={\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n\r\ + \n :foreach List in=\$FwList do={\r\ + \n :local CheckCertificate false;\r\ + \n :local Data false;\r\ + \n :local TimeOut [ \$EitherOr [ :totime (\$List->\"timeout\") ] \$Fw\ + AddrListTimeOut ];\r\ + \n\r\ + \n :if ([ :len (\$List->\"cert\") ] > 0) do={\r\ + \n :set CheckCertificate true;\r\ + \n :if ([ \$CertificateAvailable (\$List->\"cert\") \"fetch\" ] = f\ + alse) do={\r\ + \n :log warning (\$ScriptName . \" Downloading required certifica\ + te (\" . \$FwListName . \\\r\ + \n \" / \" . \$List->\"url\" . \") failed, trying anyway.\");\ + \r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHuge \$ScriptName (\$List->\"url\")\ + \_\$CheckCertificate ] ];\r\ + \n :if (\$Data = false) do={\r\ + \n :if (\$I < 5) do={\r\ + \n :log debug (\$ScriptName . \" Failed downloading for list \ + '\" . \$FwListName . \\\r\ + \n \"', \" . \$I . \". try from: \" . \$List->\"url\");\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" \ + . \$FwListName . \\\r\ + \n \"' from: \" . \$List->\"url\");\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :len \$Data ] 1024 ] . \\\r\ + \n \"B for list '\" . \$FwListName . \"' from: \" . \$List->\"u\ + rl\");\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Li\ + ne ] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"\ + cidr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\ + \\.[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$C\ + IDR ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3\ + })\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \ + \"/\" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\")\ + \_do={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n } on-error={:log error (\$ScriptName . \" Failed parsing address\ + : \" . \$Line->0);}\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName .\".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\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 crl-download=yes crl-store=system crl-use=yes +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set disable-ipv6=yes max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add comment=WAN interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=HostName \ + dhcp-option-set=domain-search-set dns-server=10.30.30.81 domain=WORKGROUP \ + gateway=10.30.30.81 netmask=24 ntp-server=10.30.30.81,10.30.30.10 \ + wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=git.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=ros.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +/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=Telegram dst-address=\ + !10.30.30.0/24 dst-address-list=Telegram 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=Telegram \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" interval=1w \ + name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260501/20260501104001-Diff-Config.rsc b/MikroMaster/history/20260501/20260501104001-Diff-Config.rsc new file mode 100644 index 0000000..57dac4f --- /dev/null +++ b/MikroMaster/history/20260501/20260501104001-Diff-Config.rsc @@ -0,0 +1,4 @@ +4679c4679 +< set crl-download=yes crl-store=system crl-use=yes +--- +> set builtin-trust-store=fetch -- 2.52.0