From 47eb8930d01b613179645acf26036c5c3f24b3df Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 17 Sep 2026 20:00:08 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 17 20:00:08. --- .../20260917/20260917200002-Binary.backup | Bin 0 -> 243760 bytes .../20260917/20260917200002-Config.rsc | 4346 +++++++++++++++++ .../20260917/20260917200002-Diff-Config.rsc | 4 + 3 files changed, 4350 insertions(+) create mode 100644 MikroMaster/20260917/20260917200002-Binary.backup create mode 100644 MikroMaster/20260917/20260917200002-Config.rsc create mode 100644 MikroMaster/history/20260917/20260917200002-Diff-Config.rsc diff --git a/MikroMaster/20260917/20260917200002-Binary.backup b/MikroMaster/20260917/20260917200002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..768c4ec1b1062b17a5992664f62a7c695f178ca1 GIT binary patch literal 243760 zcmV+aKLEh*sF8CpxB~!TN<(KLvOPE82e$}k%_AHD0002|`~QA`Pz3;3!s&L_u!h)| z=~=r$)50=s9=!PKtqLp$Z9-@U;a>uop4)RBXi5 zAd&d}H?gYs>;m<*NhHIwSzH=`P|ef|>rXY2hV_eAPMTnH;Az&8;xAUx#tN{A0rGZB zZ=z02x@=C*O8q!-%uk@FL+XC!ju=F~dE*-Hw*a4Q)h;K|Qu{uPU8uXAH8J%B9YO2N zGWHHR{<#V)X^&hRk|e>oDSLZIEruk`OOY@2Xz(%g)5ak>?0l!KUiUta_IQBcPSyNB zw8Ssd?@w|8D~rS6)>haaRNKi5-ygiQK=hY!IA(xl2k~gD-Abj^ywoUyOB)RDAVtJ) zgVARzJ@wAMcj@nbXCU$1h5R7)R}AIC$5}HrwPrSf4fWY}ZUJ$N_Vk%x^F%r#i2xq_ zW>Wa+eEcG~`QvP1Thw3E6u2|2!L6d{LRkFGM07laOc2U=)YtW$XtzbHX{&q`^9CQn zuACF7ARKF?_$m^itX$`va1C3a&S};VzNeZgfpKKOJ_LkNxH}_q6>C(O*{{_c^U4 zs!b$iI^zJm9q96HIg8y>qN0!<8L#TGGclENp3g!1W0}MD3}*s8vUwYj5eEU>=r+o@09rZ zWnbd&QFYnw0OKRRO7R+_;inELh~)kipLMXclupx2pCey9yNmVSt_f?L5~5K?9A0mF zf&Mj`2cX-(`QmBMOTiYTIx`QTM~AB#tt1+N#c1W|Xs#*BY2IbAOiAfK+p@8$$NYw* zs~2myK+{>XifX&n3iHrfJj*e0Pv7>sr}xpK?w;HKJa_23mS_tiP7y3vS+Z?_@?M@b z|Hre@a#PUtb*n)Ys1`Z3ljzOOHc4BRkNX1zO|jnud>W7+^yT`IrC{gQ199#6hlX8W z5!ciXwP`}0o<7cu85Q$rs=RVw!2pMDmvqQgnwfS_sNh`%e<^1?qzorJm|^M8n@JD5 zQ6@DhDX()zfCnLGW*A&VoR5Zn?p?0RR$ih`Yeq5N0|>TJR)AKaqWk^+K->FMj2@ZL zH7V4+oS`vMdV}uKStv-Rc250?=+a{3St?Y}f6uOaPvfFNTV_a)zRoJ9%FzcKB=dr@ zc7ZSYnK}Ie#1>sv`z)=@QZ&1>k(y_b|22k&hDet0?#AE9G?hUab=BePTiytN z(oD+~X>I0S*wotfu&6e0RAyt?um4Yg5g9_bLMgv!vkWtKw)Lx-I-IqQB#%zh%FCnl z6qZ4MyQ$mTmn~0dLkU7;o8C1=W|zzjG4y&OkFd#CWHJxgeSh9J6z&sx^ilq`irICi zX*9Zec*W5esSF{nNN|yJNRCZ=kE?TW8L?XfDZ?crmNyXMM7UptmPF))_uBk(hH{Vc zWg3~ZRrQYaoQ=`32&9O<6_ucRyP(p16G~pg|1D6M@B9qPU|KYQ62AXQ0v}X3KnxXM39 zXjPO{MLS$+@h`X;d0L}enI`QOv?I(ytFzFp#+L{xvU~NhHJy0DAyN;rb$zy8$_7dL z_p_m7$X|UjiQis6%{3HqMZ_rOFY%Psh^|UsX74%7Z1AhCWxCcFk3BH8j-n7)-9Wno z3eZu&UDGE}y4lUx>1aWv+*Z`=y9B9NX5W~4)lFR4`SM=s=-nVm9d`qAV!Y_W&|&D+ zaqq>sGqw}o?cU3eT){6_FqGo$j%|nw>^F<;^*Uyn6GBL*%c+o~!#D4=l_rI^ZtgEB z4-sP>SAOjn5$>oOt2nMbD?LZ=LhHYL?`j{U?)9YquQU0SXV`M%-plUNThmDR;3kJV;t;8Y=F3}Ge| z!ZvxRqz?bG`r0_@1Rud_YDX^#;9-xBl9^5=>m1vl#_%3zo9=D!W7!(nzF-w%dNw=S zjbQZK)$wm-;_Pj;SnuWIkPzPCx4LV$4r_4)8ZXE_tkzzff~m+rs%l!yi(j&;3h~{S zGI}RwO4Z)K{P^9EuahyT6wjG&+Hwpf?q3*BJ8hpXAxRzk{JOmskNZO;>cRSF4&oCf z181pvCw&~Qhf$?ZJrE09pQP{wZ0Np$BjzbupAJ>fW$r-C%CmfJeDKnK&dHO;>BqyO zi-dasntvrS!smM~zLe%vrP~(O(PsxPEX?w1Ol*G?RS;o}ljREmSZ^NI(W2#Bnd<6E zw$m>(A2G6dg4KgE)M6J5BeL2OvfOCxqOkduQV=fBA`A6l8?pG8u}7U}$8^go7Q4NQ zTXbRT$3ezlACULm)ba?Sdeq%wy<7(2R}8&U{uw-(p3U$h8du5#;$lrIXAuW!O!J3q z>J+AtqG?KK{0yM81IVQ>lqemJZtQo$HQAXon$M&G1xYQ6_@d=Ed1xf$x|$_MW~(gc z_ehL5DxTlYwj&ZdeN~5sCm*W^??k6Hfx?r}gBF3s#kX5Ec4&S@L~cC;cf0pTUVm)0 z3uF~{r;F8+*Hurk#{P8Oa8wRGqp_|{J7&Uqw*6`3HLsOK&U_Ocn+5D%t#c^11C?g+ zQuu3w{LBJ6bWAJZ0otGB&Z{JGG!qW9zq0b4(&v16X1}PYK+|bkrRp_Rv6q$l2XtYB zD==aEj!FVVq?-|9Jr$HaG{K>) zgS|ViYYLXb;Qb29ktjSNi>&hSTzWAHI6+O;LO>a4R<5m~aXhB!1bng}o1`cwzMz_! z4O0ezd36}H`8)=4#;KeR#RDbUwEfNMQsKBA+RyB+^Mx*AWww}8E0HPTYNpBhWDthNBii zG+K%|moz#~cNb*0Bo?C{oEV@$6ytEhF^X^QQ#qeWI;gj7A zuXj2*aq|ovTPdKhjxX;n%nrC@^|IaEM3@hSgtrv{?cIs{$(2zgc^NY-O>*d}+QvTYg)~R0RTW z8flrk-tCMlm1Aj2CX-vOF&C(kXZNs;yiKMPg;g>R5@kQy;Ge*+;hWg6_gmg}D}I`T zu#l0(9ItyXmy*Pb1keSB;`u98<591{iTi{~;ij<~qjkGe;>S_soxh&m(L!~8Em>fC1konxIlAtsHxl$Ao zJ4RjFoo47ISCRBMA5_5m6k$Bg>%!OQ?+6=wV#f(yo#KSkRjscJJ!-){RMR+0F0*;_ z;(QeE9o2f&so^^*t^FM%-GH;A=@haC0;{Pm2!F4(o=h2<8(wg7e9~FM@5w(?>B74Sb@l8 z9w5#pRSNLcp*6r<#LOgv~XCK=N@A}h z9$l;p7MdBFWBwzvK1j;^>dY`DYW4n$qOJ?No8chgT0e)E#Rf z+`r_o;_iw=sr_Qc*ukOTi;%VAl`8s7R^7HxsMC1K`m|;bBeQcm)i8G&jz39_8ye*x z_Eg61oz6;w#CorSJsmMQUIdTdjYKbNg30&o&<>s$UD zQfGRM!I>D{sXHsygj2+Fx?^qV8MP14+fp9ZyFL;tW&;rzdQ4Y)0N##fSKjb&!ctI#N-6ai8b$xx} zlfR;2dRC$$*o_Iqzu3s2B{^xaQrLX{$6W5%6iVPLMg_A(F(z!7MNLz?d{_5iO4!Po zz;i-Fv|Y2`?iNg(TA8SG#?EYA_3(cG&wA4JF|_2L*SjB22>2?KV-jlilfvFyJ?#K; z%g|{y8oH1e&lRes;^UdAh%M}XjY$vDTieqx2Q}ysp&>2+v%c+AG*|Hww+Z-gF`v&1 z)G-$aim7ZTftscyhqDntq8V8X^}}VfYS@`s1tcBPl^azA#GpZby^r6d1~GX3xt)`1 zThOd?OnP*8~~^ocf9 zN4|$J5>cuOJ)yeK7fjui!h}H{Jh~+v9uw5U6)U4QC-)IA41j7Oe`m7Rm0=oqEsQSi+P2#5esMf%NQo%Y;U`NhRCs0i&6yIF5h z7!^vVt%mK+`8M);Fpe!Hs-xJY3KvUmXeYF~v;$Qb<`d-3_j=$3@Z4Chu}fY8S`>TK z)NUpT!JtOgK}eoI1#gueP-czSY*tjFywo><@6=(|TZ2BCeTsGwPWet&Bi54*_~wZ? zyyg%&{%kiCkNq^KQ7ry=64ccs`_Kp@UbP@x`ln9t9Bo9_uD@Oafpbqja9bNCj5k8- zWILZxK+V`-Oz$0&h<|vDh_(z(B%wXgXN7=HxwXuqJ8ePiT1n?DnACE`)T*E14o;h$Co(E;FR`DZri{!1Tz&sCD1Q6mSxM5({+=_leUH%-DR#{@$f(S`sQw95ld6r9FIro4(O%mP2KW_jr@<~h#nJS|!%6K5s2w|pF=|j>??w`|$HKvPMP}D0*bl>V^Zk|dj)~$12 z%)u&MWR^) zb|7$(1m^%3AK8@vn8nBSjHPqOvN@mnjcd9$1LWRDvt2t~pN@&gz*gCaXGu^##mrkN z1K3t&gbL?($=bNbT24BOzGN3v zogvBZ(uGi8!W`4+@RVPfy8J0_}gwUEISG6QfMAoI6)4l=gn7M-W$ zVt+97exBHU3C*HO23EHCKJY*Vl+J^Ss6#rzpQn4FBKI7UnaB9>6cw?)9G^TDA}u|@ zy(;UIUXB~1CNJHtLGJmL7z_RXrt_viJ5QAUoqg!ACN#kQg+*@MVlcs$$8@o< zjhj+YW2n8nfQM8O+RdvS?Ia(>Ru#FpcvmE#C|5P2*D&P{RaL&aXm&c5_h=>=nSC!{ z|1j~>RF@AbS_nTA+3a3Yagwuei_Y`j{l>pq0=k`O8SnL@YVWR#I(^l z6QooEngsBXN%hCRAo07)G5?i(-yzfzt!1e%MxlIJu14JAXdkrY0!yLpG;H z)5SHR-m?81J#JBSc$*#I>DaIde{1q*bsi%?Uwr0@k@>=u_cUIU%GN{#h5tSN0y;40 z380;kq#HNao#YH1{XD-r&Fo7DfRhpGw*f~D{LQgFUcAlOXq*yP%xW-QTzO{Eh2``k zv0n?(?+>?N(-V48k>AjlkG!bWf`{mhVar|ZHMxw-UX9iFt-9QQzw&&JO9VTgm2(|ZzXmt}U070g<<=XgPN4}jDcA^V)UBI)@4 z7B!62^;jLrBP3NrE80xd>+&Q`L2DOl5>BhxC&57!h7Yi_-nV=awU-VK(v!K_iW)?K z2e-jFvuT%!#z>K|@rO38p`7DgG}!T`yBT4Hch8P+Z}_l-cCvv@zEl`*QgEQ5S1xHZ z1O1kD)xU6@*X9DkAfigq>>(oNAp&^~T6AuV+IXMN4LbW_G@jR9I9juQ@Yk9t8?zUO}=J+pbFJfVFQ&SZel1! zSKYCCBcn7lTh0uownNN3+0ZQ;$AzBYz8jwsf^~EL{%SNJH8Cy=#K{-sB4~67Dr$5l z9Hc!wl`;t~pD`m?jYsu3bQ(F$=e_Hd85F|Il<#(W^6m`L4{|%i(C^`z%9d6c@1|AO<~5eECnxodY0BQcb~D84ogr^n zPGRE7PZMmtVn`{Vo`uY-I3*?)REU*qe!>Ah|LAJdUcbfuWb)1=4%vst@l#*v2vueW zEw_=D1%bJBP4d_<_}pZ@Xe@Jjaw@axs%eS6c>X+sR3+1+x(ZsB-lEgvD9y9% zS#tENkK~9ZqZZX!01K~9Vs%C$RU^yosL*w1YhqP$a;m6aQ6RANx))J`;|FWuhrVHh?+AmnC{KL%23`@!=^qtZIbq__+q6>_D4ir7S}{7$RfDU8HU zR3^zwazmTIt16tzCrI54{3L-c0UK5gY4S7Q!CnB(YpUAeX7QHJid>9%R1V|wTV^Jd zGQFojXUF@AGl10BOfXC&xQRaXy1)0uLS-KVo<)ty8*p^ogp!W8qqq?03NWgvOumX% zph1Bzr+W#)K1EoWo#P4f^K}m#mHVh_zI>hd+447%zEa7i59VU^m6)|`Ea-vmX5D#{ zx1rB6CIz&UF)3!QJQ`OKf;Wn$<1lk2j}#*MmN=N=O_p0Vnu7(nfE2|-?uii$fi_p} zbXcOh&jX_dC+mk{oUg^!<_5r}TPw<>B8QslNn0tH_z)*e zr9{LA@E)gf_;{Zo{jiNbchKc&=YU8mq#Ip_4H$(p#y++sb2rx8@~h;K$2ixN>Yq(y zmu!_4U@7+;$1D$@zTQK;0MY&}!*OiK*dbZR6@IHFKs7{;1INPnbQ3^|t}xvlb#)N_ zz*xcU9XPw=>h;Lw%wPENArxETf#Fmf>vhLcJgV(q+yQI`M1%9h>M*3RmePWmrUQ-d zv2Bu6ey?$aC)0jVZ@$ajWZ&+_7@%lo9z8b~3E`2rP-6iZ_u;)w-dsZ;Blkc?-LvG2 zBO*fe9$(87a1@#(W2!2?);yP^$}_5HBM>i}d7Wn`O)F4R+0R@?^bPZLIhO@O5)O^z z9NlU&hkvK?ebX0q0@jjF@AOyUZyD||^_*9T!2*;`d0rwMVP0rFznlO-RSgT_k4iD)f%ll}qLF5C={k6y!P?a}$;@j`5S6Xiq1nMe7)?7bw zJ(|`ss*{|8L;pZ#21Hw7{07K zK54#W19{{^o--83J444r)CJ-SYiaMJ353xY03fxlKd-4rmb_ksgsw0qXU&A9o_*D7 zHLs-%iDR+bN2t{Edt2&5!EOCe7Ng4=`|Y&s`X|4#K0n0RGsz0AMfKD;||s%A)wvP*Wd{C`{b((b3V__jWW#g`xSm18$ips6s+W2uaDVUy8(oMfJH{C z|IejUGZHuh+M^|(&8sjKWb)~}11^;uMzW>-y?Um){+~~oh0EE!y1*>K5L{%9)OLL{ zQWpcpDL(mV*3!juu(?RR{rTSw=3FWd%@8_-_x+&k)P~s(-XHLKuxHoMtM!g9I{Pb% z)9sK!39hCfVy4(t1Q$*?Oeajx9;31zWdb-EM^-#w$jHVt)>Z{~bwiq)KbV+eHDlR& z-Ds(h*!BeW`?7(SQ7P;=q+9QG*1P0OHHGa#>4U2J0d>+2{K?OSVW^YY^jVEfj8>|95>|&q?ymU>Nt?R zcmlv{y@*ghf&n2;rIrB4tpA@{YI}G1E>_&P?w<^A_@mZ|fqY$$!2YIwTx*+Y|Slv~iglj2*6#c~D+&*X0 zp~bUlEFAnZNMP)J^w!%ibW_ibR88rQ^gMZHTHU%QOejQ!J>&G1YbC~QkW4OT0FPw< zU4mxuIOku!8}PWR`E0q=B8>LoRN8U-{lqbh!n!=jJeq>#a*~T<W45ruXzf32I zDf0@3>wSlg|Hf~xiKAbBX6rL}0-bZ?U)ugWS&m2EQgAb%UQ=rv1Yg%{p|TwPm0CWp z&dxRT&3e?7m)UHqP!C`;8;8s221z7|?}*}V5HhffJXkhU2?UBs{lrAB3p|JONcdF* z@mVT2GoniCZNO5bhC1CMh{d3e8XrMyWpl#9?Bv$DW!pssSzycK4apHBW$-T;`xx~h z;A}JLbg^JChX*hS#iXdth0K5;I?$--*KN{=zoalZOlhcyxvnjD1zS=AIgt2DBs!%U z&0aT~C+BYS?oRgx4@HU^hB2`qN9q+nqxdW&%TnlG6Mk)r;da*-(&~ zOW_={JnsI|f0{J;l&_wBg7VcL@d#4&n~pmg~cNVW7&e*5!OVtLFF!ZHWk zsM&&b4}9-x2ROWX%)jaof2{5KnO5^D-%K>!^eafnt*>1)!p2{P|ikB`jNR zcR0?@sD_I?Xg!#L*^7KBg3NIKxB+q5Iz-sm$z=DbW7m5JVFx~BRbd)7!RY(@<-~=< zD?LkUcI_RzqhY-WS6O@1IOQdbvt{ThL6EXq1K=0sgfpv@Gf~TP2Z#J+-^npFV28sp z=IZm>nxBpH(kA|jDJICCwWl!!?iq8v?jhPK!9(N!IycepFq%nP-OkZB4OujYPRR%L ze{Z&#J^29|V6OYpjv3&U+5Nifzd4MkDB1zOwiqLVozhY?|HhYu+Q~k^ z@EY2Ki^9Htz_?$kAHEUUXneK6b8cN$cNfG{-kpu!!8`O{^bUMBDNo)=92jDuG)N55 z)%|lDwdfTJ9SaXZ7}?IdeP&a2FA2HY@-}DI&SLDw7F6(?ETy=>=YDM%Dxd4#JHe#X zw-d$XJ(3q+=`1sDah1J>vRWQLZ7en6a|kJQbTTM<6?Yn(F@VmDC%+0@;w6H{=q2h6 z9tB;LXy5G{2USDkoYMTEWgL?~%Y+c8}BZ}RgAWkhz@7_v5u-D}Gx z?xPfTP*S*GVXo3;DbgNtM+d(IsCq`@7lfUMjw+3`Hq0(1(V9iNtIrJe zFVRi2096tZNDFf1hYRepg&byo8F}uyx#ClhR)ySu>ycMW501e2P$9lUlK7_MF7~sc z;fU@p)sR!a(__S0=ne%4ADjffe|=|lQbvMt(i~V;5LKuOj_+CfMve6HcjaaV94Fj# zPaq^de#qoc!Z*~Z(TKN4s_!xN4vppqO@!UA6ael$j^2-1)PhRU9kE3->*P#=2}13Hri+3ygQAUQxlVKCoRF z)zzzsC?BQc>y^-@{Q!-p*sJha^5TAH=X??-Fx{?F8#=xG9<}!UU@`cfX-2d6=jP!q zWFP6Eo*45g)OyYw=Tm5)#0P9YhO?2IrB7TENt#b34%V(RoL525|L3jR6{ivM?)I|9 zU5q)}%c*W!8M}5fnE%MfSsL$`iPLl%9G&LXUPzaXf_`BjXP@R-O?Ls64XIz8EYc~% z|2&pD$NQ5707(qnelo%$Ae@!C5I`9zI$NxO+|7W21UI5<&`S?uFxSNUkWWNO zTUb*@#Pl;pPp&WEol6nSX^l2MMikk5P^*S^7=Grv;zlPULDnU)@caK_QXGw?&OsgW zA*G7F3M+wMD?}n7Gl8^XBUi)UoRKF}abTgP;#A><*DV?%*tp*ONfOORjhR|~dMVI~ zn6s%0{ipkCRX|+mNM#U2z?Zg<50W9m(7|GgjwG8y~Rjs6G())=T&D zy*-ss7XWhM)?5i6p_;IQuh zndR~vjvO4hvI=XJsAh27&_06Hv2JmP2u398e~Fhzb_5+ojN$igV4xNy}No5){= zQU}8XX?|TO*^OYEM|7_Pzf837qY0eu31VYNUD^=Dor}P}So(&)+4Y0!NcMoA%Jc^s z>g|JzKE;nhM{~qia^D@0PJ6P?{FY8LGEk)Ibjz*Mi3a8kC(L@zYdVpibj(4SEe~0P zENctmt^bOuEeTt6NtNilAM5*5j3DhL3Ku z4y|DLpJr|Ac)6}L(Rl^S%2W?|EwTwBLku>#uMoZ)pDjY(%EI$!3SM*iZtFcNL0Z`2 z6BIob2r?XbgrUi;cFuD-RkGBthMA~zFhSkJ{OqX1yM8}@Ypz^2wnyBMuaMb&2xIQZ z6;}I6L~`Q0rG_P7SIw{u5CuR@7M+-|S-y_(M%2{L^Zdb^n$H;NEgy{~aI&`P@;;op zvE`zUN+|>FkR=r3U0)dRFZF$z*&OdG`R_Rs5r&JAbf4%Z)GCx%^XLl?amTP>mgKxf z4L@4Q;iTE26BES@tJMS^2TJAseo;KFODhlMlabWSojzETEVF>uCY_us2&R|_1 z!ka`JmGij)kcc#J^Jo99m4R=wlqIBu1TC%ZSS8-x#pw@D_v)krAW6>&^>e!FZ^%pZ zTMz&!)Gtm~O=+e&U&qf#wl$amJZKL$co1`0sEEkJ@2~y&7IIv7*$tZ!Yo{ z1cz_{VCN9K(w1og7phm*d1?(M=ZL~3Iy8C&&~s(@9c92BD(ePWH=zsm#8Q|SqlL{8 z^A2CQAh0_8r?~0l*&zzt>o1UT-yX&%%MZndH zi30>47t{FJ5X+(z}c5ghkH;~XTEiR;QD|J0WL?I-SKs;sZ*;GX4u)$WGz2Cfg*)7 z&-y8XsGt5}lqbT1hPTe1eANf9va?D$wioEWf3`BiusOxd4_s^5tl^)(x|e&EQ}fc5SWHF$S`o;Dp0 zNYDrhVifS^;*Q6@jY1>>^B=@bprE_o4rN6*$;-UfzWh%EAH<$8aCuPr$(w`9Mqn`O z#HwMaDYBf}>NXz78DDR7OYL(k3sPL}7R)ywil-Q3UPyb|6PlfhgsHZDygR9Ckf#MxMx{$%<$zCW{m)-vk%*Q}(uKPf6OM70;wE)ebI6dfHxd?}c--neNhZ zJZ3kIs-_4t#5Uoi@>k9Di$+jn93fodazT zfDSWRYPK*mg34OetTgmwHvn~2ih5pQ&7VDAwy+)tOTub>kTf%Nu*djFRY$5qCM&#} z#{yF@lO=T+3?VUfqfcITb0dJ(2rt3`pkX}0%1dRvH3t#ig@AhMSjB;@gnxXOwQe!o zv)#7!R(ImX1>hZ#S!Xuckqa_jU?Lrhl2g$2B0VNQe>XjX%|v~PKRt`S)hSq)dS2ZF zFr*=?NF(cYRfgD*1#rM^E%ZT4QE~jq{bkVAR!q=r>m@Y#V_LJ`?^eGfY>-Z!qrTq2 z%QGrWKN=2A!~4{nsHOx3-vHyu{8CstDfCk~nf583z}UJ$vtc45_@T964(GMQ>5Q1S zx4QGH${ot(h;Tzn3f8j=yf}o>Z_lw`mlv>{svW|LXOVU`A&~6h2{wfECk-6Hga3)6rvaiyM!%XgHWk0 zV_aoxwN-t4`Ah$6$X?RmsufO(NGz?wGFFdZwwsl22Y&AV;(ONqYnMJf;We>uX;Tj< zZgg=sAobiK@Y4jkA_jKHsd=nHg!xyZ)%DP|xm7^c|6JW*y!{3iy4ybZ_C8wm4F(F2 zKEy6TNd%6}DSA?u#ofoe;M(&$P_H5UJd4}zAFiS$5q?H^Z0Fee-8?CmQ@VZ>N+k~A z6EERObeLmJf8fNPsw$bqb+0a{&+>Thnri8fQD)MYOqjf=CzfY~n2R~wG(r8K00KsM z&S`|^a%c2zeiGw**zwHMuf&Ipu+bhAIl8q&uymVK)e`>R7d{ z^=2A5vqNNryH&xzPLD*4j`wAtrSi&!?&6*k(~!ma}5m~Yn$y3yzGSGdt?*} zx?8N$oTAROm$hU+^c8s(SKhQX>^R!is?JVWx+cB5<3^pif{}P9AJVVP1~tFfsvL%6 z%Casqk*Hbuv;1pKz@{m8U~dpQb^=2aswyGV)hS4 zR!XKSER0m8olKqf4v2cBog-^5MZ_=U5{@fmlqsK}c|CQ(9PBQd1Aid8W@|F!OTu7X z?!#!-`Yg4-sIN9T24>9_5j8jQ)5bwgaX*Pi3?){%4L5d}bQO*i-LGlb#D11faI*o3 zv%q9FdKqeU`MG!QIUTe8OvE7{unCgz2=QS%H|bubh&}6Ii+b0dmb|E>$5IF32snTY z!9^LtiV5h~B;&OAR`tA8$h>!O1gPt{h};+iPr{PqWEtGZwky1s^3nr@SMnp!WN^;7Mk{VA*$&v*6P*DHf{ z!|qJfc?eUD_ryU6$qu*ZQEN^O{kkARf6FCXF#p7Je2R{N3V>PC(EuN_%y@awALv)W z$UOUOho+GuJ1kJ_2IQC=?PUZHf>-)>RjE&W?(btt0WUofxv*FQ9vYx~-EW|sot&(2 zXK?{@5mGANx>xJF90t&@AIdYjB~@v|@MEWwXCF(* z`Z}{7tF>TZ@pRaIb0E@P@|}Gep9r55Y>t z`gm-lB3HlgTZI7YSF!X2rc{2yM8T44&sUpw+M>O;Ep21>jSk`1<^K5T@LRe8=FLEq zlkfL=n3@^17}k$+Jr)nl%Y}yMs9;^1{usluqDNIZRl{%41cfxDbZ*QHmmjI>@J^kz#nD@3GZ2&e0^K zUj?ArZg{!F6!Zf?$BNs~5D$k5BOjpGo?p;FbEqn6^9UEH9u}25y-3b+L5_bc7NiiP z#HP`AE&061FNL-*c0wNUJL)l->e?ZU&XR;fs2}RGr_#&9bJ>n3GE6O6Z+L=Yz@oQd zUD$n=z^7G1r_zoCPOOT#dS3$&zTFw5keC0}%9q%LngQ7G`9Qa=!-X7U2+XTLkj>Zc zEQ9YKwcDR5(~Ek#t%T5c1xORPw`)CN?*PW5!uZq{=LmdCE`!*MAJ^NvgQl0~+6Sew zjG(Ss=}+86Tr%rkdTdy@n&iE)puqU1k@s$C=An_P4sIpikh7RcVPN{~&A5#Ud*f!h zEO52m=-z-`1KeFJ2)B#7v~GlMvqeKC2RJKl<}4mrWJJV|P`T z$UMWS>nH#)({C-De>a??W$chz`!l+Rg=dK8{JE3WTUh&!J*;Hj#xjdA(1~sL>)c8L zm^bgsm(KA}ptYDn5)Vg-1R^yyF?__UDd?Bc$Ihxt6z`@ZvyQ3B%)%jlJMh95^g6U} z>o)UHkLQH+!cB^ehS1!WRrmLV3PLIYnmIoTy1S6hRwjqOjR?U&6jIqpWs2G$1{;dH zGA~_7~l9&nf)FgCu0EOa$YyTj;Gkld70RN zVEb}baoSrOW*cn=&doRuIXAYwqEroF{X_NG)=f^mqyL_Aa04%QN* z#t@~<#yYI@7@Xs*KR7nbVpEO|AVK}-lZZgQBEOfAryvB za0d545W|aUeNNpO+7R+2eF`utE6tVrnu`Vhkj^WOD?z8~N(2TJjOEUr;+mzK&xo7U zI4v$SRSq0#;MoqGG3KB^JBG>r6m@_um3==I9OLS1jd{Tx{Ie8r?p#J>Ve0OnJ@Cb2 zB&=Yh9(3nV5|z}mR6;@;Gx-w-pYicgK;|6UmzKKEB_P395~1SZSI$b8)v)p)O_nUG z_Mb5CWj3aGWDCZnFTgaH|2<>cNpZ~6u^WGPFhLf-nK?QF%=f*o?^^P9g-WoWPN~ci zrk+?IT#7cjiCuDwn&2C_cU?8!>IG+TielY&u@VFL+o5xMeu4ZT=Z;X9vVHOhk010t z*W%ZJ0w9zufKQ>gEcVs^10^@uFLm^b6n$1qU66XiQWmf;MM z#<@6L{6w0zqtb0h7;J~Fw6!sKFg*d#Klc~PGi;^cHy=9-cG{WcRP??@fpPV4s)^gZ zET27aj>#g|63yNU1x_avX#0PCV=rA7bqL^N>f&V3+xtz(BN*B`1IM0()5EJt*W5xce~o2&Qz8G4;R-CO>Rs z4R78LCg0`CBK&5ykI@(P%P&cBZWCK`c%As!9q*+aKc^%bc5@Fct84Ot%~OERyu!)>86 zLo?OM{wjL*i?GEBjTJ#-PzU1Z0AaS!%4MXw+%aCfh3Cl^^s;T66O8Hf;;gi*T$>Gz z?a?JObnIZ>4;ANC>%gB3_uXdha&{ushAHqZ!Zs-*zWMK--WqpCS4QBFjGw2tM(Fni zm6QSqkB;ZgJdw`#t!h8~X%u>zH|S6Jz=)%{-J=apMT(tux6Oi*xv?b~JNa6Ilmh}g zEG}0$;YPnZTOHI+9>+W)ZUj27<-nejb7(tDNipZ<&k)vU#}>e*iUs0;89_q3c)GiR z*Ry^(#u0 zgpgdN)q!CW>h8#%)coF-O+hhXOJw0_4)HYDx`w^W7w6ld<4GnYMo`*`EY0M|HIZj? z7k9dyG<1%wwt)cuKLEgGRimQjP|kq_0$XUoV+z!g^}mhZgV;L%Ub@63&p=VY^bU{{ zZVxffJ%S9X$j)!MGQxi5&xPiin#OI_2+wyo(mjWcXZv;Ch0sMo&Fe1EuPZ1*Zk#rC z4P=lMG%XD;LA&zWlTf?RU-de2hR>bAEzerp-V*fHJKwpR3D_@s}~YYBYp3G8~!E0BqvBi;f`6Qid^Loq&ttIUV2YO z)u{!vIFOIxk`jlVU$sKC{S!Ik7+Lf_mZFn_oi&)Ra|=)@)ysCiT3^RoXjRTY)dZtw zs=E@_uu5@0ZB}|f$8?SgazH@0azN5B^Vx>RSM@d<5DJbFt*FJaiAw7+Wt@&U9~`ql zz-z*jF1r5D))HfyTKB{h)MzcPk%l?7w0g=xx~Tc++SFDlrIl*K@%vBJ(}>f*BxIB8 zbQ>s4ZM#1c7N!h>{~Z|x=BzW7iiQ5tM#jhuI-KNSoBQ`iJ>a+){`$MQi{2{^elIT2 zh%5mUE6P8SA{K&Dt5Chv!zfVCrwO{bJs+2uCg?$o$yVXh1+)5i{s%Fd{W6T zT>PuG7BVuUc+d?|m9d$zHhT=8h52=mb z5GQtXhM@u|fRJ`^QE=D1yb%72-nNl%@}|2O{HwYe7%Cs^Rd8XEpNBMHcZsj0ES@Co zR#Vl8tikxFLAl@x(g-;k&l=dWuXcAZ6zxutO{_75S!I!1rrpN6o}D^yZCk+kSQ=^> zeaVbI>trEkM(U%h&bjO&$R?(L#0P*+g6B;adO5dFTi@bUsQ&}W4jOO)$0uV^7T!!Yp9WFCid|Y^A|vd=YJvz4uV4d5_X!6pJBN95PD0cPypwb5#AY z;va05wTC!73|O@~S7-Vtl;UxxuA~DTz^FM-)*-Mh1#!KkP2UFv;bCH#BOz_VfF&CX zsKD$-1*pq`=HLL@wOx6?MQ(6Svy6DW)RrJY5X5C*xaQSa!zb~rnwRG_FHv0yt8QT* z_woqvY-huz0>NRqyPl*9uaouI@rgH*V7lD59q2OeKGB?9d({Spll#~ z;-n?C@pdC_E%Jk+V>ex!I{0YH;zNZ1kRcgJh2xmxQ57;;*W~8XI~>Q~|H=dc?xcv` zZWRAk`e;re>V6go;YCu6m*lO(Es20LT?QynO*5SrC1Pm%{$G?DTanM`@RZwQ$`!|l z+%gj#aV=8>ZH;-Sko4y-F0KY#LG9ilrLd7h`}Eq#zunyx^)N=^a%Pm+3Y}ojr`v9E zrS`NDY!Zgp#!`aAeAQx(U1adE=ZKI|-ZMC9@LHN8VLW>dQ>g)+T$B8p z00aqS6ejOV-`_j)!}r{S8fS6c)-GdhJ;*MQ%c^elSe42d@a+5md>ym&M3N_jq6jIP z3LY)fhj2Z$gm%yaV0AJEx!iI+E8nW@$FM*By1?z#`=GI$NAudh+?-C5vT21G95z?5LwoX!CnCdqaM4Cg!9&rm+%Q5Q{W)bUkNDe`WsuPfs zB9R&K>#;*)*q;L~SJ){EphDMQT~+`r(FUJ!leA zZZ{D9@KVw(OFBlyF+{-vm>;h36*<^yHD!lGzJ^cQatBpU(pmVX)DEXAOkUjtU!eh8 z2upj)Y8lo^{8y?a&aI=vJ(VSf>xA4=elwiE86&-Z9tpHO+8cHX3tx-fYH6*faXR%E zT-WWe{gKgh)>0FTx*3bB%5tyGTN(3&3#BCvRZE_CmdYUCz5Qo2IBWCrBVZiq^9DT~ z*=d*7h+Y6%cg(YIWK~fk|#Z5#uPK1BiM*^QlgRHK33Yf#oNcBMBO|@*G6Vs()~K^bR(+eNJzdpS7v4e*8clqcPrxU+BqY9a9=>86BR2_{>l$ok7De7jLt&H zl_6|;&jfba^6M2_>X?JtAWnPmo@=N95pu%M=Sw~EBGlKt{jctqeuw-U=_Z=sP{V_GWhS;o zsJq}5}Q!#>2mYv^L~@G`@dYxEB1gyKG;zxXfvD= z!vJT&eE6KW{`RkKE{UqlW9OSlNEm|bH1uDR{r<@HBiR4Wz6eRoPNn2%94*b_GjZNd zH!r)fcB>bA0da?4995YL3nbnzgcSR;hT4A^s6vx>7<2rx{8#RQ%uTQL{xla-=DE-i ze*^Z5a2%0adBir}t0cdwo*dWGmCrrEcc$k_t(wCZO>}dv-HT86H?f}!gXJC#!r7<- zA={A&r5{6-CKu$Y&U$CIfW`!1`(d|~DaKD6KcgmgMNMm)3^ZIUvqOCpmbhXob+CT* zDsYU~q;wI`uV1%G>!@4{j-OESxSf1>snV9LhtCGeS>!biAGCRu*xnKKS^*`MTu?3M z1HbHdclIYsA2jMc&ywYFCzShL-BnBol1cMLYt|(Vu1++kQ&;V5Lcp`zE*0ALwYB9d zp06%L*mn!oW3|?oyg)o|wb4jTc`FJVtE!YC(K<&JM?Yb@;hPTA!fZ*LkJ%fg+qvVG zE>O43pUevn=N*c}of(WRRpMJ*uS=RF0G^~aD5!S>O7v_2HXLoueRwARlZ|g<=OsWq z@^Qn?`Ue+7wTs;`x6|>XN5t7~6R#PbgL73^;Al(x1VJPqtDUJ>jT9{QzIT4d1^ZSo|Dqy(~9^F{;XSH6@6 zYpvhevH!sCU0{)^6r{9~-q=sumR=?fLaVt;hMtqu1l)^=yMIUKCoL-ka+{KouOo*c z(Q5L`wv`#HzOCHS1@U9mFk76bZueZb!BrxhoY4H!Tfu}hN0WGwNBC$z>juF+@WC6# zsI>4lcj;|_?@W1_lcRc2zQ7qR8)iP3lo7{A?#pFqdpGvZl@YRQvIS}ylG=Doh9n{!{HBjBTAGjIsI1G^0NBsEr_UcN@|~q!zhP+Qj9KSznLfwow|I&Tb^Au zK}>|Y_qf=6evpB7ezOq)Y>}Nt*9EM-5SNPD*lV2l=uR3>bS!(8Fl6}KA(ClhmdErn zZXBh8>e5wmSD!T(XZg+fgu7~@53hB#Gy!PuceH2;6VwyxEcO+5F<8adatfn)I_Yv` z!(IJ+&%e}#^C%J7Q>qjXQoPiNY5mu+yf+B-|CK^GY6&=b@DOEDYiUMRo53UH>O@y$ zlnah`!!dODlH4K{5_^GUU^(cNwj%4#t;a^_=zKBo3&|5PMidL^6?IUlN(R2x`i$OpqbW&zkYGeuu zv1L8kEyEB5EPGP2jFc2v-s!a$D8nU*F+6$|eFscTvfF@o9uy-PkVo2UTm&NgihwIX zNjWMa&bl+j?xNMoEKW#GO{l48gQ}E&Y&W7>4Cek&dYzEUrc7p083O%E zk;XR|XXgnG7i2Q=J)YEJ4qFJ1^Awplvai0rqHrL)lP{B49FTfi334bB4r-)V)AjgS z9fgC9HN>NewTZ^$;$)3pI}gx!zHO$>}tJsDHLh|1qE#$`qj4_de#EGNPsy zT5X{u)wXA#3P=Rl;v-y>vuqO#-oLr!3hkeQy@`^%zqLkzuuY&04AD6TLnpBL29Y7g zjKoWMKI`hto8#K`E(T)uNa9A@Bec1fSTfxvbOKT^s^!v!M!QF99otlw74`@=c`B$-+)O&=) zn@@eB-q3AvkU+Pn_EUkzGGWy!c}5UELfTM#j_@&>N#EAg?d)RvRySWY&fj-e7CL9* zgp%qpy$d2~PtOtEgMc+B`&txZLOp(t^FTEJ4W5Ce&V8(B>t5+7_@`6S4x-#(j3k7= z?{U)y4*)cpl}C_O)k+GL|~C{>(abG#Up53n)M7n?>{x`4ttCbqW>PL}24 zjc^0DYj70|U@L*@8ghwSxcr57Z!yS~2jtsL^3;44rXo^QREc=ZyZ6gVe@U49N(&SqjMgN~5j- z8f)WZS55|bf=sMF}tqn6tq`=nC@z%`o<^f?A~#b3CH61io=)EKIY6+$*hy4N1F zb$mX}o^HZJ{LAgV;2=PLR19NpV$xXGa7VwvYgrr($Po=w4f!XKj~PT#vM9iKB%B;oY(aOD4SB(#oNaOKOCV^B7u8G zTcsTgyAP8wEca7vSD{o&S?HjJ%vR?wImWFLdUKzstQN&D)Qu9VS7Tnr#PmLS7+M8m zH_XvseCvM8h9ptvSA5;79xCwcbb)l1$Rm;rEMS%*WozH&20q|`+Xcp5-8ia^#4LQe znb~WzIK^+$iqSknI$D=n2nn|}f+B>@!a1nQZKd@E~VXvo(1t1h*suLqcWD|nV<08r$yjCIK zgdq#qUpv$S;OR*Q9I#b;MY6;7P;;qk0{!6JIc5Hw24xf1vFDnr#U6JG-xea(*q!y9 ziHwb(FW{B^>QiO0D@xBB@yUAA{>?dRz6)u$3vjobHQ9_^-XzVVnnCenR>}p+FU&mS z1}AF>BkaA06b@)>2O-z1x`t5#F4;3K((0Z&r{x<(u|7F1&EK$VCCI-6P;#@t-q=~} zo6>&CmEeRp-{I0{NF_XEx!vMeIMeJ@kv* z^VQT}k|?3>_~THI0(zWc#Q47u{&f z2NOz-7W8+t{&#-NYdgzS*zVBmIIxww;NTNF_{cX)++k7td*m?N_m1&Ys@?Q>Zq(?v zA^(8x2iR74YS#@lmHx+uYH>=l0aV2>5a7RIrTNRKtF$nKl-!T<6v1KjvUp^=Urr*H z>VbXZ3<$|5CbzS9_J43Q$V|Rvd7MB9quyFf`$=Bj(HOGK1-z`Q!dn9Os8vlnNKiO& zq%8V?E<6#$FBwq|pkgFFet$ik!Vf+WsV(A%{N3}hf69xBF;-HJK!(u>0o-kuNE%uV zUzUf8RA1<+7|pP#O5gEz*f`XNC+QbV0z^C}_laI<+=~&ucwz zM^wiWM=3+8$(L)FFqx`!M^k~7>btfNrKhx-A1fh{u` z^Q6eeFdIvL@rP8NZ3h%ptX$C6*4aiW43#8RJv;AX51P#0$w5oI24d5ncQ_SRs8l18 zEg?!8$cBWHN~9geKd_wRi$34ecakbE9vNHXJ zkG(jWv<(EE!l%1dNmi8r$%W{|uVgwCOw_NZJ9GChTfgxcFmDJt20!62GI!0|6#> zVbb5-U#y=lVhk3^KY2lJKh4Oh#0Q_Ma~-Uqn5Q>%Kuw-WsB5XQoJ5TV&!NSjSK*?OFmXAr8#4iPn< zQ@GmKje6K=CecH*_dWT}Gj`dDR6bJYScN2c!ehE%f_B&Hi0u+XsxviHh<_z-9`^=c zFxHAXDbe^TW8Vkn105?+mYQJ%=D0dl^hNVuXap$7g5HS-NBC!$6cxHwv~7s&UZ@14 zV!GHR%|{XTf2rccZKq*7@gBuBC`~%&0EA-tulaj567LjYJx!l8Z5keg$zi|7l?!;nzVB70N@*Y;$YsZ=lG0Wc@-#x*f)BuP& zsLBxrnvCGtsd|cSoSLR(KuW%yt(lNE6net3U=r z!T}bb(okgG3nMg6hN46yJiggj!t`=wTd+eQ1zJR>>JwC%1JJRGaY??fw~Na={7(h& z7FcL2$x1Q={b*eeCI<_{D2F!{Uh(-){jI4%QJ!n|Nw9U7AoXEkZwdxv9ii(&Wh(>ipru?QNz z*B(Qv>nQW^1Z|*UZ5leg7CMG5@F#1L@Ni{2C{)XkERvH^YA+hf zX784|e>}cKZMBO$gZ!IxQO{7Sgb{%CUnd)`_C5as1`VsdZa=%O_vzCpSDN5f9XEa zH{po<`4J5lB(%>uuTF5f^K5JyUBft^{W5vdmac{Yi{CJ ztT_#U;eXw#rTl@h`vllV~CAz-Smj|onZ3TLSX#EmQ8Bjq`MXv05R2V19`~g7dst-YKOM%Vkp<4;{!m4zz8;00GYo1U7%bU>wc*)1h!diHZ0IUm;?klIHyM-hh)(6QI=3$c9+|u53R_|O>PXZ2C+T)LrdkS6xnERdy$%C> zlMmi2i5#_XePKt&A#7pQ=7!r0&zefErW=7LlGb;MZv+`YV=>U`Q0~0K$9S&Pe=Tc0 zqGDx%e`%nr+(lsD?!js;LWh7Zm)AhcV$iy~4nLzn$b9j3>kB)aiOItW9d8+L02`jZnd}= z>zA>h+2#j_^o`e?P+$dCC%-}`F>w*wo7rxzWtmRxU2>y{_z|1+2pc}uYG$XiSnDFF z9d&)xNG)v_lm?r5w>M`&;|c<`FF}1{Dj)Lk29viJxy zAZ5lYyzm1{e#>KD;#JjaARNJ{Twl>qB*SL9t);*emIN+Q_^5Ey>X}L5v1dhJ40>zJ z3yn_7cl8^zv`S}RY34uLkj_%G>@obmhti23>KLQEYV;+SbeBjEdQ8!RpSBujX}QJF zt{(r5CRpd|pEe_tsX$o5p0wFp6GR6J5@J0$bKA`I02p1I!2cPVDgK(1s1!o!Ku+io zAy6*Yzz>hEJGS8?ire`X$4#>=IQ_6EB;Rx(`XgOw`(TtMR%5!txrHm2VS4`urH7$Y;y(JOCuJOyHkIcHAdF zvPN>8tJt>KH#moI$D$Q(c$8l|o)4~S=N<#1T89kxP7|yzOA|td-zg@v{2;_h9qo5& z%D+FXWD_zD;E9ecGt-u6BnDhl{X?VNj&rly>JqUDfxqg#1%%Ie983$}HVs{)L-(k# zcvhbnlUe{bZ7(M>dLfVqGTlU$7a^gVU$V6RG-@mXknpES8Om^&-@y%RfbBWY7dfE_ z{Py;-@F4omUe%7YW<5y5RnWIwb_tX3RMh{T^EPO?*9GbR`USowEq6j#h ztQRqqkF(Za)#k7OhupVI}`?^crJ

