From 60b6229685c8a7b9b73c481ca9512b4c56a1192b Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 08:40:23 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 08:40:23. --- .../20260505/20260505084002-Binary.backup | Bin 0 -> 270775 bytes .../20260505/20260505084002-Config.rsc | 4506 +++++++++++++++++ .../20260505/20260505084002-Diff-Config.rsc | 16 + 3 files changed, 4522 insertions(+) create mode 100644 MikroMaster/20260505/20260505084002-Binary.backup create mode 100644 MikroMaster/20260505/20260505084002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505084002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505084002-Binary.backup b/MikroMaster/20260505/20260505084002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e95fd2820f49db1484fa192b3d6b10fe22356e7a GIT binary patch literal 270775 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�+BtHU3KG{e0iWGdTovQ&$X1wB}wg^i2zENGA97QmF;&>%hvV$^ ziwB6XAKzP`jYhkeDD36}*nJoN@5QCdAOW4A>RfbTJtltbeylcH&k07?rc;iu`y{#L zO|?Ogu4+*mPh}!=S&SqhR;OD3i5~kO(C6OLblHc$@5C}I3#=Z{fgq+4XiuuJh#^@l zYXX#`_Eol%;PaA)Wxm+55VBAab^%6s&VnnSl#X$bO1B)ICIAGegdP$6lPfAzXm*Ng zLr7e05a|xz*v4(#p$;8*8}v8{V z2^ic{D*XWeKLEhZe>q?}1tqw&jn0IzFu<0vm#GK7-iW9O>g-sq?9+YvHjesSd(sG+ ze1Z9|&>f<-qzKZ4SBlLAH4_tFi&+67J9MKL;Oz==VS&d=KU<1bJEskm6-}WCn*vRp zQhT(KNNS-dhBRKSx0HO#AFmhbmm&~hKU;4n50xQv>`yfFzCL!6^}BiCtUV)85jpD! z*PyXS{t2B5m*4jeGNl><6Tx(oC;-Ca!I8s_kb*Cy)B?*yl?G)~KIP|wMyY;fxkMhk z!qQ=JtOHCTx4nQ09nLT4lS-w@v{xnacRp}L+nDE@5zK8kR$$+^9Yt1C+gXq%>&+fp0vm^bS zp+aH^oYr;IaEULe1F@|Wv*@h=a7?j1R@EL8$A6|aSW^qTC*Vo{N<|dF!MF=LJkp70 z=RsUMQgy-23d;*mQpSO^ynWK$!HC?Y6+}(2DvAlk?+Yxay`bBzFRQ&;|dN$ zTgY5kNHQlQogF}ZXk%h^HpPLyWY;9g8bmYW3WKU;DYreclkmKaBP=n6(Gj=B>&yqP z5^xn}sq@D`ok-{)-um;}7zY}I_j5jFO>2Iw3BCGtE0_L4vS>J!+x;tJ#7pm3KRVug%kciad~24I>+g&ZhraQ2U#P@KRnfl!uUkC1=hm6I_io_EoQ zE<8y0K8(koz*8%+2lTlVm{1XG+7A$!lbXN_!zgSN%>O#t8upfg!mn>#s4*HP9gfKJ zgGyPy>E-XL+Ia2`(hEyMvljDfW2LHYq^epD=A$SE{|z_rY>~@)wVj4G{VX)NP-Z@J zxq${dm3vXp9Chw~daC9i6f|oVOTI+h>Or1+6;{D@tQDzNv5I)HB5gn)RwiLE1@-}e z*p>6URNjT%J;=~gTmtzMC@xnu^v=lN z%U_suS!C1%a)8NF2(XsL`9$mz-_)d1v25f=^Ks50Qlh4vvaml+Zh}TDSrNY%d;jm? z-~r5m43skblY@g|9`qIQsV_KZXG{JoxNqe2*_>JVYx(4Su|%UUO<8CEW8vz%xSBpe zUVLu*-&HEE=$E&i>{0{NHGrZ>aE%t|&2mqJgeyE;4*Ua5`cB_SYo`5oF0qNaAGUq4 z_ns#b=D3CYP7()H<_f_t{KsKHBPdB2-pErbZKY|Rn=o=N@oU$d#3 z6FY!eyt8!hfQ~HX(YGx z%}}88?$s)in-9XmZ_cF*zkb-^f$N`kZ|-4c>Te8oXzbAi5~mg;tyTH0tsAh5O%2Ti zsp+#spgYtL|3gfd$}B3um$#|#`cjPX-2$0&exlAgPJwGwgw?!2=75v)>+ugSKYt?x zK^9XmfpFQfET*=h&M5x^*iXLTlAC{>=wTWWa^ApaH7_h!ErU-#Dot;nJ#S{&|B>0EzJCR0pfPjQWR91Y zar-%JJ&g!e3qROxFU$J;hR4({=TXT5*djV{*G1vB<0_4KjVqbVvOfAkN>_om@i_>^9|YU%L7hqT@zR|5 zu^Lgk3z@fC@`e(%Xz7I-20q_*hTi=vm?O-!AFyA)xm=YM$bcu#4LaPig?>Dc=c+Og zdG7?cmqKM$e^Qy@#Y4h4RrGz?v{zt865iQ6>W6?4Z9&-3q_-hCwEdF^Jq#PLkqQqX z^_S%O*nL=8bdk21!cxoTL1f1Cu(( zk)iU(Xgm3AI#4y5aPvz$itnV8!$J+wXXnOKm~pH!OgNODX|y7``iRYw8w^UDbwH68 z7Lxg7E|J>-`9=Sqbm2%Wlhnh-Av>-++#5xnE3l8QA!r%Qzvh!C>6rpLTKA#;PIEN{ z5&C(2UG?MaEf#If#F*DPJulKoYbF11JL`a(lpc28h;0r2l-?R=eYg?@jXtnUkib2_PN^-Hv zc9v(*aqXm&-fHtqy)$N*4i8n|TiOuw=3DJNVdM67t;7ALrfe`EKOq~mQ9LRnK$|e# zyBc(RVny15i62`h0ZIEpbpTbU+Be0Nl-=Mu$J|4m%`@9VC|>;YT9oo*OgK*|;Azq< zC_?LT>a`|~C?%9UXtw?4yNDv9`npHX=Aryj#FsU&+2(EVzQu0>^J0FNQ2F(7b@g|= zpcZ1T6D=c(%~2JAVc+p>qQ`RK--0xuzQ=k+wK1C}%(5th=+)}eA1*J)6zyP`aXUZv zhFD+JO5?_U3VWAe&*fWHYe-9?114P|$by)PEjX$KpeQ%>N)g5Ih)-NZCn8Sc!#M;R z-j%EIxMf_ffkYz4(j?CvyCf@CblL&#iy)EYtQ*j1Cu^TVc^NcAyEr>}!sk7J*tM@~4f3F-%X4SYvg|_U}0Yqz_`%zo2NZj`yO|X_7 zO;tXqan|b9vD#v1Gj)a^VWD@oqp8#;r?(?isP3pJvD;2U4S%;o3P90A%{rjITmcf9 z)-Hi;>v}&=;)8mdtBVKjn0JS$et)045!ju;%?gItLSh90!5uoMKoYlf_}Psw+;z63 zsg3y7ufhK-svb6!@<4AS+=njPZhDjxmU8pn$t%TJ;nhe6cM~G(Nk+w$K@Tnz@I*RKF3a1oaUg6s^~epI<=6`S6gD;4!uqEjvk ze4_Vz{d7C1ewz+m48Z{F+c3yX`rR*Xx8U`P2o{%^QP_^3un~#`;pu6u1pJ7%A1(ER zo;#p*V~-&>HsA9_1EG2h9$Y({#g`-&jWP>s+8{EafT=uGt3{Bi{aS8FH%e|in1C?J z$N^O6fAu(H&!(4!V(pxaI-0lXcK*>_H<21%r?~M1!>N!uiS85Bbm5 zgOpcQ?pAuSEY|z^inr}aoY8;Tf>YTSJZos^l(48h^?2LtOH77 zqNI;JpV4r#;i42rEOz{7->(#%+=$I?ft&A^s|V#`x=ANe0Wne?$x2_d*(Y+43senR zGh%u3B<|SB&h(57=RI>WfU1+{w2Py~-40CO1syk}O*i!D1NW3(zSA2!lnyBTz~cXw zgHb|}#;y$cXUvUnL)ioa%LG9PuKFwqE4V0dx+LJ?SqEw-OlgM1Rvm^TXX3(Sq7E{q zNJx62Ed9HG2P`*y_v6U+uQv4VKWL5Ca^qISciw&WPF~rM{%Wb--`vnCGhHfDb~&CZ za1)mE!DO4yPV4M93qM4q_6OK^N|uM@Itxo&Ou*_!TSGugYiv~`#|r7YxdVlcVqIBue zWyI{<-fE>-tsOrghZeV{SV&VQEp0wo91mngli6>rr>G84##97OsGkO+$g8N(ohay5 zw8OVtmN_9Jo=@{a^;43Q!1g6zXPVUqtQBt*4GI=Hn~})XA>{LUoB>bHCtdO;C7D~1 z>@E^TU5W5f@ACMk8$#o8(jzx5j4ydLO2&znh4Edqb#M}BEU&HTsJslw&&2Pe!Zf1< zNh#$r{y?JGV%t4v`L+uvy|Cw743dS({p8t-G}s)6#3%QVKf2J*tX7ao0o6 z^^07sF!Q9U0xd>{asH2X*}r(cyC5nQZw-6=momRKqnG+~J}1>jKUu9HaK#`wB0e#F zBVuxC11ZP+*mup#``rp?@c^JSfFY|=Pl5d|O^e};R30o2?QTHI_r(3Cjf6wn7vtmV z3JxkC8B?@K4MIqE3`PQ*s_^JtUr(f$oD2%>ZkL5}LUGIx_Ea{#(Hip=B56hQ69c+4 zN|L0#U?;KX+QUqJimTM_FYpnS#JFk>h-p(WXYPHp$KvQKEZlLFq#WgNYgbP9&AeS% z;ZC74wo0Xf%_o7@A5r-3Ip$pwUy&VZwFvv!_n#-!wa#hx1$%Y$`enb!ASapr-^y#sUj561PR>tN zT@{BDP(FFB6v7mog7fncbUR3F-i9g?F}I`9gMFfO>HZK06?O0KtvR|$fjr=PFd6pjoIdeid7Y2 z!UlwZ7bSv2vrv}jTtf@NA*#>|kPLHCps)S@A+G@vQ)L8bP78DBPNUVlYq+LG_Gr!> zjeAjI*)LcBD;>@5Y{P$!{_n?_1q&Id%;2-cEo>%g@761Io6RjAY^ZxQqbp(bZtw1I zB@$Z%`ExNDHX8-y#@~5JJ2-)Pt!RZ@CVfAUhv$mK4@m^ zL2pqrJS@Tr^#a#OBvj5{tXs!dT?=U>d&I5J<@lS4IIk8@G4U{7uI@`=va3WF(C+9j z(=LQK6z5i%6#G?hZnR3a{nDW1czi;X+{&hx@xjlM5Itly%Sx@P%@&GbvsuGpB~&zJOGajrPRnQ;m)D{@Z|g>M z$yIILWQLl4y=WdT3b)6=!BL=`Z0A9Em!uXD30hVTO+xgnuA}FeNCLntA$Rh?ev)bO1qbL+e*5^0k6r%odjOMr5J}9zuetWyt2tlU=D}zes)BKZg#NZ8@ znpakSE-#dep_9R}e%uWpK;P8AufR5j9)l9O``<0cLj&xkT*>s|ysdLzh5VK;LLLP`<=6cZwEa^nr=p#I2--0UN!T+-QuY!b&O zf7~p#1CnGBz10vs#OcovON?(xaZ!L-{rKAFx?s>IfwhixBsB>^$ipzivX8N|!rr&R z1^?+Kjl@}?vVL|PBAqA=>i2G4nKGW=v?rUT#g7OnQF@*nfLF_1@C%*_=e}zAkN{P6TgnUB#5L( zc6jM&*7TY%vBiKMA3>*}Ll!k6JTJ}CkKA1yK)eOp-f2x`W$LP&i4Ja*Eq@%;3>^q7 zx$Z^j!4EQwG$=u|+e|A*xx$;h=Aotdpc0RmDAhV6t9ErI#SGZLt$OTWLe%jMC_tei zC*9-9Qmr`ZtbMAsCRCD0t!^iy(`kdrIVZ7%PT^OO$?JM$og+tglz|#Q9scyJX@beR z?;TC?_-|IZi%C4<5Rl(t!U(fDdC9TR3-4g>+6P4@Lt-6~(p%^xhRLoW=4o-y zVJcvQ`}&j@m7xrL_+5^eqES_m8!gJqZ1?|+IAL9cSxp>qSKlL852| zOf&U4Jkv*mrQzqREl*jJja%KvKc84Ng-)00yGE?V;9r4BA?Nzd+FGE3DOdb2bLB>T z+v5l{1^DZhE^crjVC6rRBi^n!-nFs|{!gt8czLBHK~H^+g8BvfeJNj7pgls#Q9QaP z32a7@K6n#y%o7fO-A`54iRisLmn5qvf%9dxJ6G0w*|4bRihR?8w(3y$S`?CFK2&}5 zVs~2$Ttefuh%utmdu#`K#(r&1DGA~ea~`WS5}r?l|nS}{QH!pr_*X}tJJXXU|J|+FK|$# z@g&jnM$+T8;+Q8@yZhip#~MC-D~Gt8>v*hi4$?WP^-(2<@{l*IHp^&p2`Pu? zvA?z_x=Ey`WT*%L?#5fog{UMV*1@dK`!S32O|)ZzEF>tAgb{XEj>LCMIOhYXr( zX__heRXw2xlJ=tG<-@uqmxSaCm{A-Cbfbh@mZMgAbRM_64p0I4ri^)z=0v*G-Z^5% z&lYeCKt-wHqt849qQU`(H-wIg z>CZ&EuJB3tluFa9a7f*8zf^8oNe7T4g0_W1aUNOSq}JLhQG`c zUoH2gq70_63keoyNP997*_XKZ6NVA)(!)Bd?b^ zLja3X7`A~9jv61+%)4r7UVQ1w2%pr`s*o+W*xp7xRdr>Y$7`@8uvkz^V{q_G}6u$ z8D75{s+otRo(mUaH>Kf*ZD&>v>z~C?)pDiKE>zc=cR>v9PO!NWU>G-q2njs=&Z6-l z=)NpI(ciaJr;<#-jd~iK!RqJ))Q(t*V>!%tTmfe7pzta!0``QpXWUpkPpo>ENq9Nc z55H*89zjd0a27N=XIWT7SP+6UyYEbxYVJWd4CP@A`6r=I)fhCtHdj>9tyw^@TTk*E zyF-kP!`>@yZgtg6aAo2Dk`w;LrKyX#9&1Q>!{@maf(nw8=h2oRD3BDyL-!21+x+$g zP^>l;y*AXBDdAuBxPe}xtkMys$L}2X4;>U0P=&Aa!l-IPBLL$-gl#D`lJzD@wl>R0mHgwx1QM|fc=6Y|9nH~A zjw;GCSIUtpOSvnD;*?Ujia>lxr2hN0+ysrBF{T6WYo5qP+du|)An)=l9`Cazc6CdZb02zk? zti{J$DHFyq<$quBXA)!m=VAWVDJPVIuD$~hGZ9V?@$Zq2eXi>Q>4;nUeE=ZqReiMu z21RdUY0ltWDOUc^jUUE@q~Yzn1MIpd@|0fz<}AVHtC&*sW$1&ND6S{o86zA^x{0`i zsR$8oC@+kA0l{=IiT-GaXZg*3PKC<*Hf`ds7f84Z4Be`t{Zrc4Z{eUEppODcDAsIS zPL21qeIs?%hr;vVT#me>Ka*bxs^aM{f}1M-t|?VTsb3hF8IZ|Z^rNBom(&jn@YgmR zuF)F8V3E1{=g6VHnodJ3=XdzYQeSm~6d1Zp!=f%LDjascC&H^W?kBdUoJ^+p4!Hit z=oT^J!QQk#$}|m}dKw8F`30wZJo22}0E_;&QmO?LQ-n#%_2}vNKuw_m&4kkzz3)0MRhCLfaSO(_&i$MrJi+7C_OGK{KX+ zOBZ9cQ*;8Gx8FLlmQ!TnkQXSbIs3Adl%Y*bia)~OD^+#<-0u(sGMQJPR-rCSxIdW^ zE$Azr1>+BtE@;*kfaRPJEtlFf1(b0RDiW+2ZHM77Re$v`y?;A-N?*7cD*)U>e)_4g zTQw?|wuhJWO-UkEepWWyT^lb5DZke-LqPRM?Z|qN6&C^83v=glNv&!SZiH72GST3K zfi4?105N}Br$u-fO^DI(S~ujN9LzbQD}01_gf-_bbBfzy_m~S#0|Vz~q7p@4>ab!@ zfb;nSgI74rH`&EH(GSqCn~-b?(@ig0!#IRNJY--aOxJ{}$bmR5sI6rcD+82Qzino& z2cD&X-BGt;+plXW2?QuMm9iFEBBzn5KucnnY@i&oXo2@z@x^kIYp2ksEX%id26Edp z=5>rDnv{bc+q5VBWY7sDJu{g%e?OFOGjHjYU5iGzQClOuKf5@M#);~?yn#-%)!TPB zWjFQ2=d3F40i9N&pqF`+X}uA0aQd`h{ZCRzxuFrUMor!ajx4UU_0MpSWIs(Sl(dU_ zbX5G<>#R7wEg}S;;M9CFQj+UAapYGS;udi+i=z^Bdx~e|{PAkLeZ@#B2x0PC+fUwz zq>T+r4&aMHlV;EXHu6W=>45psmscx;? z7>FX0GZL&$9cRD@8*{c@u$cIQ*r-zK9fnyTsdpTf2MZg5f7sDYO9je0uuQdDzBkZT z0E$^FDiD%(MRQAriFnOgasmh_kr1_}8ch0->f0UN0w8j#*ffA%$SO?n62+jDfI4SR zitk&+@U;N87(FQWQl_JfJiU%;^Gl)!+5;(<-DLfrAj^cRMv@h7w~Tp0gqQp<}V`k;WHY;(~TBO$znQ54_T1G$n$og)<(EyYm`q3(|8?5-^6z> z2i~X~kzpkcy;P&|zt&-OJ*C+`T%L(Cu_m~*gN-&!#8!~j30g|PH>hgtzv##~8q*IZ z*_6|!NMGbvq-O^tn1vjOlcJH+nVT@`euY&#KnxT{)hg}EP&?m)D-!U}Aq2U)Z~wjW zMNXMJ$PURtYP%&R#YUuj1KsD{20fVY)`&b6wJI>rPH4!>79?N~HAeU&6golWSK$Xp z6{$$PhfND-D5(GGMX!k_4%5emd^Rq|z6;Iaa!B0FVTH8ZR3Pppw;)$+OOA*U@{URW z7VZK7uWVoMNvYbscP;{TP2Umzd9VxO9o>?TzhsQI`km?QF@v`>4%$oH3=Ka zfqt{sa>}MXahxgovQ{?wIB6&CR|im&0>3{bY~`pZIX*qsH|y%i4D<3N@r7u4xPd*y zvA5ajVDrr0cx&0?ZZI7sBMRU2VzC|D;O9xD@hATDQx?v*0&IL7gDs2iy0}9eS(Iak!5m0U+x%9;u=I zcjp&1nWKE3{_c%K?V*x6QG2YZ9CN_B;PzBX11J;_fIqLgVgi|kanugMpUgthhoSOYB<)7NqrFt!9$l zugu_X`B6xyR;It}RA4{Jr3f=dxR`GPc@V>mTs@x`NPxdZ-$_Wgi9GeiGb%w)hd}A- zou50iLup;OA4`i_jIZFT*$e%8=jVuDO>Vcvwcny#AaOkbGNf%vrQRk{nL7Y=;7`#%vSa;jFVxK|o2nc{uv#%!IK zc>i(&q33ZSoHTs(J>>d01vE69cY)Ijmq-WP#7}F|))sxjKeeM6w({_*@QR7C^w1>3 z`Wzw=dZHn90hT5Xb60Awv;x+~Ng?1sIp891aPRG=;YUO#?P6|i-7+gja^d#gWsi@x(PU~|Y zLt*&>a=aUc@Y7K=fa_9-K#wmncy9O%W_Rdfrcfx_$X_R~+NEF0^N8L*Rp*A>dbs0B z;B;CgrbYQI>-#E=^BUBa>9M{h;&$w!$ka24d^Rg!J z@GeP}xwJ!XIb%h%7k7SY^iSqQz}%;LfiT@UnIh&~$z&)}OKDons7=4hL z(?_@t1B+G=@2g#iPN&kjBxq%HsIz&Cgv=Lu6^sDCEh^BPBTRKZ04+3gC!%!ER;aOG8 zQ@6BZ4;G%>ToiCI`{Do8fFG4N#+|5P?PX@A@v<0hjMfp;Uu)ly94o*73Ti_;7PFbl zijTR2IO*-*!wTZxsL`Y%SaW zil4LnJMM^0kFO#D+zQ#iT?ab0Cq+!YXFwH=N{R3F(sfBbbcUD@LfwyOZ3H>|eR|

(snJ!*eUF|MOYQ7OL43#aHq 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505084002-Config.rsc b/MikroMaster/20260505/20260505084002-Config.rsc new file mode 100644 index 0000000..4b85ebe --- /dev/null +++ b/MikroMaster/20260505/20260505084002-Config.rsc @@ -0,0 +1,4506 @@ +# 2026-05-05 08: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=109.70.26.37 comment=grani.ru list=FuckRKN +add address=194.85.61.76 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.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.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/20260505084002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505084002-Diff-Config.rsc new file mode 100644 index 0000000..f3a5b4d --- /dev/null +++ b/MikroMaster/history/20260505/20260505084002-Diff-Config.rsc @@ -0,0 +1,16 @@ +4163d4162 +< add address=109.70.26.37 comment=grani.ru list=FuckRKN +4164a4164 +> add address=109.70.26.37 comment=grani.ru list=FuckRKN +4169d4168 +< add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4170a4170 +> add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4172d4171 +< add address=8.47.69.6 comment=dou.ua list=FuckRKN +4173a4173 +> add address=8.47.69.6 comment=dou.ua list=FuckRKN +4177d4176 +< add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +4178a4178 +> add address=104.21.71.238 comment=crimerussia.com list=FuckRKN -- 2.52.0