From b1d44f4ff0e478ff5b9b2bdc6a74e1d50b998b4e Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 05:40:38 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 05:40:38. --- .../20260505/20260505054002-Binary.backup | Bin 0 -> 270775 bytes .../20260505/20260505054002-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505054002-Diff-Config.rsc | 16 + 3 files changed, 4522 insertions(+) create mode 100644 MikroMaster/20260505/20260505054002-Binary.backup create mode 100644 MikroMaster/20260505/20260505054002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505054002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505054002-Binary.backup b/MikroMaster/20260505/20260505054002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0833dd449376b77c2e80e248841f49ae2b64b2e0 GIT binary patch literal 270775 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

&6-+D*3 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

&Sz=ZmTE)?4DmM)J-lSn4q$VaV)yE8 z(wIDP%R*zv-JP;ZZhR5Aq}C*Pda|)%0Wy|9FJ z1UDOZ$HQ4pi~!14PqDIO$v29MCgU>egfjo^q(XnZ8GEm`7bX*e)|i%K7x6J7x6w#z zS*T$oN1Pj1VW0mFN(` z$=#>k6+#8;hi$@HFUVt|uciQZ5E%^T?#Oy<_yw`F{>o2Qh)%joJC-vZAzd4)R;cUw z+X-#0G{x`Gz4a0I;HD;zdsFp$vD0xbq=oy!u2dAR{KZQeJ0+(nxAxP@UOo(KT8(8~ z*gQe?)Eh+46bAqf9pa|jkKDj}?A9B0I}dpZGlZU}dilzvhlc6g6jg+LII`sS!W2~c zXRY&(`kAvC8uS^N;n@~*p8adPfM;S{h7D@ADarj`aTZIUCb$QfbOt=2nID82J_l%gkGFCYF@T8vX4fRoHbLXc2}kSX$@SMkw?=bgFzl zEIc!Ldt($lF{~q<|BN!uWQ^}rM-t^Y8k<+A*%b8VBdqO!`aPdPHlec#ASJEV-S4=+ z15N&gO$KhoG)-q$PCuSwwd(D_ulc?PeW)pM&J zzL77+Os*Y;zgsJoWp72+6Imd-fO|;GrtoLQe)s{Qq|*erTCR9ZMZ;Gi_)@K3%ZyVY z|Hd+%UP-R4c{oIioTk|?Qd?OTX|+7UUx7HVCn(W3wC3%iYk%BV@FKYhOVHjRfyAI% zzfFS*N7%rA1WnVV?_uE|h&1y0)WhHnWX-Ur_x;e+IHwM&Gomn-QkRVP{~O5uouIp# zPx~XbC0=7u44ibq97kEmoP%Kb%s!($Ap%xSc9t)yf+?@4lMNM`0uQl+Y&7g`WxBSt8cT@_ia6(!YKL)o+eGsvJ z(mkK;sl@)YsA^u65{6-iJJ4XOnEHpP=x;YKVZ|QG)Og&s`ETQCUyEFbBj51ljz_a1VSP(uWjui%TONg7aU|F}NfyWyYb_S}J>e{KK;jAKGl`FSC25SNRBz@a`v6+@ zS)3BVs&Qv>&{hucdyU?&)B6L`@0pYMx2DTbxjFgWi07Md#pb|Wk*Wuh`K7lp$z@s; z|1wub1yoPhaHO;gW+7}OuD2+9@UPTu#>A2O%=>&Ehxe2dO!o^DOVP+tRayimTY}{g z5Kpkr6)>R3qXZg|<=59#{^3&NUl!&B_rXOLtJaXC$brgJA@r`S!Ex#!Z?BluTfg%K zvN1!w23WTd+Gc9>!Evz{F8MMgE>0jAG_at{sUW+WUKH3uTk2!hK387mmR&9_K(zoI zi*l1OY|2>6=ZV12ESUe{LVa{1<>Yh*ox;71%F1Is}Ij9}N#2j?A}v z%bki?8)O19CPUWOCznKQf=;TZuf&Gr!~SMfG@&4PtLsvq*H}n&hRmXq6@Y1m6JI)z z6Jp~O1~Tm(s}#3bdHOsbOY-Bpwi@_7C+bMOU5v+IMpG#g%CI21@3UlAW)VLtpvGw} z{(X(Vz(r}XaQe<~zg}GbI6^;A69(Nnx;j~xukq0c+#V4hp$gPMRD>x&h*#&*XO1l5 zYLZHlTPmbF0%cl-*!)QTlb^;@)yT6}u1(r(@4T#fZ{(WH;_BBuOcJ2WnE2ILk-fTKtuRG=APln75p~D+I{r5CW~4}CZiO<3{+mBN*$I01VFC{>&^O_e^^sL&ta>!%bumsEl13U2+qo9t&Hp= zGktoJ!>1uo2HTtul<8Zt+?P0GFgt!q%ikD&Iw4jz3^a=nK1H~QbZHCtNNvm_5r2ll zS#2Bc7zq;rx171h6_RXbJ(I$7t)Fxs4+z6oikj;@$~8o4hQ;)|MQvX>lH2h#CDyx2 zztSOUpZf2W?N%Hssna?F$JolYf@;xUP;FABtvxg5-5YmtJCmo;XMUP6XvzqX_Uoi3by^a7DS%yP2EkK zk~ZDV3~~%{Ki0IZL5*QCk@(k=acoo_^Xwkyi1)54-f;|Ul(;uxy32q z#=coTtp|dNa)+23={qL^p9h1qHKK|@G;MxcP09)iHQJZD%BHp#Mh5`F!nqVEf3D!H z1&4JQMvQ+{e5=PCy|AY`A+Q;5N^tV))qtRJ8DyQMz<~Cy=?kJQ)pz<)ZS1j${d-h! z=Vn3lrtvoW&ztMZDkXDm)@H>_pO=rkg@~k|Kww5(l)oa(VeEMo@# zJk@URj`w2ABQalETC}zJxEj6o_;U#+wrezghef~;T_f(Peue?fn>#SOvER<=-02-m z(G;lh5Z|<;X=O0wRTYsK^ua2_HJQ*}wM1Lgo9EB32&UGmA-%D(-?@vDfQgvBtJoQPR1Q#!#(lb`vd!y zd-j(QNRT^qY9^Ni1`&{H)ntz&zQx|^Z6IRi@$mCM5gn&IeGUc*=L94%fu(mezZm(R zip#qRVKNF)86f~K@UQIsi`cyo>uXP&OgBqZrc|b)GBZ-xr!P4MNFwQSvxR+1xX?Yj zeWMVU-RtoDJcVtgh`U)Z&LiRPl9f&CabF~%cjhqtbtp4)TH=lCn#W2^CvI>Ap=n@s zaLJu_iE>^?L(c2$moQNqG`-0{h}+gX;SYW9mw?Ha>CiH^ zUby+5gwODC&M}>mdUa*mcU?;7jo)Lv>g4UHDw_8vJ|@F0d>?6?e29ZOJ`Ej=Q{b`& zK&OL5jjvx-5OrL4NGZaa!&7;zgOSXb;E|e^J9rbF+MqXqT93)Y?o84}W zY2wvQEeE2rGm2cB30fRjPULv$^)@d%*)_(9$;$Yq$HMN5H>x{T6Iln*)+P_v2zfe+ zdhkAO6!gvNNQ*(Pr=sKGI~k?p%WGcfyNp81Fu~lT(i2^i=g?DBtzJdkFb$;7Kw66? z@-B#s{WRR6pvP3pel`SoaSIlnt^CdG>b9#^m;YUHR~WY1Iirg8>>=`5v!{#HTe61A z5vlLjd~@7A=-7j}Q0r4u()X>k56zRU39tT#m;n@{lt<=W*D=l{@a^zbHC{1VM(O`7 z0xw39)zne5eG_EO-}>AINY#6B_2y_z+9#ceHdvDiNWnf@YKx~0ZjoW2vZwBQV`K&r znwnf+;&$J~w%h}Y8{#h>EwFW=%OUcCw>cSZ4LU(tyGDlHDP|%X0ZN|a?v0vo?4>zN zlGhlK&;mzTTWZ1vOrYzurFv#2VO55bQd8~raFx8>#a%OWc~TaZY3<8_K@SCiggt}(7$P4VIH0q%)6UZ>p_xw>J+!6qH7EfYpK94&RV$su8?A9!`+$7j@ZnR;>h8S zno8IsY%>JRgWsbNUyWl(*&H0PtZAXPbPFc!JVzmQbN{#6bIg7kDeJgJ4){;#?gH=2uxFF~kX^^QCM==l`j{ zg(+-L8rmVkIkRJ#o0FMsqLk8r%nmoBe@xOP;QMSinu=;9^D0yNqpno&NfmYP6p zss?K(a}Ld*Z-I7Ccrtrq`mt`F{Z~Z43m28`=&O+-5m_TkDQkQK1HL0H`r2e z>C=>$vQoli+i-l~MwJs*N$P}Ux3==q!XA4TqQE--k|1!It84^zn_%*8^&C9Ly>G{C zj6>VD#U06sd?|@9KFUV++jSbhU_3toY$YkNQ(D};ApT0PG2%efM7o!jJsl;THW zoQg*Kh5;hf1Nq4}O&k>v8acAUNsUBN*+_M$I_X;kL=f%{SVN!#Fj60S+8A9^B)}$@ zS*{|7K!L}?u~Q~mPPd(%X#5kCE$FX@I_!~`Z_3`(A0iQ5T>{p?;h;!|Ay(3A!R$KG z50~grt*Bj&W7M;Q14fvN(>dlAqV7Pr)y^E@s@Zda=AX1#G*681dI4~I@)EZS+MP`c zdvV4(rCsk{wjO2^V;Oqp7OjXLy;E!N!2NT5X&H5TY8&B$L9Ue4;+4zORemZ?lI~Yi ze*7N6P6rcSuk^h%)Xkg&SgHVOoeKIvW%-;)=~Up@S$6x-Km1Lku>ZS)F@*^9C_{~jg5r=_%3~O`YiR@|)mEcQ=T7ca_C_jW}aB6c+ zAa0N?o>gT>p!Y^t{5OQ?406{khC0+jmu;Qf$qPi~FR?Mly}&Bcd_X*9skaUF5+E?u z-gpz8a9qsXU7{!;4BcY(+*%rrsPg!>yu@q<$1ggN%#`7LLm4a8St5c>NIyl^%ok-; zFb{y|K8wTgA!xXUqr#}EP>*havZd5BzTyJ^ca1g6TS(H<)8fXtS@USoX=L zC)KcK4+239>$c{Ng&yhWRq+NyOUMvi;Ray1t@FaBV?k^bpuw=nk$FUK&iTMe=dZ6t z{KWVX`}@nMw>+p6ct;F`zmeH~Sj7 zvb}BxqqTsEQvfMmxG|Yn2v;ZLfHh=i(@YRiLc*xFVoqr`f1uJNa0xniD(snEek%6- zO=!y&h136WY>cy|dA1pZ>4`OHZdMODshXTDxv!ofmqypZ|;NnE5kZ+ewY z^n9;Drq#^cu<2b=h`M$+JXa?WP6vfy`HtXdka!Q$f&_L|eLa0Rs(8&4x&76}uNKg%7qGkN@eSW*8L z)AgWx97U@#+Q5vol9c^TP#a77V;FW9H z#=!9Sc|^yk*RbqBDXQv^Ii0LqA|0{(p&l=i2fCV%e{7fJiDbyd3)i11nxUj6f9lfS zu40Y$r#ky0`@3&o!*9qANLIDB4l-)w>XRr9=wdz(ycWs_XQ@MYT^X+2H5cWdMKRp( zaSVd?%vk7)kj(WBgl4wthOB3(bN$S@?STn4IWsdZI@s8bCUL3^s9dS$SiV1>?g>Uy z=+y?+L4iE!3@k;f<~gDqz$#>RXo9hglbTZVN4I^4a(jYrP?3CB$ssv^+1wkau{RVs z3Lz3GsEevik~GUxYgv_E&DMv_*?a2~S^f^-%2j6_tHonek}-0~w3kL&`|XqGC6P`w zX|0HsYt9paaxtW${?u+qh=FjA`j8g_5n<;r?-v@@kNH=LEHl`g@uwA1 z1&rUEOvCX$M9Q{kV8K$B?WQ7Za^RxtcD}1Ni!~m8OKAKk)IM;~AA)x;cbexa_%{Pb z3^`Fn;>N7Se+ryI5If&SWj%VZB9bNseoht?wSl(8W#z+(hLo|(8l*|r1g_H{LvSmF z8S2{1=k-`iOtX;~YzU!f4ki@Jzg|)*9;!wP+c8SE?WQDFfTEd>kZ2$uSYPlh z|4;XE8^e?)NWc8XYX#$)Uj;77W|ZV2Rv}h~WATu&VR=LTnhhbA2CsR5T`}gG)(DO{ z(=oCU0Z#k0iGkk=gtuY8z^GZ*!^{t6&$}2U9e~0Hm)#XmUsZ|nugTnl$vO$fc| zHEFUF`3D}@mNn77SE1NQOvWM#iOSe23%YUp>oXJbs!kXpyV956v&>v=D!%?Hf|lfV z@8t+EI=*j~id?1%Yj^fze`aeLoa%hR!- zfoLuoo&*(oVySF=Phm%}UYt6IQ*^P2e~K|#4Qb73aEPb11%=VRkuN89sLr8P29tD4 z?NlpAoZ|M)V&6Kj=qw zQDk`_S|Y;Y_~ESv%<1-*{1)WU^l;F79L4^ZHr=Awn8N-XU-X+g`6d! zm_xVn5H#*T28BKr?j^n^iBi*)dSvZ^&T#~vf0L>XFMiz+`h(NPWvD?t39?T?C7+-* zJvLSyRlFD>z(g#Sr38@}DsW_Ybc31e`HVtM=azMk$+4NW)H^r|#<8;F*}Kx2qlUlI zw$4Ay=#_I-%`}LlWpDi^jSCM#GH}lbjA?W3Sms3P6jY_?M3Oo!sRnt)vpcgsw7@?G zSe2N~9_#iaDJI(@tl^uKTu&efl`ScGlxt@PD=5N#_4{0ye`63{$b2gJvjNzPUFDg) zdJ}w)OfKb39aZy_H|%pD9~5fbeD4fPj)@=Nt8EtQ7cZBfWl3CapzdZDbm4N z3Ib5rH2qo)bLoSRmS77rU353w! z6^J@e+a8{Os0mFW%Q`7V%I2lkHD;!b@ztuDmq&^BnH4srumI-!{h+B?#=%UCMx0a$ z1u*c@YzJ^~Us-#8MQxx+(ZntB^_6c(D^cO$sIypXjvXQaC`Fa++uxXa=KL^mwr5X+ zSx=DsJ5(ktgV$SdYF0wU-|G=7NJ4~&KHTm0aAr8;LJp{3CWIn3)`W}_Prd^dQXm!8 znhVjcw)aa;LV(giX($Rb!@%=gC{PgC7H$skZt#v>SaXsDZt%OysL{PDzPl)X>QguL z;=H)x&2*8A!(7~y7uX&p+FHUocO$)R0EHf>aahGQdot{V8V|Tw1M*X500pG|!zj&> z02uDz7bxtwh4}?%b7({-QD$)Y2g{NHO?x}b{+U)Hygn}3%!z7Wj2W4ecQCXrLT_#w z8Hc|Se>^N4L8BWnp8;ycDTozqQ6sQSG~u|@*Rq^qqM*COqnukVSn+zcC*wMEJk1YW$`W z{jNe)mQ7tlGPpA9K{YZlmYIK@s&ptrU8dvIRwuQK^mGJFE6Fzh6+lGV#VRXB3Z|~k z+zNGp4f(+G60lU1*Ps3xF;FFi9zNIH*CFWlOdPV*v4>=v8iZofUqKu79`;mm{xz*h zcio0cAr$x6FxAG#ybdn`J#uZmniAMLB;GlwiMz2oMWi+n9G7>1>}t!mO@Om^KdRsm z*V6kh2Cfr;=U9?mT|SgPAdDchR*xReXX=qxh`;2-tGKAi1PRs>{VCIZR? zjsSe?wRfj+4dJ+Rn0^iPfr@o(o@)?;u6SvHZ zqsB$rjiy;T{G`)mBF-A+zB!O#(MeXE=Ry^&l5Y&u0}+sW%jqr2t5p#l1oUK z_B5F}md_B0m8e5nr_?;dE2ss-;%sd*@IKePk83#-5LzHYAzH#<*rCI-j$LJ;XO+gu#kJNX2yXq4OIVMxzpQ2sR%HYr|P zK+@))w+ayc?h?ph*9C3gIaf;|F#uoq z?9gENQI3>1Vc}>vn8q0J;wN3dzQ`r7)Aa2vuByVWG1~N?{Z%{6O6SZgHJH2t)lXnx zNdlkP8?m$fb@EB!4;M9e*FjrE!mA)r9U>vS`%?RLeUnfZ>}5QR!a*gQA8SIAo`4=Q zB4#hgY{J~f)*B@0q^y&Y`w!M$v}aSW@z{}jsrcqZm^!(fO7O&vQxg%;Ma_D`6rgb6 z&4X{u6A_8 z1FNK+5JN&6xn|a1v2hs}aG3uHi$%wCNoryXV+K4eRnxB&On$IE5uS04X&)RxZ0b%~ zYwx#Lb(v`}MfH)GzY2=CR`Ty{0cao8W;T53fxYtK1=`xK;NUZUd*>prsP-$)< zh~kObtFSD!-}PU8WZj+E(YA{#7IwncUhkW!Z~+AVZ|QAt%S^1dDI$f($rDtJ|Mw*Z zq2Z_c88Id_VAQ$+tg1h#z-V7rq*rEW;mR9a%MrZ$@XbvZtvV<~a%_2$O8sc)&AtIFpr18V-aO{0wo%I; z{c3s~Vr7EFi_d6OwgG0u=DPKA)e%#${FLjtvE4AD^ zwtfbD(8O{5~WvyL+BVk(RF)&BOOzxEYN&2=L3KpO!$Z zbahE9kl{Y|!;~gMc91PD6^~u(XeF9*H7{w{0yb6``$uMQL^urRraAp*MuX%1rz22F zT%?(sP_v{;=6^Y(I8CfgXuCRIAz1Yrs03J(0jMGIN=>(x#BJ5vZ5%FLB@WA|0D5)f z6>uW9sLa2DieDpXY&TSJneG>4yR66ZdE;e2P>U<%FmWM&ZF@AVkT7aU*X}H+39p$T zc41R2Qp0DT>7!yA$I~qq6zArJ3xFPwFO_Q&DG4#uttsMu0Jqxk%mp2w1NDYF{^0G0 z7nt$#*nnv(!`8!+W02Qsx_nSH%CnqTn96ToA7ePG)OK$P@p2@>? ziec}KPeA}vgUkIhK0pO`a3>(NP{QnMA1iL_3^`0g0?GDymoHls3t+!*&r6&h!!}tu zO53RB^vBa;qZfJP4%#gYEYSDLNN88?@DrUXoCPfMyqZot47JOqQ?Q;f7V{A6AFRT~ ze~1xohn40b;pSsv{%KirwrM*4xu=U*JKV_m4}M1q@|2Hn`iZKjPT#X13-#K0lHCn4 z-Br5;Zeowf`kJ2JFhwu#FsYhu6V$cf?@Dtd5(Gf_A{~7VPhFc6HnayfEWepHxiH8K zAZmv`YLds)6K2r6=M}#%U9jErQU&jB62c5vQwVEkjq6^cU}NR3V(Jgqx0~EJGVS#WgFd~a zS;B#3q$|Fjlpk!o>#Qt%X25}*L&IAw?e<-Z$`d&mfE-$CjiQs8@1cE^k;Cvs3M2#; z9z^M&rv$m-e315+`z<~|7;qPh!pWDFYSCvPiO4l`Z=Q5g;R&&E4HiKN&&d3T3j)a;6ONp z0N|J9T_K8vU-6#vQy>iNjCjmVf)|j5K1E6kY+Z-VVWfB(Q$k1vWAYtY7{N(qax78r z%r-DVA+y!7&=E^TNdnX}d6BxRHs;LT>wynS7jR|k=mc(5x3;IhOaGcH;fws7@Q9hmccdXeHzvWu8 zqKYa2>TSSYCT{0WkQ)^Xci_K}f_H{f_47LXSXX3)?-U#~2dz@onp2v9XZ@Ir`MZ7G zfF4*pE6=irlPqEx{}DvuRDf&c1Ef#`Jd=%$>~||0{dj<4>P7$3CS7MTW4NzXIgn8& zy*-Mopo++swCm417F~%{d~UhI-0}GxFton4qJZfp=DGZ+ zG$%LUje}FR;^)4mpCi4&Snr!Jj#mBqQ zUnF;#l?^W#Rkhe`w%&AB)b_=X&#okUnfiARjbDp_4NXU>n&}VQEPDvrFmjQ7)$M)XJ1fm!{{y8gIsAB1np;XK7EeZ~MtNdKb?yaTo=vU%OG2;@%0X#2 z0&`et$?13pyH~ERk>+%~uuyDc?ERnRRcgiK{|z7aCWu8jO)C}J#ya5hwG69Adn zb_Z`r|DH%Z0~O))Lzs=JD%itxU@Wtuk#bYaQ6wl2T}ipb$CqWxIht68%$_1it?&wC ztKE}bVNf7DWBgp9E^zYr)X~L8*}Pmm==KcY-z59MQ;JVf>BSNCw?n9>h|=6F#q&sN zCSYO$jR*lu2wA-ZL-yO_d%)RUz7N3y3nMGp`;B9|%Sk=VTR)Um^&@c5o{2pcW}C7# zDs;4RpR7Xp?`b-5x%uZ*`zcDGbMe{VPfc4d;9iof-3F>!W*4xT{|_A#B0S{V&AmOj zsa?s1@Y}?cz0>cKvA%q%wFE7o(y=gO@^iCSK8Krg^V4DUEg#=3JRrL-lpK1sH4$t=D>=;1K!z7+q4t!o3U=6+kx1 zI$G?qh_bs;h~?K$_|m3qZ6j(5Cth*u{=Lj$;)UL8jW;Jq41eeMm7-0%tj(+^V5CfI zb7i-w3(Kgc+JZ3eS!ZJVgCpAhGKk;m^^N`q-51us7cM*HAW?gc%rYe-wnkct2^4AZRP{njZRT^#P}0GqFps6^e#yDa&qU1>MT^C}GA~%3 zrUB`wVDI*ua-k(~`&3O8jx1g(^0fk5#Q=()M{6gH8DtHgPhoZS27K#ZHR&Op_@CjA zO(u%}*p%(sAmpB?Q#LjoxhJb!U^WQ+Dmt_bWT!!##qzwT;$xH8NtkYcM7GjfnM|@J zgYaEdQIDf#y+bN}7g^zFN86PRwn7Ws>LslaG}4;3q@Y$ndxpag z;e+wO3M6{7IE1Sc91iBu##BjU#$<~%QT67#8T zQaqLPDPq!ROTjPm3ql*p;2|Ix>>$anpyvANWA|qiBDOJg+yC-Pu#Nd08X8Vo{w}h1 za_;?nd<6#YS!F)Qp1?VtnQrRsPs4~Kx-hh!Ceznh$PX$o${O=gG^-i5N7dTMJ2vP0 zI*EQ_*~xx^rWSsO+Wg>D%|Jc^Z=QZ6Ny0Z|fI;Nzrk>T-(}Mk7cBg|EF%G`FU2vkY zXTmrDNwVo3w&g8u|4yblOWm}8*9`odfuKrQURA@*cZa0)#jI?2RHa_I4JXmCSL74! zLk!G+EO;41zT;EV;dyn+M9=b|_Vs&}4e}svcPYvFDw-Jvo^w8$R(NlKHY#oV<+>;! zAT9b_5MxojLN_Gdnw=PmTo3J;d#5@>>kP4rYd(8hKW(b<2$=*vrQJ@ivWyqQi=;hS zs*v;UR_23QKMAd%UZ8&iFZh32)x?>MC3g=SburlHWBK<{NayoyEU(g}ig2T^*h6Is zJsGHY2oqZz0B8#zsf58&!4hOtHays9|G(VA07g#<`VP`6hH|$PktE3P(GHN1`~GP` zXJ!)0s-8;b3n+>JO1!5Brtw4UZey2a2dwkdNfC$G^z-)bG0X3O3cQp3ENIF*Ql0pB zNKk;-(;U<~4{8OwH;_1XZWFJk36c(W?Mg>@#{`Dlvp^(OMT|A~@E_{3(l|N>)@4He zcp12}Qy(x|YD!QBenz%&kwr``nD5GL^%79XW>Yi4Ix!s4L}XHAh85Cr5&iwNl+7X5 zdHv0Qq5#V$G{>rwx}Y$Za%=gil2yg-Javf|+LZOy+Mq`O3gm=yRT`J?(q-(YQXFaN zuddR5M1K~;VM=KGfIIn zXdjC6B2DuIt=RULU-8sK?f~wH=Fp%;Ri}wb@}3A#l6)!gQ?h70!bG$jDUYH(+2Hz6 zj82y#D@1do2gVo5%J(m`RSueUOh;GiXZFMXO0ip;(60nY$T?BdcQ>3(53WKxL*{sa z4QF}YZ^P=Q2RG1-!_b!b2>x3N|YPHS1NX8d_HV0&ApX-TNakM3`F{S9R^A-YzYuqG4qi$)N z7j!|}b+#Jn8FG>9lY zTHonSl{GHVa)X3GwCW*~U86F*Sh9bo37=0QRY_;cWE29@ngZy&kfC`Am}|R|XhEvw zdd4Wr;?Th%6(KM?fV?2xT(BSH>t?~9RL>$i5N(`J7NCth$5BoaBUBb>6ANjhoo0;r z4`tgkkyVw6usl&3f!IuESvZ$+enVVBXn?r0-171U?I1Uy)wE*m)@4J_kZEwblLxID zrL6&A(0MIwgaJ0`J2i#|8-C3P!T1j<@Qg&w2w>7Pq`%Z*(}$K`fYHfl6Ah7gGS>EX z)WL@jTX@6QfDL*dMZwOlQ##8q=AqQhy&^aT-323(=rdT^yJO$eh7%pLx>y^?o*M&W zT0W7_m>a)B0Ku=jL8M6nSa{0d%QZ>f6GP zePBi^2c4!RaKf20V3)52R@ldpdn%M{{@UmEksQO}E#fjZ9e9eyT6QK!(B)~?>pr$&42D71lE&&F7yf8qrUypDL{nap zdjI?-o>8`}C>5ij9Rx}97I^e2nMG)x&!`o{)wqgi7i`6;*_vVDqHv*%ILFj5w3gQK zDgS*3!?KZkDnOj~Ntl&Gw4N!fTK5YGJwhWL>mcz+vo!=Ezbc1AEj9}hZA(gMDi&)Y zsg80~=#@=LynR%}opxEwJb&T|+#mqMiuw#u_Fl*ctG4gK zzuK2h68^dS;~;g_O=Lg1NoKm8267JJ$KQ(PHGP>8biBN|FSynzTq#atFp@;(^p$eZ zgvC7#7=QhXrtccBrEr1xQwBV*85K8NVdYNTFIqd3Q)7-yUNNeSOyUic%DBfJ%T{P{ zF~xIC%JlUnF!rZ0`(a;)GISgEiK*H_Zu5^M0{ z8aWD7JN<21z7HAVtj&YamaFZ)olhL@Uo)M=VHTF2ilBtK|gHl#Z}G^PW5**$w~#K>fdmyzbgs z4W9kPb2c|LwLcq}7IKMf&D})bZDLQT33}_D=`P{FRptT$^ZfFmwA{5BpnH<@?I@cM zwi}7W2(>&^zGv^2wICM>%8(aWK>Ge8#mM1ZR(ax1ZXk;u#w5dL%Kmt-sx*Y+XQ8CW z#aYsTply4`9-~B(M`g3+YykIr6^pu#+@ejbu}95~+NL$o1$!@zCyAPoOgG|;U8`&Q zPi{7)zZQ41&9;e5J`C7D2zC&UnP7ZgXohafXEx}gVz?!+L-38jHIK8BHn3Snd4Gsr zEF!)Z!GdoKdRaoO10Up*4C*vomJuVKxYy@uE{IK<<$J=G2Ic`;DPu&iKl0tpIHdxd1 B*`YmeiT=5q(KkWq^;Z!tWo=~qTWr5^r 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505054002-Config.rsc b/MikroMaster/20260505/20260505054002-Config.rsc new file mode 100644 index 0000000..a2afd98 --- /dev/null +++ b/MikroMaster/20260505/20260505054002-Config.rsc @@ -0,0 +1,4506 @@ +# 2026-05-05 05:40:02 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/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.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 MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\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 :local mikro [ :tobool \$1 ];\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 :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\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=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local 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" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\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:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\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=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\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=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\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 :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=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\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:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\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 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=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/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 acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/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 note +set show-at-login=no +/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 routerboard settings +# Warning: cpu not running at default frequency +set cpu-frequency=700MHz +/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 +add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" 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/20260505/20260505054002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505054002-Diff-Config.rsc new file mode 100644 index 0000000..b93882c --- /dev/null +++ b/MikroMaster/history/20260505/20260505054002-Diff-Config.rsc @@ -0,0 +1,16 @@ +4165d4164 +< add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4166a4166 +> add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4172d4171 +< add address=8.6.112.6 comment=dou.ua list=FuckRKN +4173a4173 +> add address=8.6.112.6 comment=dou.ua list=FuckRKN +4175d4174 +< add address=185.110.92.40 comment=pornolab.net list=FuckRKN +4177c4176 +< add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +--- +> add address=185.110.92.40 comment=pornolab.net list=FuckRKN +4178a4178 +> add address=104.21.71.238 comment=crimerussia.com list=FuckRKN -- 2.52.0