%FiLcG$%BxdD$vn-JO( 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­IP5?TP-BQd=dzBtc6i>~y=P4>|{6v4;<+euy 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�Dz_gJ^#=10nJg1tv(jSefQ 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%0DJWv*7LtT< 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

i7Eyc67M&|QbM1K3bB7yq6~^=+ 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 M=C({HaWD~}4iZ}=`Tzg` literal 0 HcmV?d00001 diff --git a/MikroMaster/20260917/20260917200002-Config.rsc b/MikroMaster/20260917/20260917200002-Config.rsc new file mode 100644 index 0000000..e65d9e8 --- /dev/null +++ b/MikroMaster/20260917/20260917200002-Config.rsc @@ -0,0 +1,4346 @@ +# 2026-09-17 20:00:04 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 +set [ find default-name=wlan1 ] mode=ap-bridge ssid=vados wireless-protocol=\ + 802.11 +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), 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 listen-port=60585 mtu=1280 name=WARP +add 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 bgp template +set default disabled=yes +/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/18038/819287c3\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:04 17.09.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 endpoint-address=172.19.14.102 \ + endpoint-port=51820 interface=wg-awg3vds name=peer1 persistent-keepalive=\ + 14s public-key="MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +add allowed-address=0.0.0.0/0,::/0 client-allowed-address=::/0 \ + endpoint-address=engage.cloudflareclient.com endpoint-port=2408 \ + interface=WARP name=CloudFlare public-key=\ + "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" +/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 +add address=172.16.0.2/24 interface=WARP network=172.16.0.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 +/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=no distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN 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 +/routing bgp template +add as=64999 disabled=no hold-time=4m input.filter="" name=warp \ + output.network="" routing-table=*C8 +/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/20260917/20260917200002-Diff-Config.rsc b/MikroMaster/history/20260917/20260917200002-Diff-Config.rsc new file mode 100644 index 0000000..629aa52 --- /dev/null +++ b/MikroMaster/history/20260917/20260917200002-Diff-Config.rsc @@ -0,0 +1,4 @@ +4294,4296d4293 +< /routing bgp template +< add as=64999 disabled=no hold-time=4m input.filter="" name=warp \ +< output.network="" routing-table=*C8 -- 2.52.0