From bfb82f47e1843c4f2980bb58283aabd216d65a61 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 1 Oct 2026 10:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Oct 01 10:20:07. --- .../20261001/20261001102002-Binary.backup | Bin 0 -> 243756 bytes .../20261001/20261001102002-Config.rsc | 4340 +++++++++++++++++ .../20261001/20261001102002-Diff-Config.rsc | 8 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20261001/20261001102002-Binary.backup create mode 100644 MikroMaster/20261001/20261001102002-Config.rsc create mode 100644 MikroMaster/history/20261001/20261001102002-Diff-Config.rsc diff --git a/MikroMaster/20261001/20261001102002-Binary.backup b/MikroMaster/20261001/20261001102002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0945b58d5d4e2503aec4c484ad9d897b5fd4de80 GIT binary patch literal 243756 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 z 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

G!jtbGV7k#)Z&tW-wSpvIf*0_ZWIs`VS!H zvLNOU&}CM*gzlyl9wT_{Vv{84t!o9*1@rfcRBjSp*Wwn>bb}8(()X9T^`Yz2mW>$H z7VCGg5LI8HNx0{1Eg^{$C_}1lQRSE3dBhPUN_p;<-_!?Vq%*^lX4Mpe;@;DPFCMqS z>ilb3nlJvBw5N5jh@g^OEY&n3hG|)khtJA6qU%Sd@NKtVuz%s8se=)C5ie+qO7XlK znBNWzM~7mQ?Tt3~*w8n1jl8t0gt;qV&;l0xK>zESy%!RjZ+Hs;U}80z9eoXD^?>0-_<@qRU0Y40I0tVQ)CzC3yKyhFIGEG|D0!gIo`!PfNW z3XCs~+LqwYj9s zq)*t^^Dwwi;5zv+({1GsfJK|a@_$?WUi{KGw`+M;Xs&*=Yc_Vhr24jGm!=PN-OI1c)|?{JM?m7Kj^PQ> z)_LjazZfGl06C2jMdflW8G8pd)1IF$rK+=OT#WAfHXB`fhx3eR2@3p(o=O9_Hp9_2 z!xiZQYsW@e|5E;PKYK_UrrTZWbuQY}A)rw5>{SEa$7OeL`St3fEpxVw2o`LM{ zF@= ztK9+8UaRB)@bf~BA(PW>+av;f=YU2hC;eNPII$wh=^#w8Um!XrkPWpqnbX#r>U{p93wKD|1R{F6<9 zuOPuLCEC8fgtjHSt#V7gn)Qs7_+Chll2@&0n`}LlF2m_)WtU@`Lyg~DUVE{3C;|%y zHPuXMg$9@^;32lp<|7yw4oBezw>gETI_%76&%RXAs8ogzfTVPxd4g6OYao+OyR8qj zot!aPJpDs`>fD>2Ujk9VVy$?ej!Z$b-*kFf)uN8g%K{e zd?2%vu#Csiz^y9HR;MSeK>IB=;;s#sf(?@6_&R5)MW!^-vWQ=Y7zPYuQUim5r2~if zo7YCD&JLeDu5!~$aM{jfNECJ_V=rVLsLIH3Csba&?hp4H-%{1|XYGR$n(UjUeOKr% zTS20|1+4+e`P(Z^qnUoa+){w@?yoLCP%)QTrmna``h#xbRr!#)x)+NQYDJ=xo+Rqj zurR)IXEP(h;`cR6N=fY`ep}7^4BM0NS5VZ$7I#l=aO#|hR?TMQfR;kulto=$NQ)R1 zJWmW4ilz#BqI0_if;dB4E#%Y;_xmBgYfY%7`Qwn*&~Ua^Ya8Z%&9(M{VD9`I(ZOD` z4!_ZcSZ4U8BR^eY%#hvQGO+a3xe)f|jEFkWD18x+&tD4Ublp=vi@;?2>!^(-!;!^l zJooFrVv99<0diAL)sa(;?|Pkh>@&sv??&xe z0n90z7PbKh_g?hvQ%kX$jzr@!i?f&5XUk49qSg$ZQ-LsL?Zfsx2Fh+_q!HcOzfD?~ zl?Xwg`3Bl^qa3wSWWXQOe|OB&psMTE7R(k9b$-8aITZd&;TB35E-W!D_?+45R)GOT z*?<1x31c;|yTb%EqhkQsclS0DFm1*oq_U3T?_=(pj*enVQx!OfP8KY(gYvhMAwL+{ zhpeb2yt#wS@>-%=6*8+nxM`smCk4B5nnl7xx~U`sIaQ_9uY?kMw;)3jO5rCqIBA0m zT49t}AL1MP;PQ%u2Nr@jC-C=Z$Zz?s`0G!S zca_>^zKQVMI4XoTRq zR@CvUKPp4Wygqtmz&4f6fB{O=LvWNTG3$0iOfJ7{gEKjkudY^TEh+fNXjgFWYAY#w zp#+3R5OkL&HWL{P7{2MaY!>@aAuIn(Vm%}iQrqK(GV&?zxBFzl(hWmGvWn@kWZQVU1~L1n7}bdK8ZEwp zF=Zwk>=(rxe9GPIla_7!_z`st1T+>r6&3_pU&piQfb|TO2DDQ-3aphPjCPq`J*PdK zThS22_T;h=(itQn;)2Uke1G<12Ns%MTW@jOsp%s|2=Tv1PNCIy9&hWKCLDwcCd zyE}j&^Oe!CPQbnEXZjTX;0kUb#T>_9`f_5#e88PRH7oyOZ_?+4E8}gQ$d6I@6{3bH z6m;9>TYu}nfqxVCw@C}mIE&7IHbrpkyj#T=csT*=gQJWI`ol6Oy~H~MUW?39$7wrq z9ylU8nW`I&PY9}a;V$A)mZFl>p%=R#P-Kh$j`?{@-%-+y?OW~_;P+eqF}TX9_qo*m zR)`9eYSaPzw(nomZHYcy?~!MysPSiO%(J8JlD_1zwWdP#ZRPzg!^j;`vRDwj_LNMN z=?A3p>^_iWOr2DA|Kg+wh0@&e)U6X{reMZ3T1x2Xin+<#QTRk}%dpR_yN`?J_CWOH z<*;hFlB8CO-!!%)M~G0u>yp@=c&PTt(3|x9#YExNdqk2hynD$>#+Sf_MI>jf0;M7# zoMBYU@ix9LH^awB32yeOF-w?7$%wGuX-;p^M ziFuxk2t5@)^`i@YnL2~Z(Do&dMEw{38ls=^Ub|4#*gUhDbae(=L!3WoMN&%C0 zBX=zpP$#jqk=m^ndT8jpUwm%f>vq8`zTF{i#lyn*U%H>Nq|uihZS75=&Gg4ml}bW2 zYK)&1h>%Ut%@G~M9}@o`t-j=@2}`33_s_v~2*T}#nZQB07r=PT_>O2m+zP(AKfivc z(6$b8fYwMui&p6V;}NaFdnU)l3dvlmt-~OqHP8ZxFl|C|*#tq$!2;wyFY&dK?U!#c z>g0fn*un0dpj|C9oD2SVsizR&Vhm5Qx%$Pk=e zinH`R*_?ubk7H1@d9&OQ(>Yr%7*|ae`fGWX9SoIj9qV8f!~rmI6k14SI<$(wvbILe z`-~7Ndv?PrrTxgsM0{6d^-ose^a?^ruuf?0((gR&zwq(u4aV+hXRWkI+Ru=zI0R;D>s8feYuF-vBa`>#eXLZSLCcHD)+-HF$sx@X~3} zo=yB3zSD6ftB`ir+DGsLF7DpLRQx8gB8kC4YA|WbVFTG;#~@Q*ZoPT^7E=nyw;>`H zaTGO8Y!|&J#Sb`@1x`ofkx`0j5l1znY~gpV-+UU`0K>X-N#ZhxgjV#C1#`v9B?NR8 zz3D*BRvlTT{1g5Oj9Tx%zA|+fkKFDMng%7QFjQmBEAQEfPC>L(y1H*)sDy?G-*JB* zS;0bAg1P%v&8UIq>B34K{MO#xJYV1_`a@a+8RO=?@Z#idgaY6px z&~yz=SLysi-3(>Rg~|V3JKw6C%VFS;c!UnD_28eWf01*l1yHum&%{DI?6g_kMXF3Q zmq_DoL1!#Vr(ta->L=W)jm0m_X!}gAq=d^EVJ`MVC*ZfnMHNyeOF)hqnRqtbIkWC> zCor1__*)%koz}E(ItUAwQM;}rw#POFj@slxHm8zH6ofltq3n;cn7&G}kkz~ayOyen zh?!T$ITo0qkDr9y5QCaXe*qAk+QR<%obJK!wl3^_H5mM!rMp?s+|uZ~x#m`*G9mA= z$6hM6P=5_K!`^qXI9THCI>6lTzpODTDDTCGD^=5cmvnU-(8ZESVyoGj~?y&teimv{7Q(4@HfgLg$T3F+>h{8!np(a`ta9a zu#2>(7j1OW?w^n{JeVNVcU)oD*5+(PfT;TT$WWS6#tJ5q(MUIP2bF8?3tB_(RI47* zggr?)FA&!GdU!8At4gu(gi=9jU2L58aBK#bI%_7DuULl7Dku-bg_RWKmYv|wHo`*|R}*T8b!3T`Rbb{oPyA?RlCgYaJs&^Cp^A;@q ze8^A=AB;Y`=?()tJl>eA84WGKa8hs>@8~iSLlOxH!Jsb&%e^Lf92z>n(m+nTo2}hV3zxNL8%i;Hzwox=mWPqP%NH=_Mh>~7Joy7IhGCu zyQ>_CJsYjR+V9+KuHl(KN4zgu9%msRdKtSK;Ctk@r6GP4mFwpSH=yIc8K~|A^x>+6j_9U(nnF9dz`P zei*mRPXScDS%YdmD`qjGSrr?;z$e%c@~^8qujl&pM&CT7T|0wgDNLuMB7?|SCb?dC zuq|V$;DsiL#Ot&h3|d9gZ1uB#jVg=X@cnHy^=wNVdz<*W>d!ekUA zJt^qMld0|6AKz6OIA_NTD%S?G&uY&iRT$NWf7s5tkBO)J8YLf;d=luYIy7x8& zTJ+c+5O8($)Pn1`O+SdN8oiGAE;Ty-{-HwFXJo~jLKWF%WumvB@pr3t3kuB-$q-qi zc|+LSk@K!TG^a_RJ4C)@t>L(xUG#Hym8>*90+7PqqjLCcnNBqFN-n-e9a^x`q!XV| zxcijwhq)GUOs2&f` zwCFP6LL51|T^%DG2K1r9-^4P&z@V5k62c@n6P0flQkc7_zWn%(7}Z?7deSq4ElEtK zfE*~Un;Pf1y#iL6pO&R`{7g(s(z4S(j}x^|KZ{{|Ne0IL#!y3b4Ye`hv%Y*TX;S#? z%nk0v7vmxKO=e3JStZ!PToiX_Qf}HH)Vr&Hc}+Yn2!3~E`$mq+uP`uRZP5CIiP|bckPIhb z$}@e-@dQcczu$eb2YN-Zh?+~=mB1F3XIN7Z{m|&cC!{#=IGRte6^^Cvza0f-(u6xa zizN|$uOIq6FP7@=^Mxb7W26oy)VZ?l>~CxGR%TD6YUzDX!>@mT$3^Cg`#zyY7DXPr zr)@ZzPH5+~?j{@WF`NVDrd0Re&KSBo!f+s}O-M@ZJ7Z@$ zuccRLw8|x5w+FIN zlB7WVq_8_Cw<8#5KJ!xT*k#db)d+w9QJ=rGNnOYn3Dfwvol2=sgc5;vA{(RC53#m~ zBXp0*U+PL6HE97h^G0caD(av$vqj6e+%H#VT1t=b2 zT!t-_${&RS)jIDp`Lq&_Zao>x|eN!*$jU=U}^m=Uv-g#GwM&BhH*9-@vVbd0!SgrO7d3`c28UP| zh34sL(uU6V3oBZ~R_}CgUYg=+tlSU6@WjEmdlGlF`*XV@APjWTeh8Jki^vZi!GNB< zk{a+^PRun8C64vpSYOpzLs z!da9n0>@M?L$&5N;Ov2B*6PJ#jpEL;Ykku?DA_13j;Zso>BG#3W9cDx0@H49CTdi( z2P>p6CTaI7q`#cp`{K?j-z{!|bSUdA!YLkhT~NmJHN-?vl3PX70sC8esg<7q0NUv^ z-D4P?r3YUSv9iY4t&Pi36D0>g;5SuodJC*nfaSd7yQH{{RgsVw$1M``{WKTe*YSq& zg=0ya4z54npxpu2n@NKhQftB@=lV#<4Mzsn6>PBr9S)-PALo!~5IqZ(H=&5H99Q}G zOXA=A)&ubH$a*xSgaH5tUoU4Fu=>AC{cGVzn*n3V;N{}s=W&#fQoeo7GQ}oyRr(c7 zs&YlFKx;{Rpd`@NR^;rD>U!8dSy7AEv`^r3rABXlNh{3SS=80MZwEZ?xZNvpndv9F zyqTJE)f=N~jGH35YTSWU*z#z=o$Nq`Wd{h}x48Owts(+&1%p+6cF(q6XfkluudkVB zz3^dma2?4Wh;W3lSs)rKOAg$2*}v%(N34rLK^|+Oikqwl=Fw&DpRf%yRZp5F7Ue4& z`Oo7_Jo^z-U&jVV-VCK{5GDu)0bq(Ga zZJVJK4u-~oAiul0ojWKG(J5}Rp@|K zu3$>70Adh#jr+FRnhuqWiQn5-J7Zea#H^oM*D^#R6CDY>;w#KbYn01ei=9{k!gX z%wEz6sryol9kxBwG3x^X%zG*_1nBlRoO6T)sq);33`S>Fl$1kSpaVr8iTyKqm*(%V~FAw8KXm>jXv|Z`Zi| zsmYEuL@2WpzCvzosn4y4D`y1wf#^K5lz#{D7b)wwXm{PZ(o!?oy^)113GhK-`kHNo zeG3AfFOoxW*jzg{N8;_d`?9^t0WJ{VyJ?Q|xuxp0rnd zwVbSJFRMkRMRpH>IEQC7-Ng95nbg>S?O;nFR2j0uN9KtY)uQIO9MveU8fL>6 zM^PCC9oO~#!g!N!O>D=IUR1bxEaod5jhFJ_ka9UVhWDpnCd*O2|1 za4S8DPYt_n)esTdGvGLUH|0BO+Q5PR&V<}(8Qs8JddRHkmvSld{<^sukYc+*rXdZ>cNuMSd) zRaWdO4wsn^Mj6d@gZFdSIkqZ_={914e#8zXlr)aOz{f&vp26p27i)^2eM$agPs63s zbkGuGwvO1hWE_>*M^J;~%maxQ;O?Z2Q%^VlF0x2mZVJ z2dWv5^_ataw%myW{#&CWfuUcxn74-X{HL&-&>aI;{qJhz_4XGEhvF&6Wkvb6q- zUUllaOJ8H+c9Zc>wCY%zzih*!9L`;GM`BeanXktpI>RmzJ5-7Q1J4xg&YJtUt`OC= zd~R)0Eq)0|7lN;!q@uB!%KV_6r0@1`qEJcFe^4yn3&*v-bfFYGh9$Oz^;7m2K&An@ zWwzgr8=7u`MODAd@*{(H!5v}-gC=`kZA*BskSv2#8tuIGktMn=~!uiS$X zJ7mGjLl6cEqUeWR5a5{(W(K^#91g$5Iw?HN&i{@p7a)MLcU#7fAM?O-SM(;0Q+eW1 z128t<^TR2 zv4PjXA=O#`Qf{D-t5|mOkg%XHVKbmTs?j>(D`%9F9IOdny)$v}G$%1kF+ zl>Hztu@X6aJ)j$iJnH6NvlZ6nlIG%#O#<0ILG1MEfct!&=uy1C&%`EjISCI9rCu{} zIu4h6GPOY?_1nh(SYr0`9j*e#U5+j)$B@cphszPc8&>M6jb(BX)+CxeT7H$G3t$Ha z&c|yIwT*Ax$htcEjwvp~BgXeXt)hVS8W-hhjuh*Nvh?gL-nYzkFw~%lb^w8M@l}az z(sEv^f;AVpB-wyzU53nCrJy?esn2h5grgdrrRVZH(ew=45NiU!Jb_LXJ5~0q5Ugl1C9Etx*21IIHWO(_mJ_+ahoR<)&1z=I|4Y)#zP4S8NB(4+*a z{L1~au7NmR5R|abQc6_OFG~Io{6g_crDm8K6h#|qf)zk$S-*YL75{(TTFvSHrAQNT zz*}+t{8rgJ$5|?A#k$>x_YLoIWp$+3#<36K{nmP8=WWCu$n=n-6=ffxENlYQebSkj zu?H7N=~rF17QzKDI}%rtvytzDB~&;c=AII91{CcajG~S1sf_Q}nYeBvERiuRbO1}4 zn)riWYWoZ4LLC*~RIVIlgPCDy58Wi9`bti>x53lG<9bz4{}K@sr#if!&L&%1n}t`? z1coA}s>70VG~Ng{??&$H(j8=5mQnPsdRQ2gI*6y4Zt=v)IbowgT6 zmkTD`UAyQ_80r54cluSm_Je+m7YKjKi$40zr3h;n5+qY-6?1Cy(29wxWZarsnTW$$ z`RN1Mc){|mPb)+HrSg}8z3LZ^MZc7~jgz4JyRI?6pDUn~p3JcaHn+Y^#eKg5Uv&?# z`t;SLj;0K|y#GpeI}5 z1Uws%e8nljiR{9Err^I>Bq4DF1V;%n3UlJ;yEYzC;Jk8*0G*CHM38t6*;*b$zHZ-d zbC*hvLVp7pWostbH~ypX!#0Wp2+TM>86Yv0+w30<4ItLI6=4}Hem!m==n^VwM1vOs z*P@Eh?|wSVD7FC^Tavote+~8}9JuzRa66e`YFyfAW^PO^fJ86jdSz_27~juNi{Za3exJsLm4w4|mA~MLI&rfNe07`YcaA_iJ09xP;MIA%=TDXtt2ifmgHt3I^ zT;M7^Rbp0)qVzH%o@jS~72oBT`8f1%g-l2IZ_-SGX@v38j0s;@`1&XcZe;MGD4U;H z6TepOrPV~&!H{M0kB%ReCXZ$WGbX`alN8jHGZP>5z2;qHFQHkqJS9 z1(s^mmE{ykDerBFrZFVvQUIe!!q6&vEw|BRKPSvPpT~XdChyy`8E}_;A<2aj-p( zp(U`jbTTF}t9%zZ!{TVD3A3*CXQSHab#KW=SDtHD6JOt<>1GDeAK+3 zmn7xOZ0HIbpRp1(O3XOO&bT37KpJ2*8Bo3XSt6N$N@q>TD`}M(AudRvP`w|LvL{yv zXwNV)8!teUcpSg2<|;S;OF3H$yl<4LgxoZkiNZ)FLWD-PoV6ed0&V*1fp{#5f1 z$8D)Pkoy^yzkNPW-RI4@RyfAU+bK*@Y`$LVWHFYB;pxMmp&k53{WYkX_?;a& zu%tjDv`Y}q&F2IzHNA13A3Pg*7!Zld6T~>{V7HJ6uKU6;8~71X%e%1rz#L2hby;CrRK|L0|8~Z znojh2id3ShyP79^^_hQ68*KD?iXZ}3vH4@~ENjL*(bSHH=IE{WDGu=>@vBG4FGR2= z={T1p!=E_BHidQ8vL&!=V4|x0eT@{DqQon8;2G!sN0L}Mw-$I)PA}LzXsbr8fo~hb zJRsyfJ@xkGi(=Vs43>Nu9{t zYxH#2GFCb4m0bBWT1pcMl_4=mBc4V&r<1?h$rNjY^p) zfxls8V>Tw!=z^-DA*vCJuExuoev3t|sHZ2?O#As+RG@xW$F{YG5JM$Yd>UPa<^T=Q zo@m+lrsb(qu;qB=yZ^j$%p`$`yQPe;BLWZtSG`MzgQ*hR$4hy3qta*0Nayn2$u z?Ap_Z{#ni1K}iJ({4IcjJfG%m2;mWZ3ASKEizqL&Utxs*vG>5lDam|4Vo_94?B^LM zo~d5$SwgTaziCBP4|%qDgas8Uoc==%`y8~>e2Y1XzKVqeFxDhvN-E7xQSwYx+rry4 zwK7*7^^~O!C=%~exAxCpqB8f6Kff1(p8vOH$2XJlp0aZyZU#S_hKU#{@onFW&~-}D zkna}1?^5^hobz`$?uy_c8r-&DAuFlJn5Ws2Fu{%kl2$W^ELp@hie6h)n~7B4xJ&jk zU_Ou}Rw$e;pYt+P1Q-4xF^~8Hj!ph4faHU+w9>IeO;~rO zi?I2_alGj`6pA(fSRgT*>7U~plPEj72}XjZRkFI2!S5>txuR6oQe-~_v&NHkxE$;K zkq@X4HY;>l8zGuL6{skV?h+J=IW>HKaw==9S59DFE^@F5gD`rHSZtNQr{UE%bOphW$(lZ}1KB6H+6}tO+|8TruMEZw_~-vDD^{(EqLHB{NZjDA!I4<3 z5^0aFma?_5(QxhST&7Ef$?H)$U z2YMd9*W;7E#OhP^E)%zyuq{CdL{oiP;Z2e*_-(Jv)dn)E~1zvS@GI-{!OjHjcH>O z$l!dg)ekC6I&J1>Iy4|X`wE>Kd2;7VT8fHx3lP4|2*(iiG=?}A%ExzS)EXauJc7!4!EA)3Vz z=VphU>dWQ?x6;MFyl8G(jCKrkGQXGek0=rl+4Z#E38GV3l{{OuCEf#~)Q?U<@eIS1 zp9-r*!lGxbIK)7{$#0G}OYq=O=KBzvi}M|h3r_Te+g)DD;6HiQTG2OITGVwM%kmfu zRk0E3$rx~sgXFm+L>0(VoTs#h{H=d!uE^NKTOc5k&jFs5A&b}08+Qg zT#$|pk{w5Zkx%c)!~S@VO?*aD8|dmbjXbF0V{q`-)33DlMK3YnnRUzVzC9r#hEE?e zh8VBNyY}hL5S0*9+kTODJ@T2oj|o>4gux|R_Z348zL3R2yf9DemOn_m+wn&bDl(5b z4+a}qDwGF@YNKKXUj5|>r~@kbI3SdSR)VBprqv?%(g)h1id+F(Xpp7eWYjexm?i+9 z3LX_k9!+Ck0*5?0A~b+EQ^N>=n3B!mJX~fUIcp$F+yZ-8Y)JZ9AyRcJOhm=^RCyEL zC91s@P(7uaG|65>>?-+L0S508%jdFHyDh?e&XxDHiRkqjI3CLs{*x$ifBo(KTz6p9 znAM2c;aP>l2*AVQL2?(czPM4xY4r-potw^uxT|!eAq#Vy_u>`CO>Ry${|&qk=r6Bn&HJ&TlNmUb-l#ja4VchCoIU&K1p{c@=w%UPqaz<+soGnJm(%J5! z{a~32p#m-8G)xS=;P$dj7t_qPDQC_lg&vMNVwqBmfea%od5|DqnPq<$d$&3^2eCUIfz?mk_$0_vMudaH z&s6ns=gr|=YOf*I;)B#V8|3jM3t@ttNAPSfYX>;vPTOzgFscFn==U>PkCuVB?c>;4J{aezpg5e$e=rxmx z4nEP4&-^UA{dvz;x2@ghvgtIRi2a9N?|v7@tpz~lBYHomreJCce5X9rUSf}5OB#Nv zLcW=LL^YE{mJJY&s*`?K{JeJav`!S^fbH4td7^K={+IdIGr7qBKkQ@Tf4q{g;hwC0 zMi1P_3a4ts?Fe&!p$Auzfgvf>5%Tx=HH3#h8m9DPf;xa5X##+lWk0>8{RE{%zCL+*At>(~|bNCTGRGi-r$^MfyqY55EtoCHT)M`rgxY?Cqby3cjVW@gg$wTpjA(q~uT!b8pO!mwt9RaF;<^(d9+qFSG(;@$Z?|2&9L#-pd@VU~)OG(;3%pP3-=v z0kq1D57flc_L}g&W;`S+clR;KQyGt@>pw!yQtzuWlh^`dY9l;*b>!yuTMXGWymlMb zt%e5f{Blw7dq{g;d`Yf{s*BQ8lYx3*Z`LGXA?wlgJ2)#meS5-Z>b& zc&M*dVRc_^uH476z-MJSa24BhcM$dS;;%FL}ce+Nd7CWq?g@C%5Gbt;6?`;jx5DL zZ{mxRG1QeM0cjvKTZ$!ahHLX|U>OZgCwHD8yCsdPX{Y=ic7_S5S6su#h|7-Bw5z!q z`~MeaiC0`ZmbG|Tr+wkP&muqw z@B$w_ZsX3ELMkp{2;BJBHzuuJ7~Kvp6Mj^$M%{#!~-~w1aKvVs3d_xyoBTizXc_O$hW@@7=6kO8zH7%p9HxE6lv~_qN z;dizuFRni1ydD*c_yesv0X()ccFG!8jeM@w^AJos<2-VHlMGi$2xTpKb|t5%A-oDL z!LJC?T6!fTR^6wPnqaX(Q=ax1ZCPqKqX`ffAwVwER+wF6_HDN>U=& z_loU5l3QY~=5ogjPbGosJvc0cU^^Nngm#zqOHfk2VT ze~$u2+f>=*F}(w3(@%sE;}tC_gK6;azwgUEBnru1`6%6v=}sm-earW&%68nSpzxro zWNU+W(F3fJi}e(p>s20LB)PaoHyiGXLxLHq+BSi&VZCe>EGj|^cz&x3MJS4z^^&-sfOJO z?~7oPX{v0l6n13k^gP4bWp2<=b;I4)pUanhKJJyQ`M4``%(+Wd0G$&{)Rr{6XymCJ5uicEmUZp@z*fk@^vTa31S-@ zr=G2(zv+fXt78KrAEs9fyjQKd2`o03v-ecChx{O8jI)0P5gF0C6YP==P*UuOYT6*g z08zhhT=}xCm$?KfP9Z?1*m<|*sRW{3tWgvcnDj!{?z5=@@D_z*$d45B_xY`4vAc?4 zQ(IMt*a>x0aVOhi?HA8)(a+x^k=vuVi_4EGG4Gg6gRr%uP{RsdMWEbjfyg}oh&ZN~ zUWW!4&|q07IC9N@zZ5k#DGYylmU{yKo;F6w7agkR0A?RwXULlsmPL$iDxdb6{SQ(a zEm3GgO4wuVeV(U2SvpBLrDIu1Qzmn2+d|^+6AG5}n+yO)GY5^mRSW=(`nO4%AeBGE{Ole4A#<6^5le!3LBnt_;lr~;0s+$hLalnjEqM`J#O~oS>f4MlOUw=7SHbaa@ni2{-bHt>m)VpXf=-BC12iq zDY27}Xj(xwu7&h$!z{!BrZ_9Q|7?)V3W_P(pF0&k^Hlo!vNz#~%VF;LsbkdVbjKwQ zkl^mU`hw>(%Agx5_P1F(L@>TA2&Om2IeyY1pG838u*f?=GCc3nWp@5jUg$qn!34A& z7DW>;Qs-ZnFqix(fu-X9?>t0COl*XTH-vLPdodsTS_D5`#i*Il?p(;Oq{viEz6CJb zj%AAydw|HD4MmiEi#4%xq|cDbW$A5w7^KD^Y6!~!K=ALy7bHA^<76v*y99;1 z7%Arno{o{u@CRsfjM**w^>%Y(ql-niPDF9g_r;iGXglH2nnHZg{^)|Jy-+8EF<=lA>Z= zY+jMK1daz?hdJ)I77w9UP>M(sl7=nrzi?xd7em*}1kzNC$we>(FTp zGVsLvdpdSgjIO$Xl?;zLH~bYG=Q-ZFksaBT=c~e-p|f)jf3M`1mYVAp&PS#2JIO2V zo_+-fYgTtS?OEJ2rsvy(`!hC{7QB_~XIwui!f4KJ$Rb@LoiCsU23)`L8wG z&NsbK-vrZ*%!0`sW}4}5(jqoX_=qyWUfc~E7qa>3tm~7ZG4UQPTCs`Zdg zluM-@gRHK`NF8;lbCyQjEjL?8VZ|U`cgva-vXujPH?B9*OkG`Qs_*Y#oD0 zNSV1%jdK~D7Ssj5o7`fg05T!2K)U~aX0bK8fR_?KS#*aq680L}3wOAutDk=-COC@j zkq7MkugCY+9?l|jXhJHHeEQuvek z2u$bXFMrpiMe8h zAJqvOOci%9mX9;8Z#(Xc{=>`yDI4j)7Lv-Ti7&jQX7&5ldPvEKY@TTH)u(uX4Wv{z z)GJ(qJIb_{`^z~ABWM*!+Ugb|hW35(pG>oZHC0AnR2h&Sy#HU`dL7_$s9PH~>NPMv z%SccegOS9-UeHrd{fxXp(TD#%sKl00YTBPF6`-b>jaFw1G{0;;Lh}0YO^-H6v0>g?%v&=rc{!3G zyh%!CyBP=$c&6kZS$-X=f)F8NC;Q?~5e;17crt?WpYX-R9h_p6e-QpBn5M zYaJT~pLNNW1X1KIa|10!Mx=@<+bv1LRG~)&`uimgrqV%Bd`l1RkcrZ`MV`f8TOcxl+^;)~*LAJfIa z6D~C&ek+?TWbC%4E8t`MAZWXE0%I`wG&ags4~od}I`FJ3B>j(yu$4UaQ;2ntpQh)n zq-CB1m0FS_+@1Tt!80F6I)u7owqcCFtUsD{$1d5VHIzn>m*nmYe$Gb@d9gU}Ar z(iEvt78CPO^YM9S9{$rZy`i!<2TqbskIf0Pm#e#wx_@QVWa#%LXT=(eciaV~WrN9E z*phUs(-*+hjXWen$gUpow1;<$i#ZJn!hW~6`-~l1&{&)|NBp?STd=0~9LL4lij`^) z^6qUqR25bPwz>YRBC)#3Pz4W?t)ZILA=kQ8HyE!(8$zY^dG{fzHPusU2>w^%!s5kB zO43+}@2zf>MrnIL7aXQSyJGZ7A(t}6jIvr!n+1gZt$m)F5v=$=r}JmGOCTL{xp^mK z>uR#(=Xl+5N4{NDH3Dw7eUAvZyhr87BPCCRM`LNQ)W1F^Ks%Q4_ImtRNutQj$!;1t zjkeu8KsePOjj^cZ&7dwlhy@C?Z)j^o%dgLEy8)dB5P!@is5B}w#%zr?KZ{m)BZZ9E zsXo>w%Qgzwmhz%IaV>vV6+T+z-#3?IXUua8&o`w2X}@c4EMc zIkI~z^Z{@ZHvs2cMq|J;F`or4rb$-S(472rjgy*GD(j7X7Pv0Sd|>JKEeeIEIW4?vU96KXc9SV34g82FIu5ayA$J&y=+*5{;+elab|}Ya@`xao1!; z_=0+*u$Rfpl3`8iIs&pzAa?0`4t%*HWGNb=E{fELV$$sBP+UvPylheVLetEmiz+^> zg{q3rv;tX2V#oRkgaDa1$>^Z>)Z~ci^Vo@i;iJju#4n4>^dHe<_}2_+Dj#0K(vYSV zZFMt{Rdtp!JLQJa#VCx0tw~cr>Xv0pn0+8~rW>Ej?C4XEqG$LCN>#GvAj|nh_$0H> zh|_GaJEbkTOI^<%eLP528TPSIU+Qs~{lXuQTf8Cbz-hp;g>BttQ)tp6cZaPfvU zz{n}D&wu!js?r9EIid~XkBWl0ta5aj84VMyiKZCnFF6uMk`=ecWSSn;>52u3r_Dan zB`ta?Y9V<)H=io^@FkBbPcY{sTbY7LeL82D*I0y5>d`QaoNU?w39myF4)(s4=7e(t z`q?(8ul(m3Sz9?N|HrrU%@{n1ZX(R`{iEWg6AO$ko3h9)M#8gwW?@R-R&nWqfkOli zzL)^a>`^Mz{2L76Gp!k*&oZt>7DC(^@!vo(bL5*K9^7thgEf5q(MlgSVuqgv zVm15wyrv!aFQuPfZig3M%wrX?k1Bh>K{r%>ka_*|2GjCl)S%TIvuX34OSEOoLa^18GcCv1R$?ImF#~S0XazUb3Kon`g|DwiIywRW0Ke<_(?-c*rG1@JLqWh៘+^)}ER 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

