From 9d050056605aea9bf7fed2ea5a18e991c4e91494 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 22:01:10 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 22:01:10. --- .../20260504/20260504220001-Binary.backup | Bin 0 -> 263385 bytes .../20260504/20260504220001-Config.rsc | 4349 +++++++++++++++++ .../20260504/20260504220001-Diff-Config.rsc | 12 + 3 files changed, 4361 insertions(+) create mode 100644 MikroMaster/20260504/20260504220001-Binary.backup create mode 100644 MikroMaster/20260504/20260504220001-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504220001-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504220001-Binary.backup b/MikroMaster/20260504/20260504220001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5613e66e846e26f461e0279a964d8779c2aa9a28 GIT binary patch literal 263385 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 z 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
Cgz3hHn{PTNOq1? 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 z%0AXG)yX10{@g1M{z)>|?m=>&l|m)CG5Vbf*BZ}&+cyiw+9`*Ecd|mGXK32GGA{~1 z^4FRO%4bdFjZT7Qm%*O}WyW_W`E=$iJHjV^k48N^TP$t4yog z(@V!*n87odjUpaV)&2|XtFiPJBPsJk#X}x{h|L>c#%JI)^iLAd7PN2s@KAf!feD~X z7{fvkZ6xngrp#*1p?)v{uf)uHid~g=J%@aQl)7IEdo$tKC5;>bci0KA36}hds4Ykr ze&hAq3PZC5;a`Q(VCWyTBMcX}p_8ujw|hSD-E6he9uB(#ua3cAC-Vtxbc{&lRVLW_ zfVZFY5Z+r>J0ewL+0*OQsfqjh;KB;Dz z`;TYOf#@phnNA4xmSu$?~lCU7blv zAJOcTjQWE(+#GqRrkt%^(vY@^@TX;zVz3?tum75C4^>t1TQ7Ac_Y+#)L)tReW4jF~ zZFaOmFqxm(D`oYJZO)C_dWE#52r=i8VVwxF zh1GRYYQ9>}{v+O5!flitm!X3e#L{EcQ|HhJ9XvXU#hYQT!@_0XP+z^t>q4MF3xRzz zWGgH1Ld*W^4@)zyNCu&yT(;1%%#3qh4s|+Fs|F}#{oitl<$6TCBJJ3v=pM*0@l{AG zFS_J6ZPU%Mry>6{<$-O%q@&vtFz62>>LZyMhubO6YXz)QyvUwx$q|`; zMi{P{dE$Vuq>ljExn1Brf1Qw6nnO_0QtMfTf4$yFcwI4qgz%gEikPl608Sdfxcvah zki_b}rIr4!DO>%#Fnf%Em9ThHU{WVh#fViZP#H4rDyT?Xr{=Z))U+%V&QW~5@A{2wg7O`j zO(`*Fr#39sINy2O61(llV#(+A9J3ZwgM`5OG&+)D4?0VlOgal{*C#tY#6a0AW3-QI z23=8!5uV}FPP5jecfq5h84e2H1jBJZ;WpWrKg+&RK$0>09B0P!kvC3K|Ms^G9~2T` zwtru@ka`R0GI^hdd=FU&u`wz6nOsft^g+&v(Yo<)LDEA;!j>pozeqh0!;Ai#GG_}J zX8XAGmN8B=&2X>nf($FrzrkzNq1RCYB|Qsr;Fts)*d}Lhh+^|uGY?+=R6mnfqMdVg zzHCvF`1-+{p-{_4p`b$9&g?BM31lY>2is@$3^hWOsocdCVNh3g>nno&DWv2C=q_YY&NT&in`Ll`wohutmK^pl@{+t@#vEY?y|9?^kX6^avzrOSnEP*2zfE18C7E>%m02u@GdnAxNzL>Z%&tj?MaiY-3kXz>7FHxrI6H=`vKDqa zaOl9K`Oj^{wKsE0dNC_N8!?q4sB}a1d(mKvJK&m~M;hm_*1m@C`UX1ry~32odB-_y z?_$HD@aeTusiY{RfQh6u00KtU5#{T{*CDxPFs|LOKV35!XY#(T#0!FprZ?O;SDbGKal*ePUAE&^pgsDXEEu`iGltFIlVnE7ms(!+*?>Axhgdm zFC>~yDU~s^P^CjJk^uImD7r^*m(7>7e#D8yg?_+f5s5!RP&&J=gPygq*O|9dY`kAu z%V{&F+i~#SCrL_4fmvVCS2cz!4KNgmyb+T;8m79!%eD3@6vn##CJ zH=fx(M(II3bj>@mVfPbTB0Igjcm#t>2&P*%0ks<-HzURJ@*snk^Ql)L$FV(5$ToSD zRqTFcjZx2yu!8vSgb5isK!J3%dSPtstGOKzhK##HyZw^kLaF()zbZxaZP&N>5RbdZ`dvK)>m@vHpQiE|I$8Kl)Gh z7V~`oJ&|A9`7L~ETnuLW)d|naQX_~?ni^D~Tv)xmn&VJ^xdiwnC?mijM{LRB} z_8dbeXEE0k=lGWc#G2W0LRnir*?4!cb#En>?654C@WfLecp%R;h8#lI1kv<2-C5iOM)@{F`OSAu^>2$n}x@qc8y5OjX4da3E(YtrRev zYba1F7zJld#L;?wCra6R|U!hEGL=hZgonrI^7 zZad#=96tFLpXfb!FsE~Z7G+!bD#FZGL-B7^zb9m=ptJ`Q&};ErGZglPI365p>=OF+6{8>MkyLMLBvkKV}PDUgCt+)MU>xZi-DEsIo1D3bOL#WIH%e#ia z(k-YtNaMO(+p9z$zwt5)UU3EJeYD;$@s+*-2=}9ikN9aSwr=%H;fBK#QsXKwTOYTT zxPQ)Uh_XonX%+Zpb|WNsN`$o?6dAk$|h zczlBuFmru^L>lUsC$6Avg4YBhgZILDjPz?iY*pjTO0+{lKpo&5BA7y2RO(6W=hsy_ zq^!5ze;Tk68al47I;mpB?&9PQ0ELYa>4_@!H^Kys(cEScR@p@St>7`s1RPVa##L~c z?0K*#HnSyD2sJ$MHY*XwG`)cnZ8@UCCl?@^-Ua2Z|CuMPcnvFm*L2xnZ?bO~BaVw7 zVY2gNo;$vbYbfTdxrIL89+Kl=i`Er#7EC2MM5Pq=mqtBco#c2Z@RHqWU7_OjdY0lQ zu{eg%`ol-bwPiNFo7Tfp zXm4XO@@qSO3@h^jEaDBF`Y97tKc&N&sVGp_0bM3ez+xIml=e0+AMh|o5SGhoWIPtp zl;OlLK?kLG>5gfWKQh_o*|$h)y|BfyP^E8nG>{b4xiCV5q+*6d~zUBfq{)ifLui%UKG5k1mk zKjNuXsPXRyuW`~>{dHM0;Pw+@)9(~;x$S4m-eabP(ze^f{Q8aLLUI$%dN#L1P3apS z;9|LY&~w5?#c?orUX{~~l(PSsRFMR5?itVTCy*S_7G<^kAQYCOR~C>o?s}AnW7oT# z9nTCETM3>ESpoEdftu-(*FHQ;jQYv@g6KHn;4{Eq3&9J@UkUz>^PcO4- zL5V;xspBJV0$^pdL2QWabXdtr_i_o!$R-TpR%dtmxGoBj7BM z!{kOz*!)f#To6B{ycPzH!#NOr_7w-u`xm%G-I~notSXJ->SvJ-eg0_Nm(08+7I{W9 zG!Na2fJ6ixq@t+CG>cdjrk_Tl-r4@oO%)Et{9lNcB|JkBF%X%9pvxfaM9law<_ofq z4|nv!e0*Hi!`uPEB|NM-FmgiMcT%g&G~}T(v-r(p8`*qAHiH*l+m|-+jiGoPHOIP} zp>{Mc$a7HX^&L2GIHt*|9g&XZ2dJs0ZaF6$s0fkng?bmLcj(|>#`*ZGNr3(; zeRu(b8GQa*oBsN+N87tio#91PdvA4aKnu3R=N&N32mv@2@-Qba7s&aK#84a3p6m4tx^97;>FNq%_Lat>$>wV=pQ3(#<5lRsFC8(M^TL-wG1^+4P?7Q9j zInLtHgB1NSgV3-KlYdy$lD+Bri!dSL_RsrY+p6J}&#_%ca7caZ8CL!g5&ILwC2u|z zi77qhJ11YRm<=EP3@+-~BX8r?vNmC)+@ipq5t2ryS$shghWz1uL>U(E(zEctMve{> zzBm$c99O?rPdKcZU7e%YL1WZur(y4V(SE_&Eeb4;Jpo5Gc;B93@NraW)s+gCpWo@d zr2b-c$eJ7Y&S|)Z%A#>!5rmbn178T6PtO!Iw6n4k5`yi!3h)4uDRL~7)cF+YtJasQ z+W2jpD?RZ(3zKOWbYN4%Rz8Ab^kuqBYMT7@u65(2%WP?grscqv@DZ9{I>7deO6Kq_ zKkK#-+4f+2CjH{s;bdnVrYYB#b&I9Q2LNs&WpSP4w<=*D{;NbNjN(Ojv8^NZTlN}v6QwnZJNP_QPSFhh2 zYVd!oVjMIuXq+>ud*Q`YCr)-IGGiGOQ2?Bx_^L?dX z&;<>NCzTHz@1NMi1tIPy_>Q0KxMX!NpIW#Ji?pufSv{igS=fC5S##MxxkmO;g;B+w zRY3la2-p>&D@@A&n^|&zK--nB;-drr8|L{M!-$vzA|}PrU9|*~ZrDyINVEZxOh>9$ z?wW#=HGu7m;>YKXYNwbsr7WJR#x!6K#)4PI-O1DrL~0+E9Vx67!W<2v_iqs zD>m4)2sQWaQFn>DrE5wK2erjx){>hHDw}hDdLu%#j6Lc`iS5NBvVMyOJ6>Mjp!>;P zRe`Whh-L&oEM+L$(9$-Xr{8+v2Od<4%Ds9mNk)6I1-Qp^6&c0>^kn?(^;fGw{5~^U zn$;WX2M1d0qy=|lOe2py99*W{u{_`*wvI`+tG-aatW+hUB-fSE3x55COz0>Y%vDyfyydYnz`}(t|@!$!~Api%Ikl!ZLYX31J8sx@NLqC=d%%TXw zexlcREHU*hA~MRWZ2}wLGW83fwMKuu*j!(4%)CvN*2wP8^?fbZSe|R{6OytGvevdv z?5MU`*11eL9ji6Ou&hRFtnQ$&qZN z;no=J?teNW5NF1u1%`&(As^B`FArxq7M3{jVh_<>sEFLgq>3<25M!`O8HI zd(V$LN?=*%$PIVtH(vGb7%kVgiZNj%!7(;QKI>e%c*^}qed2<54mtb6!F+P=T53lY zmp}b=9Oi1+0O^i~NjW=yFO_2_*QK<8{PazC1pno(Sz`n>2MD+$*Gl=K;^f);1r+sd za&knFz&~eCUh&-si`}BjmX~+)e=%}~@X=_MIDaUn8po{3rocqC4g(cU)*_%y$RKL$ zA{Z)8YJRQSGSN~j>--#3@V4MXZCkgwQDt^y!8fcV9nf<(L4Rhx$r)2VygSMtAe)8Q z?RJ1~$0hT1dm|r!nbrMr7)k`ff5UC4R}qIB))~^C1<&6k(4t`8t(77F9CvB}?mh-$WMm5a* z*C>j(JS&g_Jg`8Wv!L3TcHXr?S<5&V_ z=IZ*~?0Kt0#Qgs>BzKmQ3^U0D^v#BFsLSW^d%6>Qo#eP&La&vE_QhL0cuu|NhBj6U zQPJOy`@dUndkWOkK!coCN%}=R1X^>L0RKM#z!6&wj7V^L^93Z=rr~-bd^H7WI7g_2 zdMj)4<+})~Z4JLsBO^3&V=mZuo4=a(^kI8XmOmH3=}rPq`6#qa#yTG)qHlj-d5>&?8RGd$3$jbe)SVekIFB z@sycidl;mL^f(xkg{tb}t@OABfL^t;Nsus1(EU=I|FJ@l|yJ zKEz?2r5rcc>!4v@YLSH{+wFFHd=6u%D)_MWrC$-^UB6JEd~s9xsNyI4)&yaY(<_J@ zVk0ajwdZrOJ9U$pZQkudm;*$;i;2xv7XW2T%&?$7-s}(0j*@znX6*EI(K_})t}7rs zvBJVkh{zd*jIH2-{?VrN63{;-Z=9no-I+DL*jnHV4m)uPFwqM#tRZN<5zR6ke*1>j z-|RIoN-AEX-EfFgn9xx{aATt7nCd(F`K?M{y_Bn_fz63URGhtP{kH-BELejI-#c@g z!sSX)bs(gV1A}?{(jSu$l1B13ro;Fi)G9Ut7IJuvKHIu_;2mMa$R6d#KyOMkPte5S z?=VcLea<&)mKG&#=vUj+Bj!9NA3C3EVq~x&3&@lg3pJb`y!QmZwH}*RX*yb$QsrOX zNduouLG4rQD5Hz*M)jP=iA>cwpYg*X8vQ4H06{XS6;%TY1I4BmWk#qw?nX4Wn>-l; zYEGSHr?yYoLE_n8==Z*;N_Y4TI8Z$sY%1)@I_hL03xR6k-V#RvxlD^bI~UIighS>F zWh-C#lMt{1NnSM~e^H#!f38;Zl(TBA*H3rGWdH$@MiSHnpHpb?fB2Y6hHuSmz!C7D z!#MzuYgZQt)Csz)siew4pnL~r!bZP2x0EI9F0@yi%@zIHz1ZAjlUuFy%f0j$Ox@#O zBbC=g+4VeNmHhE{vG6T!Jz6|Y?ekY?`~|Kvj`OsT&Xx!(+yx)nN($GFQ*QOD2rQW1 zwKdq>x6b(j0!t05`3y2wTy^EK`0t#PEROy7E7Fnmq6vs^GlD*(@sJQV*Qw?l5(uLn zf-e-9RQ(wVQYR)ju-IgrlAU(za_yaiPFozx$TSa>z)Y3VX2US5dpe=z8xwv6c}9*) zZQZ>+;INxRR9X{Be9>GW1}d31nKV{zzvI#9a3uPkCV4dW@;wpj}61Vt2Icud@B1X`yhmwdB=xGiWnZA`mOGP}ZOq{)?J^;n+BbXW= z72D2^{*#hhauzn9nkv%Komh=yI^~*QS65PWJui1z3;ag<7_nUZ>6yl%6G^NznU);2 zhg2O6`w>k9bRQw(vj3O0^JR9&ti>iM_eCpwePVRmH68HXytALnCPw;ljGIn@jH8@u zDzgE~h6$%3j6*O*;$J;Zu--m`0XzL)CQR*=C@A!DDK| ztJQPA6eNsVwcI%7$ucY)G*!b+ZrM1p`-|13|egB7jCpxl{@fp@U%}8(MpOieTlWXbD8l$;n?ya+1L*gXs1tSsxr*p#uNg>FC;XE@Udjr zBp54wTY%aYR}4@asklXcj=c)ixLw{XfYSOvUK1jH_4h@A<3)0{qy`++-a{5N?Jl|U z6mu#wq<`=lj$h6s4ZA!zO+%9N;LfIeC}o^oE|uQd#FifLzScMm(sR7a-=2+#)|24} zOM3%3bo9Rd(@c`nX>w;4;bp1x^55+Vp3#U+gumwt!J+GGqje0URU~{TVk8kiK!0?d z^S;!ICiy9jbIP%qM~OT|v_8j&r1ttr&-(W=R`+>SLzU8fso@Q;V#sZ$rfZx=;?hdg zPgPH7SWs=4SnZ?C5{AO=&(0r+Qdz{6)(kmy5rz8~C#7;cc|pV_^C!*`&l>( zfMwXvO#%{9!q=uxJ^6{}SWAKQuyNLhf#;4YKl|5zz^b#a>z zVk&vlSShfelre^yORGjQ^LJ$e_1szhm()#d%u7{r5VOQ4O*QEjBdbZ1#0mI4Fzq+f zg!^W#64hybC*FJ&^(k5IH}SqBlRH!<>|nJ1g=DLm!GQmd##ueusCve+WphrOu%YBw zWJp6~dS*hq>q8TUyby=$Hd0@_$sP30JIVy8yo0K$JFc5rU1(UViz)LZhUgT%nP})K zPjFZWEvrPd&n`j$5|!6P@da2&CZAxeGubzm3)(z`B{>)+L&q@<4;m!JN5rrx*DE0W z*967lc|o>7*&K7y4sdFQav|neAlq?$!|TRv630RGUn2^=bZC6t5mOLc)x3mMJbQm{u2PEaGU?|M|(e*>4FPe6R9 zQQve9)^|9)sQY;OUzVV5Z_3YOL9KVLa{h00A=JP_F zg%TB-0`tcrcc|bP8W@qCP?HkLIs`*+L@~; zZkr$(eZtEy=1C3cWac>J6P+HAMAt+J~N(2v-WvFyFx0chbk$W zTI#S7Z?dnBIY7N>(k9w)%Xq{sY8)+GsX@bqoI^X`Gm8UL8QB`cP!c`gE zBmVF~cEp0~Wy(1BL`%frO8SYc7*_wi2+9(QJ3)P2kE_JS;v<+*OHNDQgbFai6iYE? z6DbC3w0mhOr1xXU*n`~^k<{&;pMuZzr@uPj{~S(0^kw^3i3DRSSa#_$c4S$#OV`MT zV%Ws9XC^aDuN3&LEw$*vD*qcCM_GBVwyf%9x}paC;zH~8q=fn~>k1@rmNptuFO`wi zUlL(bM&3di1W<;v-B$`2O;-Hq*Q;llEQZ-c^x@0Cj6!<+fF6D_>7t7OH#;9=UHVUsqzBvjBiHu zEe3>FaPxOYe=dWQP)@h)$%z&=ZaUNORiop^H;hV+yCW8}j067fpP_94H=SBRf`Ah+ zPcXtNYt3+v+Ih6fO-YNIcFZ~vTHPjQV{z)UpTU0%ms91hCM~4g$@R5Zv;;skp;R|* z%KMZWl%t}4uy=gVo?#Z|#xBV>9{db}%$;q`@6VyVy0-4Gk+N=<*-K~KSw*{{@Ti!- zkYoDBD!?3(b`; ztPYNuLEAQmf39Eg2cm(^`$>(lJ=qM=D3;*<~)YQFLNJDS=Xj9R=0cE?oDeO)$h-QwZWs*(J+-Fs6e+k5VO~L?UcXfSkp+ zJeTXnnZ_|VyO~2ygUMDHQ%tDoHDDIaboJJb;asv<0a*g=0g@{#pq4>4sQSLU7L$q1&`*~S{KUsy0f9RpF|bR@4e zxrTb;($^suqIESEE7PUXU*@Lebf-1gLwjMQ73uRFO#-b&Z7SgVV7$-7h|V*xn*)AW zzES@x3sLResomn{xSsMHhYc(-SmG@ZrYdw%A-?!3 zct*<$PE0h*mr(@Uc_1Y$FZz-DPHOJhF-H1qal6sHZoXrWu79^~#(MTuR zT)DWu)n(mxs}s!ghcfp;un!u-hv3X}1Ahe=VVnnnry}41d*P%bP&K6l!!LI0$q2(P zWnwC!A0SK;uHZ#yfFDvSVuz}>W_Q;-`Aca0FEQyw1`}E2eo@W}GE`;+!#RQO;FTXC zl5e{M&a@Ug9uE`Wec#Ih1Em3L@qR^rA(VJ;5^BEpDl|JI)HOvh62sS6CU2}IYX9tL zY1sQ1PL_n7l_{V}5FXRV>6zqtOveVLX^WzTM(3-z|L~RhZQLytD9O%ja3zj$g#vrV zcX0?67ecxS4wr?vpuR2{$@>&`qmQ`YcVr{7iLSXJNcy1-!I=GrsaXkT* z-fkbG`=kOfV86_9m#ztJ{!uZUFSDWG`g5>TGU^kXmvG?I^80~$M})tO?k9P~Y#FRS z(+f(#@y4*c^yG&0^-5o1-1NSm#^m<}HbdSl#dnB_$C4);+x_l{DQ^Y%gNT9!-lZmj zB0b>oDb0AwQDr>AuriSl?1@dh+gXRYypdVxZ^ez)c$$|vKV_wfsiKnb%Ah{yMTOYa zBe5tll|{-*B7AmkM&#m}PdW(iNUqml`>iZdogEgC?fVrhOw)&BK-B~c?zsRwlTL*W zNmX=u^(rzw5G0+RJXn2bF>n;szX`&{Ca%Ek1I$P^^W0Ep;t?B30?(xM9lhzr3Jk_*0^PkSBT8thCwcbvgM`umk?fRdS=K;lLjRW;JjtbrJev+@Ek2js z_!REneG9`(4P2qqtKV61R$|2iK!$|#)Un}-oCna1^uKVgn&VE~J z55Eh8PkfM>mG&A$ye=>eTlcDKpiOY-O6n(O8umx+Dx_=vd2s_>-7A(SvvO+~YD=SQ zu#Pe_4#*cM_KA(HUFS|&?F-3HL^%sE926fTsMlIDg79n3mNxi9#n~_Aq{uCy;j{05 zds4ZPmoc30NrVAZQ(w^5wXe|Hk|0G;+z+RltEH|igZNJs;Q&ay zT0=C)bsn*Jo~ciWVThGW5>n&O_lo`F|6HBODQ12*(7Y?P^aP}RKd|o`D1=X+6a~!P zVmW))=317U4NnsOU9+SQ$ZrG{g;&{)>1ksb@nt(Lt$e@lHrJsM+*C(Om0g+OslX+q z1ZpH*JIsF}mI3g&M!oW|D=GSlB8+}kNUgLpJMr*Dn5>{Zb!Hdz+4~c{OgX7uW*PuU z-43fwzy+ehzyM$T)8#&4Jy)OXEQ*x`^`+#!1#r!j%yBa-p1GWg>?~%F2yn$^g1607 zvNRY3;?F{%@Roh9;#N*4bFkwi$p6g6U~&p$JP3CSXON;TlJ&h#l#$GA_{zMIP&sjgwhJz6_u%{%S(TM2hi7Uqd!nK z&*7;QX?dJ=?*!hzXnZL;>;}61C+$iYc+rhIoXVfuqc@BGPMRB*rGrg`DtU=7m?$+(lNI14 zPtMcmbAEtQzPSbR&m(xO(TlgyuQyZ%-k+0lIJ^6|g0~S_fL!Ejg`%YL6#2)oS^|okBLYo)^ItUMBC)d)qr7wosmX?;S=kAdCL49TN4U) zD;R?ZIfl^$$2#pgW)sbyix?WTgPvNQ+Hm0IH*TU0w#AF-J7j!;h_BBzkd9s~3?JAe zj9Ud&Dw0V;wt;eJMBe9MZN|QVw~aM?-YD}NEQu8BF|_pDS|GJS#Yq0Qz|XrB-Tp7D zh&kvt0&uPQ-!scdwt)dpatDuO@%&p#>gqauyE>AN2q~Lf?X=g-8ozV=saXcx7%OVn z@MF}47@!S#Nz@K}r(7Xd?ah|WwzcHb{rT!;KVLc2!s~mL^Z49+Qsnk2S4!YkBMHM2 zlArMqL8`w!7sIYzfaEuAe|CSmWRI&kWCV|Tf`uR~rysWjrRs@Kt56RPEclllz`T6J z-uVf59;b#gkan*%vOQ!=H*YDjxU9qJw{^sLknfN1pRipZ`|OXZ%MWNW?Bz~rLa(Cc zWIn7gl$as(;pFyjl9<@Ip&`J&ade2;QwwWm51UeB%wdZw3P-euBAgZB%&W{Q)APTl zKeK2id&KHEip9hYN!6vg*DN1o&kzg&NlB(&OtG&ocvmvDg(%W%_QA$oeqJ!IP1lpc z2>oZV7v4nSA(z{eIIH8+M|PF~t>**(MMe_R2Ova=-6Pntg;1as@o{gl6NS|GHqOS^ zZAPDHWJl0^KwLA~DdvHw3W|wxNnBS((qbl3iauB>9dW~N1%&)fS_4*WDp``k0S)K5 zM9ie3W6Ej4R5gT;h|5ba2nRMag3{iM@DKzEpn^&D&%f1Xy?|I3S5K68W(Y#{=OR!b75dfTou?!EALgi=i0$S2|~|gTXDH= zum?UfnPx9=o?)JzAm^fzwWyqb7g6?L6xV28g)@)S@j%ajaUkv=k#&+XGQxs7&^Opb zr>=Oi#y*Gy7`r=ZBj*f^_4C<{kUE7L^ncK644P{0F1w|9_T-y3oq@MkC)tbV69UI{ z%-P$$#Z&mwY&6-ck#sS&<6%y6AZ&IapveH z?F4!A=q6GLC3sq#S0Rhp(#rjg2_Mo-{9n<+gbSBHR`V02;Gd1Pu#@as1P^FXF2qD` zc!Q4~?7B)~R;(Ois?D0dtLK8LiTls|AmYD@>5dL>LK?vuYm|MMviU5{m@8c1q3txI zI=PZFjqX0C3HPd+Ga7@C9l(@w95QK&H-EtHVs0){`OY`0_L96NVJHmO3aBl<_+3I% z#<4$1O`l!90%K3n&<2xxkfcEHA{4LQWPN)ih;qe4fN#`S%l@Hd~q*3ObjEH+^TZ$0jsm? zm-d(f8ow~)KITy2OF2W%pKElZZvV&|bp?3;eAMawi>1vB#*fzdxtA{vG3!_Gg;vWu zD6EI}?^e(yEltYMxNbu4J3@JI`%-!VhdAnUj~Ch3HSSXjKXkTJI84>b)80E*sfL4fmM5l@H216(Akgo@BI%m7BEsHTnqKr;{cp2f0Rh6~$xSPz)Y z^{5u_6EM&b3JbP8V`TkuUDz5Ubp2%nLe((Ou0h_}pLMPjTuo=Dik zLxV65su**loWkQoNtK%F$}JgBWolkd8ePZ5FTWerQCnwwX|gm&dBJmWYg`k_A+Qc! zi5ZwVT#8(XrwGwUHN@~7sV5z_0*fke;nK)y(y#1>kzw$A^cf)~(af%~Z+!2@>GOstBuqYUKM9-Qm{oqbLrUI0HReyM$77O&=kj z^$xIjQ3X54`fI@y$AW4h>J^ycdn%g*5jR-X#Uv>tc^Rz~2D?a`N3@84D(DHgR;#?W1+gf)@9TMM8V}32QdWigZivtx zMRiR}0C9c7!nz%XO%Aa@7!|QcL&dF70RpN77<^gjF5!IGk#~X;!SG<93f>%G(Qpci z1exk8=ytjW~yY1JgzYMLlP$_P6jAw8Du< z{yd0;8|6#gYHRnb2k)Y`%E$baf(6o7zPflRK%juK>JJo3b#&dxjP@b^HYOt?nTdi% zcp7BUA3^zD_celm>=I*NsdDaq<=0u*xvEZ+3;GLf9&AIuUE9LCcffhI+!(5^YX6Gz zk>%y-BDf0;8jfUcS4DaV1|36XYiy#S4u?i2_jJb43Y%w#;|QM64sg;A|1aV2H}S2h z#=O-M>qYF7Zjezk!<z$fk&1(cxP`x*Lt>%elSZNX;$s+LtAJ2x82Oi-k98^0j zgq#s)k}>@IU#>>oF#lU?33yLC`~DGSBKgUKf&nO{L_}&O)u7Aac6POb;n93Q29E&F zMLN^_bA5GP7VYwxeGT!Apuio^B-z)MorzRw80L*mz{DdmL-VtF@iEeKny)#%tmMW> z$A2`mu1$v|;mPQ^3Bq1?jj@ zW!eMEcjzU_H>e0Xs0U`$U$bg1#LRTn&OqU8&gQ4ROfX#dwodDkdmw9&zn3>}9me7L zH@Z?`_2t3C5TtC)Zy<`8pQ45?VPcgoB{u0P<3F@wB5djk@zfB5E9$~K6cS0<41 z0jf4nQNIu$YSIxi*b})RH>Fkv%>a!c7p9ft@Z}DkP&#EzH6S*YRX&cU3K9l2H+CCw zVzSOgN8)&l)XwMDHs3L`EQhuP=Udjz$K@l+j)X8KUt6|S@39e0tpbM3f6*_ZR88ei zsHfrkQ(Fh+>Yu@*TPrk#)q(u;ch=`t79~hzYfLh<&RcjIA@ew)I9Q|bDVGxOxg9U< zP~ED5ZaHP28`&iHO$KaM!W4a)$*Y&h0K&|U~@YthE4r{&I$k558dz_ zA3+aEKZw{vl!wFGcQ#)_+}P~Mg3%p<`qiA z(IMdVit)|3BU9BQjJMLJyS|huP7-Q&Cfo;mZgS?$-GQ?r+K9u9^ve+veT zVjy^<86s$<0Y`3kUXF0;exmmk>AeqPFj5sH-6;VVC1mF2O_=6-N<81RF@d5Hj0_Me zGx>1kNyR6+4}v*XopE$f@eps(XH}m`S?n-lH^#0mb%`$xB*d4iNIWx{H0?zWDwUv7 zz>tcVGl+rx<6r9Nt1X&Zo~d467^6Nl0;q`o$a1#yVcrtBXodv09L*jUW03 zLylxoPJ81nOIA2lkcNfn^tVqWGKI<9qdQdoz!FYLNpnLrzE8W`YT98UB?|<7Seef} zNFFH#Eb#1_M2{4d*VeR#B;0O!Ol6E+{nxv7(~iNhl8#aa;oLdPcMy(Yf*{Z?x{t4v z^{pS$m6}dBK}izRAMt~@2{gvlw<3MY-X;99Z2|WJL^iJdmQ({*VN{t3yyTDH^Dxpi zLTMXr^n^@MSar1!GCI9kes?9uyj+Z>1C18$ltWCh;SNt|=_7WsR_U{#w=pRYMWZYx zKLR|9`BFUfzGz|`bU!R+%K7;l@sXG?WNW{~=@sC$@G)8KM?OqZ{Z3CMeqTPHA-`AA zVCU)3cv_ehUxTH%6TPeHBVkcr6SkQ)k84Jj+`JyMc-86HF3iWvyX^6n?YE8r zvqWhQ<~9*{u5qfOhL}vN;+_fH`#{5AqOASgA=&tH$b~{S&YSsrr~QiDKC3cjL~A74bt(elm0As;ZA{r zk-)xqg1tgy$;^fjUa;&Ok+@7p@;Z{aTVGLHH}o9L?+;@#_te&Gy++1asSkS92j9%4 zZW?Q|m#rXtY2-1GI>{A2{0Ql-^j$4JtWQ5gNQotIH8T{B#kLO@zVuLUQZEe zR;)K7gD4T3bHV9Sy1I+^5{n4!)B{l^81QURhp`&IJ?EDYy@4wV-B=lqTT{x)tRZfm z>D>cnIP|~c>%7=pZ}C7baUI!ig+K>sJf!O=J&*^c2q-nM{e~kd|4QFzuVEZT992Bb z@NCq?Nstfu#Mjesd74)M2s5~1uDeSS{Wy;rBrs{kOw0+NwNZJh$E&}RWjAWb-< zRXy%9%~-v^W{BWM-0PcT!z zn1%1U6HIgL+RJv)VyCC|LBFOmNCtaGsR5zGyubu#;gI!Ppk>&8&(XioLQv>@qZ)fz z$BO+c2xlC=?WtA_tz$~pb~i><;qPaQyjfZapi-@%wxSNT9l60@8t)yJTbd^|Ohw0o z3)2>hJP&r8SC$QDJiuln00=~5S5ER1P!L|rU+s{U*&d*01Z}-VsUKJ+o+cwAmfKTR zL7DR&Ba5oGY*nX7|9IN?NKHLO>%df}?gyrB<1r{XTf@K9eDoyhBZMXq-apXb6+@T=tdCc(4SQgCz8 z#$eh#xK)=2#R-wArFzpY3p%;x4IUKk>xL-Rd*EIW+ttAi-ULR^BAv+6e@sAl%)zlg za@f3%-O6&Zhs>1`E!ztJ_(fq*PaHzO`yt{Bq7ahlwn?~{hAGd8T#D=PRTpLv;S{6Y zt@raFd!hr?W7S#&NvZM92t%%G{kFI$It0B*pSn>w(H65X*t$Hynzrz+M_P$CKGshO zp^|Wwpd|IAiJR+^8QJBZS9xS0Lzx|&UO7?1ku*{+5U}|@%TyuN6fE$1ivk=T(YedG{Q$HJt(9of z8!F5z;U^F!IPidm)~)V;GV$iWm*_qtC`jepI3K00A)@0ZZ~5OMU|$V@NBycBwM836 zD^-Kz`?I|g*UjL;#ki?Q^fSlvko)N3qI_j}iWXpgs|Owuq_K!#Miz0{yeGkHn=)lX z_bJjk4c9&}{1s3MmW$5$)vCT@$4q}(hjp>aBkiW36I5B3u0NQt3wb(w@Y(2j?>TGEW!A8=YQ>g&jLn_ue>`=DGNgrZW$}7wiU%l3EYc^CD z)Mm2`=ec-smp^k;RQ>daUy)}&_QQC0S-u|ZvNa*FR7iql;*4h@1Z0DgG#ER_+1RJj zzc#hU_nS&A^UQMF84p7e0P#9HZ^N*{?}!|fQg}~qS%xCLVN>)W0&|z*%oKmPnzwG& zVnj5Zazh+^>9gDZ)Wg}_ZK3WUc?_upqe(M|?q9OT6KQ(J)ucnI##Nuk!f2uEU?0N7!Scss}2;Q5zx7(Oibfz|T$& z%r4qfsciJyyO`2(<)}2IHlnA7NH22Oy}8sn6t3PzXWh#G7qs_&z!p^9&WUj$0b|v8 zi*uS(HP^v7Nvmd#)*6*pAt$}q6Jsd~64v}v@~4ajiHDHAM20a2`q!eL7$Hy1UJYWv z`Srlb_XoqTn*UgrPV_NhWOR;HM3LqAN%DdNfQe;|>B%+IhbmSbtI{PBE@%nJi9z*- zbUzRRCm^V=yq}VgnQOwFd5XvK7gZ65!&R#e4O%wS@pCgJd2LG&<|r9S3Dav;g}*NPm)ic$h~ZPPnmp(Vcp~FW z&gDqPetqZ1I9L0YNe_gSa6fdczlY7*en*SB#(cPpx*4KH1&1~^CsTi|*|j|tT`q#f zs!_;ePgKSHN!dq{0ziepF_}B5A>uK5t=`3W`~tO^vW%(VS49-y1rjPpArmu;6NqiO z-+V6i(A?^4$FfL!2Jgq;OjD0bvAF|LyHj?hLI`*mvW^Guv;s~;kyd9{;*kNkUEOYM zo>#)~shQ{Osr^{wyoHLph7;{iket%oC@CUZzB8W5W5O5ju4uRv{zXUjkCl40VQ4C? z00@5WGC|jhGm|QAH$&0B^@Lo;hxWeNr;mBPBCv#FT_{QT==%kd>f5r#C4MP*j1ivF zXw9$5GOE$174T`j;zl^t za3nanf7+IG*1Z;~Cd65`-p*kFskjMY&nT(Q!T}>AM^-!o*O!2W$5pms+ng1?VFNt* zPB{J+xzOOr-AD|&%EN{WCqgc1H!mHW#$`hC{Xz^S`kpwj-@T90fR(|bS}3F`K@m05 z->PD>obGa^+&7=@U}xZh{si_V$z&a|k|00;I852gKfU})qLjkf7oVnZ z_mPY0>l3Bhm39Gx)|Wr{Qi@TxqH8=W1hn4_-!k)8htnV)Rctg*h|uz@1r&jP(;}Ew zSR%AoC5G2Db{?QMBAP67K>AfgRNm!7 zueCH--W!@}l*+UO{ zT?}Wn8-YnbAA4CZTas4LNjko&PMDqLlmGsg!S$a{-@mZ_C@LS7S|Pt2Qp*x0XLqH3 z-IG@fnSID*I-%gS<=Q8|;+xt;R->1{T8SBD9lRCMPx1Scowa1v%pVjbzj(d0P$pJ4 zx{DU4qOFE9)x>S_g-xp&f|OzT9_nK65lsnsCW{zY=u zI>W-w#2>lzS%mgN;HTe2a`h|QD9nl+5z4`i!AeRNbSBMhA)O>x@E>W+9x-KlBo|to z@8>#k`O?zw+29PiMVRUQVFZsjGKH7y&e6iz2|1T@K^to=jYV)scs+ zcRxHuvSk@Jgx$9ub$l#3k9$k8hkk1r1tl${UWJXnBun>ydj&h782WgmvdzHRH&Vhr z;l2F*rMA`lpy2B5$Y1mJBjj?Xl*1U1IxMX?*RNd&8bqj;cN1eq8`j8^dD^?kj^R$Q zcg;enpORqcf2PP9G2RBiEFs0>AGdZAPRptPa_qibH&l$ldZ<{e?W9{y;|zqs>y?FJ znW=DuOhq|WhQUtbU8d`8NSqd@t-MC zK-{}tky*LvW@M}JTf7J3eI(B`M-Vq?CEi1xw~RYK-05Bu41vmnXyfd}8W6-5cnq7W6#pQqaALW9CC0vG_dAURz(V1&A~i)($i z`c%zGg#w}xJ@p#iCtJg9)YrtIz8b%)v_gE{mPicWVACmqACrDBPh-Q^-a|o1l+ufAHjS=3<6Mj4H3KSB?uAQqA9Ep~v_@AGmWI`1bDEs9e zH&-!K$db7}Ox$F9*)t;mIKFeuouGPSieSk|$8HOBy7@v8U$+umFF={gix9lW`jTgK zCZr-Vus=wKJOI`<=s-KuuBc%^LDIlzX;4_owP1%K6BQFm>#&rG3)LY~nrXrWdl374rWz_db&3%3-lO0_z#~C|_VwbJ;A! zK4?t7>gC5ZuG2iz78$uLO(rsDBGx|wLgHk(+Ij=?n*!&-`GC(ClZ5UA&WwMgRQl?* zNW1FHQ5sj5ZNtZ zOqwQ7US8#moFI`si5nxYrk#4r9SddN^1)5kd!ga)n=2TiI3UDW(C=q zQR^?eF5VUU<`9fu;96-G1hcpKCFd%0MMlYBr`@n%7WQr%R1Jp{?!qw4>NGHXY50EA zDric6jx!sxd`r3|FQ)_RO?1LFOVJRv-^^YgVT8>#J@S zsG6Z567$g>4H-#}s5$u%f0a;>ff!h%SLg~D-@*kU47?`SKQdHhb91M}EmSn}eQY7h z17bYbm$US?;MY$T*+Xi~$!6e5jp-s>37N+a{!ZT101Y+ekX>LggMvTs&k{%nAN!?*%M4g^P^ z`~AA5?zyB1v#kE*M#Ing3flzO;u<5yGYZz?k7Gjax*1BDr3^HRs*{K#fo&zNzmp&N z81T6$C!6Zt$A0v67rLr~#9rJ9>%&!P=8Tj&JuIABT7urexugTRwt@CI=gVya$AaHIzMu zav!Rfe9(UPE)LzDhMD8V1ZB!mNJy^5WuwYt5f<^<$Lo#d%npoA+rL#pJG3d z5^Onh>#qImE)PmSHX~F< z-XDG8k~+$V;4#7XTPK`hY4p{SAD|j(I)){bW5Sp%8kkO0Nl6m6T$>+Z_KC-&vHa2 z?#U~*ev6;_1)w50q~(*wu-wIS%Dx}?voUv7;A#0$SxD;zHyh(~@pW=OTo;bPXY|M% zwhM|e+XNrZMRdI%KFi7IP5F`upll8@cM}sq$}oZe+OJ_DTjgl6QPrigxY;*-{FNkl z455UWYFSVHlxJU9u2|<-tIIF<^L@IC_bx3TBVp}p7_?T?VH-v|03&mKxA=JZh14{q z{WQIQcW|aS;NA4jq=ecwmP1&RHB|n|@n^Gs4Ot73m7*kY$ad0)S%|r_!tQ*hl3|9nsrV-s zNL`_^8U#{#Vk+1mwW3D=U= zc{RObXNCT7i3dcofrZgJW1L{C;_B7laS!?-PkDjEVgBbw0I^o! z=IGonIh{HR?0 zk@M{;2<_%VRvm@D_9@}~)k>vV)E;P2fJW6nfNeLU?b5M>ksDV}TmL)C8(|TH%Wn#U z?WvD>6;wkrmo#?E8nyn2LiE+R-?Y*|)Ez3o<}RqHLr3`FYp7Z%YS|XSQ^yrh(2-bm zGhZ5rDYWg=*`l%S_}Gu_2c+qT##>D#BR1Rbg2g9c8mKBbfo$>F5(JF_w*5^bbmrf| z+Vha*deV7`r^1e+H;NW(J9LKq%`BwTtb~l&z|4v(j*fx1VOY~_`zK8@ZcyBm7skyd;to_BB z1j?{R5NtcED{7RJxrcVD#=RXB|A~9$%Q(T#bHVq!p$QGB>^s4I0FkfP$bd0q@={~+ z2&hpLL#pRN=-#y%tT?1Q)O`vU|96$HDscV_^|hAnWr$qxj2eBk-3JEeP#qMbWdL=yWL5FFqv>kI#6zx%2z*z6_v>v~f z76}ad`iQJbzG^@%L)cF9I29t@8~h=8X>=oPBPN`2+R2h}Vf2%V8WV}@kOtbT;&xOy z5qkwF5KhL@)q^8epGRZeb3t@p_WrlpR`Wus=Oio)a-fcHKCF_G84)rPE!cici^J+@ zw50_gCea~D)i+_iQ=)bbS0jeuT+uBUw$&Kz%;Ai72qB0F5j{w!v{AS>P*-1x2&Q0( zPCaZY3ql}76f>jfLs3?LpDk9UOF;zS$L}RZ;|N^IW)I?Z4Urh4bfJ!sRa}-(5q~)U z`Y-&fR6aA}r>|K&7K10E{3P$+Mpk*DT|#=g+(EV}W}(xoQFy#H$-UJ{>c?|I*6pGrn7cY%4a&8nJwaa`A!q-l|55aA)1Vt5jfyY zov)FfX~u|vfu@%ZWQ{geCtryJ%J8u}4H&5*u>)PLW0`H!1M){SNcSkIZ8t)4_ z*Utfv_QzC+Yf``X#&vP)IDS;CL)n#@osb1k&G5dxA<8z+$* z&1A9q<)9tA+=CR4OJ(M(JuRdb!LGOQ~{#rXC5S{rvF z6isJ1@Eg@8v5Gy<>+9cX}z5|p}w(7xgCQJ%c zw<4QMAiuo>DD9sRs?_fXMNTkv_=FjeKB2U)x86;8&>>#@Q%zDa2lq5Zy(zyx`&XM0 z;AC_LhB_7mDQ2;iqWFp^$x4c^kDYmyp)Zu%KSD{tmn8%LkiLO|R7kKF9mHg3XkzV? zwW4L?+Gb=}cH_GyZy-atF=GWLJx@8p;Q4BbvLas?q44aZJnO(rKbrW8()TwNlqZFa zHF&-*rO2eDGs8FVhqr0c$V&KeN_x$U-`>n4LalHIGw*wgI=gyuNUjmR$F5YCX5j|#iAr9z3mBDlmE-))&0Dyih=qS z*Cf20d2AaRN8x!=S`R3vK)c|_z{U_N1Ht~i&)AVmg$OBf383*at*22 z5j;v`*{ZnwldmCAoF)8JFoaNyiy?tQGee`>*Td?b44UcrCQcv2mJMB*Hi7P3hulN! zu!=N0Bm+~DVJRvHb_`x^bht;e_w|Aebi}F7#-{7a&2G%qu{M4Kd|{mw(rE0gQ5$mF zIh0sAw`IFojXv(L&(NpcH}TPPqxE8hu^iYEKD8z+Ud|O<4IVtY=?VTt+YL%8Y~rgq`^ASspm4Fa+>}*|6skS1gTbA5 zfD%+(N<39tG-7$2_Dym#99c?&MKca=+x1-*-EPoMk9436kY;mDR`)`K=9#(9B`VeT z9l%{0Jhh5J-LFt6x$?ZsLTB*p9=A>Xr{REfy=-Eo06o1Gof{s$TXgz&V$De2=vM?m z9f{U1n%nf@F3qgDj37M?j`j1>*S<`4@~oQi;&SI(R>A^(eZ+E$qcnL6(MM^NwPS>X4PUh+_as&ESx6&t;v9?0#3L)V>t z6}g$8Oa3l(!kRVCVYh*Y{eT(By4bfvf+8dtusQ)YbOtbGK-sq~O4ysSX`;hIqozx? z@->*$mX7w`jomRet3Mql$z>wOe)2W()1VrVEFHlQc|)7wf@5k0l}KciJr8`S)vBl6 zI!XYVIU&$yjIt0o=^G_HMAzuH5Wt@*mya8ul1YaXN)VosaWdl-Y)W)eDuWt^sCb~# z&roOmjgW|7TX&cc%Q+JAwAijYtdi}oeJ%>G*+Atxt1W$$)^-n@x!D*7DSY|^`D)sd zQl)9LKi|Xxc#B<=v0jSVGdLj}Go#=?Zv1q4mE4JUq0_Bq2U0_;+3ztkGPx~mL8PG{ zch*!@d$+Y1>mvy!Pn9)_o4$Lku`tkQyvfZXTtT|$C1Fo+D`9dor+ZLV3N+jx=ae86 zv55J-PbXO}(9hSZuPU9LZNVhkLxcv@i9S4^k0YV@V&F1cU*T~VKaDyqjC@hh>!@CG r6@ygsG2aZuR?qad8hK|{1aS2&Kea;`EFahy6ml+KMcTan&MlaHsO{V& literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504220001-Config.rsc b/MikroMaster/20260504/20260504220001-Config.rsc new file mode 100644 index 0000000..6406314 --- /dev/null +++ b/MikroMaster/20260504/20260504220001-Config.rsc @@ -0,0 +1,4349 @@ +# 2026-05-04 22:00:03 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/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 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 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 ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/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 wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add 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 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=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.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 ] 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 +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/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 +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \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\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \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\";\ + \n#:local Script AM-GlobalConfig;\ + \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\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +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 comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-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/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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#/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\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 false;\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 ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\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 /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\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 comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\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/598/1c6ca643\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 21:30:03 04.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\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 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 GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\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 ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\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 updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$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 :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$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 :log info (\$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 :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$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 :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\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 :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 :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 :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\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:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\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:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\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 :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log 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:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log 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 mode=https 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 :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$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 :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$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 :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :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 :log 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 FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\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 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 [ :le\ + n \$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 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 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 ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\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={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :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 :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\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 :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\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\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 :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log 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 :log 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 :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log 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 :log 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 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 VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log 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 :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 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\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\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\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 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 :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\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 :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', 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\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\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\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\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 :log 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\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\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\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\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\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# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\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-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\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=3\ + 2768 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## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\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\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\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\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 \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\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 (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\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={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\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 \"Every Day Set Global Environment Variables\";\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: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:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=vados 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 ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\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 :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\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 :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\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 '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\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 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\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 }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName 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 warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' 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 warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\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=\$ListName 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 warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' 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 warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\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 warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\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 '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName 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 IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\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" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), 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 \ + 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(18dBm), 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 wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/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 allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no 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 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 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-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 +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/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-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/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=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/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.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 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.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 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=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +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 +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +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=reg.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.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" 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" 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=9.9.9.9 comment="Cuad9-dns IPv4 1" 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 +/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=NUC disabled=yes list=NoWG +add address=10.30.30.10 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=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=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/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 +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 +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm 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" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat 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 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +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 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy 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 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=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 +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/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="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + 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="Every Day Set Global Environment Variables" 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 +/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/20260504/20260504220001-Diff-Config.rsc b/MikroMaster/history/20260504/20260504220001-Diff-Config.rsc new file mode 100644 index 0000000..33b20e7 --- /dev/null +++ b/MikroMaster/history/20260504/20260504220001-Diff-Config.rsc @@ -0,0 +1,12 @@ +937c937 +< \n:global CommitId \"main/598/1c6ca643\";\r\ +--- +> \n:global CommitId \"main/593/61326945\";\r\ +940c940 +< r: root, in 21:30:03 04.05.2026.\";\r\ +--- +> r: root, in 20:25:03 04.05.2026.\";\r\ +3103c3103 +< \n \r\ +--- +> \n }\r\ -- 2.52.0