From 6e7dea1eb368fff307e23544d7892de33da90590 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 23:00:52 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 23:00:52. --- .../20260504/20260504230002-Binary.backup | Bin 0 -> 268232 bytes .../20260504/20260504230002-Config.rsc | 4483 +++++++++++++++++ .../20260504/20260504230002-Diff-Config.rsc | 8 + 3 files changed, 4491 insertions(+) create mode 100644 MikroMaster/20260504/20260504230002-Binary.backup create mode 100644 MikroMaster/20260504/20260504230002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504230002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504230002-Binary.backup b/MikroMaster/20260504/20260504230002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..98f87d25382276a89eddea1456b595dda6d217e7 GIT binary patch literal 268232 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

MFOw%2XIdFisdyzR!z(V zhX2BFgk?4<^IscR2UHrc7>l3J8tWOGFXPe*l&rU#{RWBzi>W{1fk;ff;TOoR-RC+B{sJaMDg-E6z4OmwcX} z8HO%*TQGIX=+ch-{S5NwpTDd`b@IhKm^g%Tfv=c$K4xwNHMkLU@}S~w93V+~_c><> z&ow&cT*9y-pZI7?R73>;2KaOJ4R6qGfsh7JamxoDfl#xJkKBR)> zkzA+8*PU*A;6Fz`7agA!XJ2kP5IpNFSOM)Zuj)mLuR}{u?myHvMF8!rt@$M_fmHSI zj2WQ<7H9vRhOTJg6UHJB1^p?+Gb+ZLWy-p#kJ+K zd5Aq@gvh;CGy{T@@SR~)wjQ=bjqtk5_MsIs^~Zqx)&I1di1q#QEzL6P!7>R|}Bmy6@MlAD}s)Y#pCOa!iPijRs8+$jZYcPvpc_5*-aF^|ssN9o4OYri4a@9q;J zQZr$dnmQXUApw3HZl2a=e}y>Jrv{NZFsqc9m7}>gx)NeHspd~uZKq*Nz!~^j z0D}1hjDb9E6qN%tjoQT^0uN@k#F9Qj(P-|i6O@*X%Xx!|lTk$U3jXlqKGN2hC_eO| zoZWjKsSjn&+l2MPy-f25@l{wAjjxN>wLPIL7&)&tb5@}gJA*gaM_;~bUg3s3gz(vL1wpf z$6!7Z78)^Fy20WIW2F2ni%_nWQ zPRF*9^%R*%z!k1$TCvkF$!l0{`E~TbQWYRLN>O4m>6@JWq*Pk=Vzuep0%+J&efM$& zZ@JfRpo1y6;WV}c*0f0}ZH-q1d50=T7v{{2O{xTJPx>ptzPB$uhenEq0zl;D1HKZ& z#m~dJjCn)FS=Ki|b(vH;rCx$Tx`EYB+1s^9(x~VJTEX8}+K>m+MQ|E*!hYKOQLyAO z;Tm`*?S&w-c>bEV$%T5;bxYJq#f@Ip1mqN$lT5XM`7buX_vwsUs!%VPRas5m*y$x> z$5XS^jIc&NU_jS(4i^j#T4uPtL_``CoS()^q^?&v|^v9eD0w=9`E z*;ca+ z_b2B8x!n0ZFYOOPDo zrWPOFJqCZSn_)yDSoRH5c87e3fCnlO6{hEcB#vtb1gF7x~ zT-LkJzT5fd@wOCL$vOwq2Mb|8RYx(X?6`07R0ZWwkY_0;Arw(tFSQES-bZ-x0YfPV zSoKY}vpMGn|I>ARSP@ln>Qb1o#J@p0)&U6;Sw7I!>0CUB$s0$$)EF%fESsT|JQ6QA zD@Lt2<@CV^1S#&z_m#RV>31jt2S$dX2W1TF0!GanJLLGAxPXz$MZZ1%RKNqYJN!2A zwa;Av==Cp*l~gan|5JdB$)qmMaquAnu$+nNXn)AIhFM#q4t{b9;t>U>9TiogKjEQ~ zZ5i(UZ+C_FD{E1+Pl3jmWxar~J^SAn_A~+t)Zd&1&#T~;ZTvZ^fnK&!K1;WFrD|4z zIMV0X5hyh}wbsvvBY{n|p+7DCRt@bY@o6@oAMCOjso}WyXU)cA%MW3GvydhIM)|YL ziH@4`Kk5Rw&Kmn(Lw;c@4>cL3i88w0TtY(mDnm$hP3^fmrj8w##OIR$Pn#VQ^8+4j z_?a0U**4lnJ`Tj79F8I{cvy(GkS_Nv^7BUU?terzl2b$RiOrxf&(*0@8o5d9D+6w} zU1~g=OC{LeS3<&cro>Dr>7-ACtXTj6yJc48G=^;`RUQ&GM5=X>@bqgN%@k4V2@~iR z=+vNlC8HU6?sE@H<2As5!B>Dqg20^2nMJ|o(pcADvLmA54pVXe;3+VXaG7Agg|H!C ztC^EGjG9QlYhd*IlO`El-0|G};V<3bNlguJuv7Lo`D)PNpM)uJXAlgPQQExuF3Z9N}DdM0`cwdb%CScZC5$R-xvcI z8{_Rz5)e`Q`-+IFop}^|%h`M8n&a=D6~`ZJUYdic+cF)B`I-MPYUp`jL}Nu&6ZCL| zOR(@VgWy|`a*(B`2Bfo=yVCWNy)HOYO!}!b+=LX;Q+=Gp+qg9P;W0g`(N)Z9N>^JC z%g+v5X8POfHz4pi2hlDRt+;xLCtA)$!T_ssjQ8VytyW@>kPZt zs{5adsJlN`vEB?lG>Kn5KJG9uZWSjn4#(7~U$twL=+zkeZLy)j;355LIG%ayp41vM z%crVg+4M@AiF-*IL>t%SB!JL@R2FO*`YxfS$o+S}Mv#ybnBLIqCd;~1V!^{MHX!`) zvrWJdGUJ4QGRBN?NWc7_mhck`T`rxM@6J~%G*rv~#i9dC0d9D(1t0xhu~q4S&8_I+gT9tDL> z#pCbWIiHul16H#Y098J)dQBHznaN$>$F)IGByRp9LanAN>3TTD8(J2+*CRDXO7jS6 z8?Ymqo`QdTl*@F_(;t+^rLA!4pS0|bzxz>C`SUXF6l-Isni7z7BXb2|!2N(CV<`xt zVilqm_{7IUd+P{V0$5_hxU^S+(k829Y5Qn9uy5-xiwVjm>f2k+`j`AEzrZWehBtiS zr-dw=ChO+b0Dy-e%(zL#4Q<5W$_fcYD`E%Srs5TfN@uI^@8EVjRdfd~ALvCy1H$G; zE^XMUSVl~j#L8bDFX!zk1WtcjWu(IH)7Ay`HQ9>pFc5OTL05&?G~sH+ucRw3F_ha* zHw1i(GeRalk^Dqmyh?#HAGKWIjjgVxkc!p^vuoI39R#6Npd?N6DC%6w;ypk_-@CM; z*{Al=wxlcZX{75&ks(4PByEWdSo-E>-UFbF3wFm;7e&0D;wb)*wI{a9^~f{2$nG@-Z> z;sV)0rojmJ4W5;6PNQo6TA74;7$Qf7VC4U$;{9R(Y`sD5?>IQ$tf_x90?Q_UnB*wN z!*NjY%TFSxB=OO8WZ}^w1oI<)dQjz}BuJA|gZ*Q;?l`=CneT^vY*zKCh0QM{E*j7_ zvog$s1$oQ^)1I#?O(6=v+fjP^1d(S0YyaRai_brN+qu!1K%qRlR=UfZUW$ufR=3w; zI~BCz7F^K0UqIXiUokZCBV}=yO&lW3@IT8{VaI<$D>&BME~E4$Ah1)?s1_O`M)kc2 z@r2RdC4zxfDAJ6@t4-3>E$hgGKa9Gic5d59O6pf_sHV>Kc?z&g%s-!FSmRNk2l!WO z!K^#=Dh(k0rVb7prcNXR3{pNo%WdaST9jy)cnk$Z3`bQ(W?jD|jUOUZ6`zCf0|7Hz zy99l$GYm!Tr#I}nt917M#|~eUAH>i-J<+~@?o9H6$jQi&V98OMz>^JNB|7H#ejrKT)oGZ9 z2hYd7mwoXhPK=xqG^s;l0KZHxx3_Ni)te{IEI2Cu5vTMzD&;Ob|5woNLPYkF?mk!TK@ z-OAAVm`o0@a9+S;wMPZi?Hq*~r52eb}9D=>x25@#jJ@Ag>?wv+wlb5cnNv+>@Ig_*sMy7+yl&#}dJAs8U zv)sf-jCT+kl0Dc+(?}9+FF4kHqoRP^PQno8-ny^?^jHX<=1~LvT%LQsvptjelztGf z=+%bghf^agy)_!Onn;E)5&x2VHieztPs!4YE}DBn`~jYPLpq%8XO?J*ouKUkfS$aJsZ$ z={*9F4|(zY-_Xsp3-}4rR%wHCfl%7o|Lib`^L#^~bhFA6&L$A4;Dh4dbG<=Bhcrk? zY>`nwNkTQLP!--lDijSGqFpNK`n`_K`iTdVRvyb~fy-{^0vv@hsFd$+j_&@q9{=fjm zx8%`y*4GdD#!t)p&V3WIvZp-oo`rx4a{-AkNqW3&t3gS6V#Dm9P=$8CC@6hD%U?+w z6}5`frt*9>JXdo)?v@!VVzVtT>pRh&5lL3Z9^I%QMAjc7vjIt_b!)s#Ka|KeT z8PSXmv#d^ftqt09bcyaMC5R)KI~rVFRs=#xs3Tp^)GDr_pS9Q)1Jy>#5AyF7$XhH3 zA4!Itn9W*0D|mwCUomaAF?LX@XB-1Q83(hi6SI>`PI>1gfQMvQP5vJ z9$c)A-5K3Y9=G|;TrL$jC-ydbLE16^8vjq1NZ|;Oo8;QwcouLYMGrvqK)G4BkwWDV|akl1QDS*rmkeT=7zBXbnvkdaBbzk_Did<6!wz->J?AWPqWOXU$W z%NcQ`qg}AqekSvqrJ-hr9h#;o0b*5}1&Ijy>fOeKo-{L)3vPh$vKOL@-S7r8_(f}; z{RKw_5-tTPBxLD&KAx3MtA->P@y!!-|i~`PT`S+47fcf~`FY()&s0 zQ)58@{@|(VEf3Q!%~Zz8X1uxD=mbpLg1WrRlT5~t)K;=_HB(x-WsH9shFz>n)8S7> zs1=a7RFDZedpJKLqK@2Wsv%q#J4I>25AKpLS6R!oOO)$!I1TtDwtdiDIDSpf<%-nD zER*7N^<|Z7;XfM}(igDwaxH-{bBPuz^vzpZdwL>B?`a5sF0Z6!g$2+>iXp4dY`~oV zYKnxxQ}iOFmt`g!E=R>S>V^%&=j>7W6K>5=V9Q|{yGPpa4E}F(V>@4%e`7l-x`~5s zk@;ONk1zUZ!(Q!%ocKjK?f>rvythR@lXvoqtCCaaY8`(GER#Y<^&m6HlR8%eW5HU! z@K4MIFX>d}9g=0y4`wA@V60S%nY@vJyf2<1X;OaxSe8k>UgbUH%el$dq_zBWM~S1Q zInxTj;on>-?*}aM3%1+9O9|68riowfkblH88>GPObko*vX+Z0_zLPvB9NqZ0pgKc( zv!<>x+*r#BJ(TEA0?EoXKSWjHNG!Vd#NqkQX54VH7lol}j|U5hGPK}N4)`~Tm{NVY zI4dXHvX*WF4%0s;rKuHbZZo`h&3MX>NE-AinmoHdKkSWfE zxro?E5e?nJL!c(zNx-##F=94Uu3>n`+}M3hI)2PgmJOwnQCU*8I?0yIrD$(xC09;a zl>q@FPLjS!tam01EtaAR9=FkCB!_2d2kAV-)0U)avoM0>rk&rbBjyV+Z5D{LN_>!W z=@{azK~nr)QYjajwrRW1MUW1xr-w>lt5|qBld#np{}du`CL!59htZ>LgG`V$TkZom ze2zxFeyq|%4~OcD21*$>hHaPL{pppeLa30#C-ukM4n~!BeuI8(l9-t1FUHF% z0?->U4;+Q-qL3~wo;HpsjR>)^gv}*f+`Oh+coI+2u&k%mJ!=dvA1g|}rFgv(>N+nSj3!yhJv42Q?Z&LLyH-HzNPubKQt>0_`6IMDb+E-5tO z$*N=-8)fR535KA3@PrrA<8H zKA;Lxe0EQz(Vy*P&NNYVG%mJ?1U6=Vb+qlqWQkfHbdr$0&I0f;4savRjJEirWn@cG ztH8O4ZTi7xPqpq@V%ZWl1k+_?3pEodSJI9?TMwk?6n9_|PM4V+stfjZo7~{G}adZjyUMV)daRu5&Irc7cAAG`J+y1B8OEnWeoeA+Fx_ryqxeZ@L=GPzJ!GI)2 zMgE`tu6livo+6`lHG5`MXahyc>a#mxc?Ka* zaNJ!WG3duz>MGywxuxa!w(aU4r(^C-Ix9Ujhb>lD83#|5XLltRd=el3^9%v8Vq&d_ zihV-*FAlA-tn131AEQLlzD>ChRd{qwSXD^S^vk)NN)s0cs$0m@o1B=u394Rnq4?aa zqWCV_%4uQj(@NhIpve3nCc0ckEV~53Glsx~AB=ukj$f7)A5D*1@EFk)smNR2`71YT zAa^bTeC1r*ODCriR+`!cE@YbblQ_{T!W96pH97N|6^)o^fTVk+ES83ok4Q(-Sv{v# z(IRwag}!sF9{%2uK9Mf3t*vH6jo$S-7QFRgN@hz{TV!w|-qbDuSa+$B`3T}D9Tac7 zSV*6#d5L?-#~4W|NE6DLI`cN`~up2FZE8Zj>6qW~Q)h4nWeTUIV z37)Ye3v%1W=;!=&bXn-1*C^iGw54qXdlM;59ZS?H`_7w4$%sy z)$ZBGv2KQJzEbU97sg{G);he5$I^f65$i?%joeT`R34O1!ar_#oaucpH$zu7=w^?% zc^0=-5h0X{JGv&;D`N$c+o+SU{$7V~VT4q4^t&rA%3IO3g!Xxz!=HOfer1A0dU4kL zwxt-~=UHt8Sd)0W+0ceG8x5f(2 z4k@_cA=XAuu=m}9!g#5?{fys``3mox35EFElG%FM7>1A%7XYJolmFB-P$6q`G~ysU zOei!LMY}oZuY}Y6UG9w%FkmvSi#zQhBsvzBS1NtgH2liwvtZvzcPnwrV(+hyn?$Gz zsz5~m71!F?7ozy~96OTP?hQcz!=NHH>#pt%Br6`>jPbh0Rx>Wx;rrh(wm~GDTr}Y+ zmW5Rz@*zGi#}gBmWNCItq@sWo`{XP`r!0aqe>K~ZxGIsjvod0D6RtHaY3$a zLA4msb+E{y;>C2LW^1CoMZRY9KZ`-{wIJlryRbbDbvCVbi4?X2DmDLp-kn}%MT*Pw z-q14mT=w1!ZFVu-SFd(4O)S(C&8}9p5YG29y3JHN5Ru?i(iM61!DRhWC9gw=;(MU=r(m6&lKE#D70LGN`VPx$LW2IyP)Z_% z%9Z9))WRXQR89cClC5zEjjTg{;$WNgE~>P5B!4%iPXWw0qXiPXg_7@JmfB*($sm4( zR8m)cs^+N&^iWsd2%W(~`HVG9RkfIgXBD=UlNaB7rsxl0VOfV#mRA9z1(4<~afepV z`rv!;i(7i=@W&f*AzRj>?kzwYEA}?ODSWt11=P5cpl{G_On5uf5CF?NhXhTZ(O1=M z@d-Ff7A|MnQ-LQZ?E6*^KXEDi{62g`Ezms>H7rSgNr2Cr?rFnRSN#~&G`JyO!reK| z5J>bD+oOi!Tzk@$N-UQ|Nn3%m9D!LHac}b%X&qd25;O?THy=_}DpZgPga?!K@-2y= zBhOdrX^^+?KGVkjP{>6E4cH@>3Z(?D@od4_=UeJC>c~~Ev0womjc*zid>EA!JraMr zb(DL{RA5Q?iAPR7_*$IrIQnrTj4O+1ClwE=80A{IQLG3w1L5ALC6%2!|2?{}{C;ws zEB^ck?FfIe@(c=4t|FDXyF3DnX@OBrLi7j(FoiI+DiD4_l3;{&sfJqI7j4V)vN2+bwSqexWt6jmhP70*!$Iy<309R zpp5A3u2!HxcIX$4ukffDKW#?@-cqmCiO?|$Lwrmyz`d>c?+$kG-4!58XLh)j5dV&% z^h^&zNVJiD;mkF8lf4j(M7ThC^~Pfz17^(wzT%v?1J zx7|3F)+{{VC3=7T*LVT2uO*P*O8e7s_D9SyyfMb^HE~B<0~5ng?y(q~MTS$|8(P2R z^Drcbf#3r25{_hFT@F=S_(v5m#dG4s4jPwFuk(J9ML}REXn=Sm$@&nO9W9SXMSaTR z3pfjm{wd^FY6Gx(iDExLW0$ZwAb|){(xs0CbkxYD4HTeBcr7a$1gUf`@1BkY&FwoQ zGTjxlOJ;C$zSsOek~y!(kEYQ1Dt4e;e%IYK!u|Qb(|ok12<+J^2YBpi{k<}Mw3(m1 zyilA*^k}(}Qg8a7$RR0#d9V|<;yq;Wv)sT0>}_p(8;@mFLnP~%digp6-81pX@fI-} z&X?|BnPv0d!}J_;Vfmf)b^yw$*G-Nv{Zp5F|%W^UDNb;q!H6#T{ zq;)2D^!BzImGM2MgF*ALDXqyO)Be76zb0^xrfp+a)s(05L-#q4dLg$=lOhx{@G}LU zUPxc@Da|{!J^BPJVIR92i~Jv{G%u0Z^uLoKxeg_PLCwDhOJ@`dZ8e%Bu`+iBwaeDM7iAWN z3Erj`(y~aOw6JMQ=9O>Lp2@yQtQTLa(!Adz9HrFQHf+Wbr>?Z4n;L$Cq-tXYhYkop z!~I$@k97IE9}Vn%LgS0AmCseH)Yj0-$2sM!hYW8ZYlHuYBDj zLXD5#9!G^?qlxiG0?rdkbY61>C!ZR=AFelw6!uOxX=Vy|bXynhL4QqE3bhyoA*k@% z(iRctuqMSKU-}q7e3RjO$WNja;h>>`=B)wg#9ew}W0s4AMMqQx=ItjKMwb}G-LBJ( z={HS$vw(%z(y1XlCK23Xa+X3jnFOJRc?W-zI4F78-A6)c0 z?Ec3w@0o)<9^2rh%B|_3ZqKfFt4>so*y|C>PoF6lYU}@~e^*8rJZ&hDD|wYfP0b9U zC4?3$Fw4O~e%N?r-psKz7l=@IRtzRFGjf2&r49|S70ejv%@1Hmx0;9q{*mEOOyeG9 z90}u$V{BDB-SiN+)tx&)k#bi@aomYg3_L5Jj6wc){W*8%I2!o6>Mn*Cq&%GS{u|phEqVFI2B(LC(@$*urT#={`;)#K;G^Z**C14HgZmhbKaOuZwwhP%juY_eoK*fxdQZ=0SSi}lNuNYY{-8;|^K@Lx~Yf@Xt%Vp0s_Nj5`r z?w$N5AJmB)D^?x==H6Olq!+SDfexH&ggPB8OS*@{NW1G~tKrt8Cea}XkO}fqQB5${ zXjKz$$@`Vr@&r?B9DDM%!)DU=3%37+yJ{nJ5c52quCJMhYY%!u08&>2m2U)_r0_s^2PePpT}uXV4nW%$l!lMUO~a<$PH%f!(oV5bN>`fcdM#aVR6%EPCD_t8qp)FD$d7U$G|K%x9R>8#r;0hp zRO?b$X+@c$%1Hecr7$L6F>x}$|9+LbD?f*&Ib()#n#f|X0sEGEd0?;*b}=+R^9G6xLQVQ!X~Da>0HAwL0!N-t^FHwMlxs;B2Q3qX6^bX6 zHQg|wrmV~0%f*He8{^E;*O5alYUL;mg)jM~!8m?>unv|(fZlPPQNEpl>C%+-_}|Y%B=#K$Lk`M=7!W1saQ<%YB*63|@KS z>!KcF+FKLT40SMTTdl|m!PQcJ718-TIkVkOT3*avOibZ+_x=MWW42^gE0MP$s)JZ0 z0eBJGTbgQKsH^1hwnOvcP!|rDtQzXAC#{6=vM1KHKGpyL4r9wlO@_v`y&7+d4@W1T zLe&zMHp^*1~=;%y2c&WY?)J*j|aYhupCOqCV@errbbOxSXzLgR?R3_|N})L0mqa)L<_C3{@Af+=MfuP5L1&Zz2mU6*%5UDoW12Txt@gLXCHHlmw@+{Krcp3tR%Kg$fdm zarKoox2`bD{4L;}nH~?A49B`3LIu@|dP6xp9p|yfiEDF6>wERkroR;##^O>`t^h?3 z^mSOMC5)<*AyQ!-H$?U`+i5lceE|1(7j5yCjtuqo$|nRL;M?g1)^_t?QlAQYpM zf38vB7k?D$<%`zZYRb_qwmq03ih(|C*wPnL^3-Wu(TMShFXZH{(Grq$P?!21%=meDGawps1?RYZ-&*qeK(Nrs)D?N8!+u--L?C`Co%y4 zKLEgIMaafl4GF%=K7Wh{QzG0)tfV&tILtlVRR?flAw`H(J(Z-^q~aRtpen(7nHkiM z-Nn6>Fuj84VrPBVhrE!hR|b~)tpZXg+J=Z3Z!4G(>e{H7aN2|eCoejvGg~;$sD@ZEE0HQd(?VmUH=%p?6B&-WhjgnJcnFzKv2B-=*UCrGy zL9}mZ_j>{48tw()$EudLy5K6JPoNvc}Z;l*}Qhf&fI1EoJ>JRZlL6NmOc}0McV2eTrOI*|y z3`2v1&BM@O@O$?on^J~ndJTFxocD0wtc{Rl===#t1Qz`f1$d7N!Q?Wt5)9VZ*v2yn zzNH-MX;ES8Q>rM;*{uOOpQ{d8%TR~{7)e}NRpUS*v8<-kDRv2*rHb=(a0gqy?7%GB zGfZHMeQvajo&%P?E0g_0Rgkwr=FoDQ>OzvSRhE-v3{=BQLLm65ikml-`WwsY(ljd? z^-p)PKpB4MD^$v;-`JHdcZ7+sdD%A=O!Y_(FV-9p=}y9(Anf!AB5x9)JNhEl`9w8$3mdN;s7s zO^EI)stK$1ejls{Jc4Uz7e1;Lm04utR~+rqD7cDy8rInQOx&pjyQ8qW0J(mC=`$6b zL=WQ^-IzI8_v{C(_Wb#JtZGi-PE|)$6?JxajdTc&)&iRw=~qYRL<)uJ;fCAJm7o_@ zd#EQqyyHQa^9nI2)-O3v@g4u>op_%_SiD^%kY>Dg^8)oivHPD^G7)Z6uUNBr;iisU z`GbtJXh^XmKs8^bc`a~t6_X@rar}0T3JB8{A_(yNBA7_0zVduaw+q@p+Koz;nt?G(4A3`4*V%DUY3F^#=|c-b(Se;DaN-WP21%!(`-H)3v~OKajl{U z!eMjouI>N4#*(M+bXe&M8;DlYNyNUllO~`>gGkknRmVY@%5J}Z)x^~6reqnYVij!g zuC0gj^O`oqL-lIm5AFHwWk$gvWbUc&4S*tV^+$&5e+5=}9g4}WCx~5mH|xtf(ay{n ztBqZ>&`RLYc3fXs6_I`T2alj;)i?+NK~Z=+?W?KwUr#eQTh7j~@tCmYx*LOsFuk*9CKc_dUdtT1&L;osE}Vznu2s7}ykc{TAA8EpYNNe}2<;T`B#+7or2Qv{2c>jYg z>oHB|cW4Jxfq%1jW&K%{>{lYI(JIP1CeomEw96Cx2tvoHrWM$&TmenJMV@$TT!kG^ zg^RW}HaVd?!R>pPw`xQZD)Pm=5K*{zmkX(q1<=}^bfplw3TBcF-xw^8Z()uP^4WiQ z&uwGa%!5Pa$&Svm6c8AhZgZr8vE#)!9N+8=YN}L>q%n$vv{J$_sPRqGOVU{xK;*yQp%OlE{`!op4#EI z&rEfAGs>ezU2BM%(nt2#y=iA&FqqAX%mbzM1a5#~uN6nqG(-xFJM$jOZpv$R~g z-2>pAs0*{|(ju_;#o28?n(d zNpbqXNwr}%fKniHL^8hSa25B?ACoC(&nkiJ*X?-@b{|;4qzB#k(wVTlFJNV2Qo-P;qqd^Oc7GQsKsus1T2bew1M3 z#~%bb`2j3NO0>mERY_p(D@D@`^0+;f@oi0tu+6-FLmeBr$t>SwWMTggRZ4UpL+g>sn-n79T1E%xmFKPOyVP{-~!gRA? z$9tP3^mA-@vij&_;(15$1_uk)nTwa&+xxCB3yaisJ1T#7;)2@u26+ymZW8@CA_%3L zYRVJkvUR*xG=%`DI}3B^SFMRXlGiC;6Ryx(_hJ|aWa7D(pC;|EH30S-=@g(8iKYU7 zY_=81RU=Up2<%?|k{X8|hZ_J~Xtn0fY(5!7Rp1)QAy{}3JTV|?2mC}-ggi1z4)jyR zT=#OZ(bsiuNy6jiBF=cBw!o9J%n8Zt6uU>j=9adGUvoq`o8^}1yT(IBlF#{_ zV%8$DY!h%dmHU0Y>Mxg^6`SJ)IN`VZ`Tns$4E&u?e930k$Ies00oam%P@j zDGD_Sx&l}6?(o~Oc%=PiI&W?9hbH|&o5Er+4Tp8ESu}Up)RZIMQXx@wX7zeA(Viww zb!3koSt2)N$*Nb%4MEfSoziTiRL^B=O2) zB=C538supAL_%yW#&y7GWKKl{cC>|aQ8K3qeaAvyz3j;;Da10tp>dACFwObT{SRGi zRonFH)2Yje&>lijt^s~PKDy`-2@u-Lo@xW!4^JzRQc$;c!B($s#~CN*GM&crH8m4g zQRF9YEG4eHt4wA1vnIBb>wtjruoM2s~(ox6;~oqn3E2- zEMr!p0v5z`AUV)LknJaGI>-;Ut)>3m96rpe3IN6?-DW$I;(7gn}3hiID z!8AR;L^QFwuWiTrUCXkSw9iwMIR|2&r;=Wyube;zrGUrWkNvmE8C68%pBFeHr^F!9 zH-}cqmCSez;lX$~09EYsIn4evlY= zCy%^QLr>}!%MXoOA$Pr1`yD$Q!{1Txy->(Vs}0vkrT3X8W`dt`a@NjazSJ?$Dh=b4 zQvx+vnGoL9yx3=EQzuef{iv=4naQ`tDa8tO4>@GD{XrY2?D{LuX=m<9`uw{dQl`G1 z_DMJ{N~9k*N7a5F69I{U(U~VBTu*opKWILy{HiViQOZF*Yh6(w3Ot1^r1}cF0wOlY z53QshNf1CI7W4WL-9y7mCMtRM?#jot@V=b73`d4`6nG^knqv%&9NEl)FGV_4s35Ct zBUYrjmCzV;eFbs`ayRji=5D{E09;F36!+j>=D1K>mr;i8YzXAY2)e_B)@)EA6*Wna z`8?r=c99(oM{er=9C8#Tw@*c46Q@VWRzLjVHJ;3}jE}^Nv3?^MjM1PXpA0l*0SS&X zXpxpv$r-obM8Tu!z`eYexLph}#ftY{mOkss@w^_x3YM?xty(IAJUYgvJ>j5~_^Mtj z^trPQ-UvzRmuxFVACAH=v1sR^PJevT#h`UIRqb!PPb2DBTDaJ>YZ6<$6-`dEtY35Q zZIVN-z4vP(yIolUGKQsI*I{IEN7WW`_uoiHM+=f1Bpb zK?^Lu`ZU2IMWkeEB56v*T!~N==}vLBMtMtQY1OP{Y5a5R8Uy?>5IHS#1s4{g`~z*7 zo>q5CD9Mr#0U6h0PhNZbSk&{vlN~|7;P}|sLoVBZco{;tzmxY)SN1JN{&6c#`x*U~ z@@Hppj9($$uE)EOI#?1YA6zf|a`J6@c@Zkr*VPT25fA+?BZBaXuz7jcDut(Ry?9+P zUu>h9m{=2^^c#ICdzzI@18JymJK)2S)1T|yW7Zy|SuKg3Ez1M2`=U8W&KWKy;q z>GO*DD*Xg>sj6Fd=eqVp>qDdt3uu4t2;q_kw zGM@en<53Kbk3LP^FdJ}`FQXC~plc(7zeD^$w!6WdWO5NY#4yRLM7b0x{qaJYBiLp1 zhk(?1el26pvKx>P!`V{Blz+y5FlAULPl`SqSkWuJQANc7;{@T5Ogde&xwr;BiGt$x zHIYl&rZ$vgC73I=t!0(G`usUqH!+xEk8=xg zkI>{YN*WO_FMaW;{(J3MWU5U13Lr~l&`*O`1_ZPEoYep{1v3M0)mjfK8a8cE@2jBBWI$e zF;9yIRw&Z~MDxE|LC3*bFhDRu+Cc$V(h?vd`0AUVJZao%2BAdIp zTmBE4)ND)Vd8!TCtA*75(%T-S-nr$^h)a?c7vW(+j(z*N+||ylvF%X^4~PC?bn~>Z z8g@Kdl8qSyuW@5z3hoTScUDm8$#eJz@*yVCmUH9^@H*#X5x%96a6YCOrwh6v3Csk zu-<5Z)JKHbC5&>zTLpM<@U^{oqaHCLl#;f0o1gvjE@pB2FIq+wXdo7$XI5M{2Rk`z zZT(Den1r#PqPr%BqzCs|n!>A5s5|p62v0SFV(4l!uQ<`L8yzO8EV4Hhui=ESM4G!b z$6irmarzaa?5>`V=PAixyD4$^REKAoT c0ddHqC()ls$j4clez94UPK@5!d!MSg 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

A$~y6{jZKn1kIHF% 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 Cd6-@R literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504230002-Config.rsc b/MikroMaster/20260504/20260504230002-Config.rsc new file mode 100644 index 0000000..b2c2c7b --- /dev/null +++ b/MikroMaster/20260504/20260504230002-Config.rsc @@ -0,0 +1,4483 @@ +# 2026-05-04 23:00:05 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 :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\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\r\ + \n" +add comment=updateVPNList dont-require-permissions=no name=dnsLookup owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":\ + global ListName\r\ + \n:global Servers\r\ + \n:global Done\r\ + \n\r\ + \n#has \$Done been initialized\?\r\ + \n:if ([:typeof \$Done] != \"boolean\") do={\r\ + \n :set Done true;\r\ + \n}\r\ + \n\r\ + \n#make sure previous runs have finished\r\ + \nwhile (!\$Done) do={\r\ + \n :nothing;\r\ + \n}\r\ + \n\r\ + \n#block any other runs\r\ + \n:set Done false;\r\ + \n\r\ + \n#delete old address lists\r\ + \n:foreach aListItem in=[/ip firewall address-list find list=\$ListName] d\ + o={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n\r\ + \n:foreach aServer in=\$Servers do={\r\ + \n#force the dns entries to be cached\r\ + \n :do {\r\ + \n :resolve \$aServer;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\"\r\ + \n }\r\ + \n\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aServer)\ + ] do={\r\ + \n#if it's an A records add it directly\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListName address=\$\ + newAddress comment=\$aServer;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \"\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n#if it's a CNAME follow it until we get A records\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname\r\ + \n :set cname [/ip dns cache all find where (name=\$aServer && \ + type=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n \r\ + \n#add the a records we found\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListName addres\ + s=[/ip dns cache all get \$aRecord data] comment=\$aServer;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n#allow other scripts to call this\r\ + \n:set Done true\r\ + \n" +add comment=updateVPNList dont-require-permissions=no name=VPNList owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":\ + global Servers {\r\ + \n# Feel free to use your own unblock list ;)\r\ + \n\"telegra.ph\";\r\ + \n\"grani.ru\";\r\ + \n\"xhamster.com\";\r\ + \n\"kasparov.ru\";\r\ + \n\"lostfilm.tv\";\r\ + \n\"rutracker.org\";\r\ + \n\"lurkmore.to\";\r\ + \n\"dou.ua\";\r\ + \n\"youporn.com\";\r\ + \n\"pornolab.net\";\r\ + \n\"crimerussia.com\";\r\ + \n\"telegram.org\";\r\ + \n\"api.telegram.org\";\r\ + \n\"telegram.me\";\r\ + \n\"t.me\";\r\ + \n}\r\ + \n:global ListName VPN\r\ + \n\r\ + \n/system script run dnsLookup\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 +add address=149.154.164.13 comment=telegra.ph list=VPN +add address=194.85.61.76 comment=grani.ru list=VPN +add address=109.70.26.37 comment=grani.ru list=VPN +add address=104.16.3.81 comment=xhamster.com list=VPN +add address=104.16.4.81 comment=xhamster.com list=VPN +add address=188.114.97.1 comment=lostfilm.tv list=VPN +add address=188.114.96.1 comment=lostfilm.tv list=VPN +add address=172.67.182.196 comment=rutracker.org list=VPN +add address=104.21.32.39 comment=rutracker.org list=VPN +add address=104.247.81.99 comment=lurkmore.to list=VPN +add address=8.6.112.6 comment=dou.ua list=VPN +add address=8.47.69.6 comment=dou.ua list=VPN +add address=66.254.114.79 comment=youporn.com list=VPN +add address=185.110.92.40 comment=pornolab.net list=VPN +add address=185.110.92.41 comment=pornolab.net list=VPN +add address=104.21.71.238 comment=crimerussia.com list=VPN +add address=172.67.172.95 comment=crimerussia.com list=VPN +add address=149.154.167.99 comment=telegram.org list=VPN +add address=149.154.166.110 comment=api.telegram.org list=VPN +/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/20260504230002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504230002-Diff-Config.rsc new file mode 100644 index 0000000..146fd13 --- /dev/null +++ b/MikroMaster/history/20260504/20260504230002-Diff-Config.rsc @@ -0,0 +1,8 @@ +3315d3314 +< \n\"api.telegram.org\";\r\ +4155d4153 +< add address=188.114.97.1 comment=lostfilm.tv list=VPN +4156a4155 +> add address=188.114.97.1 comment=lostfilm.tv list=VPN +4168d4166 +< add address=149.154.166.110 comment=api.telegram.org list=VPN -- 2.52.0