7s)<@Y+1OSF;QCavR7j|B$$zJ#)RM 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 IVFZmGlRV`7wg3PC literal 0 HcmV?d00001 diff --git a/MikroMaster/20261001/20261001102002-Config.rsc b/MikroMaster/20261001/20261001102002-Config.rsc new file mode 100644 index 0000000..820b1d9 --- /dev/null +++ b/MikroMaster/20261001/20261001102002-Config.rsc @@ -0,0 +1,4340 @@ +# 2026-10-01 10:20:03 by RouterOS 7.23.3 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-Lan +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] disabled=no mode=ap-bridge ssid=vados \ + wireless-protocol=802.11 +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ + wireless-protocol=802.11 +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC name=\ + "ether1 - Unet" +/interface veth +add address=172.19.14.102/30 container-mac-address=30:C8:D7:A4:6C:D6 dhcp=no \ + gateway=172.19.14.101 gateway6="" mac-address=30:C8:D7:A4:6C:D5 name=\ + veth-awg3vds +/interface wireguard +add disabled=yes listen-port=41430 mtu=1320 name=wg-awg3vds +add disabled=yes listen-port=32252 mtu=1420 name=wg1 +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +add exclude=LAN include=WAN name=Internet +/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 disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon2.to \ + verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add address-pool=dhcp bootp-support=dynamic dhcp-option-set=domain-search-set \ + interface=Bridge-Lan name=masterDHCP server-address=10.30.30.81 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/routing table +add disabled=no fib name=To-VPN +/system script +add dont-require-permissions=no name=fetchCustom owner=admin policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n\ + \n\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \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\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc 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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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 dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \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\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/22164/cc4a4bc7\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 10:10:04 01.10.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 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: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={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\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="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +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=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan 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=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.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.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 +/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 servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net 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 +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.33 name=prt.vados.ru type=A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +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=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 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=2ip.ru list=Test +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 comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=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 comment=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 disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 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=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.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 +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +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=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +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" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes 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 \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + 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" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" 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="dst-nat for amster HTTPS" 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="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/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 route +add disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +add check-gateway=ping disabled=no distance=1 dst-address=192.168.0.0/24 \ + gateway=10.30.30.85 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/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="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/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=time.google.com +/system scheduler +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=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20261001/20261001102002-Diff-Config.rsc b/MikroMaster/history/20261001/20261001102002-Diff-Config.rsc new file mode 100644 index 0000000..72d608f --- /dev/null +++ b/MikroMaster/history/20261001/20261001102002-Diff-Config.rsc @@ -0,0 +1,8 @@ +607c607 +< \n:global CommitId \"main/22164/cc4a4bc7\";\r\ +--- +> \n:global CommitId \"main/21876/9731c0f1\";\r\ +610c610 +< r: root, in 10:10:04 01.10.2026.\";\r\ +--- +> r: root, in 10:10:04 30.09.2026.\";\r\ -- 2.52.0