From 0100c3aa14b727f43d7a964d01cf73129d673954 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 6 Oct 2026 10:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Oct 06 10:20:07. --- .../20261006/20261006102001-Binary.backup | Bin 0 -> 243756 bytes .../20261006/20261006102001-Config.rsc | 4340 +++++++++++++++++ .../20261006/20261006102001-Diff-Config.rsc | 8 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20261006/20261006102001-Binary.backup create mode 100644 MikroMaster/20261006/20261006102001-Config.rsc create mode 100644 MikroMaster/history/20261006/20261006102001-Diff-Config.rsc diff --git a/MikroMaster/20261006/20261006102001-Binary.backup b/MikroMaster/20261006/20261006102001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0f807de48393207c753c36df98f5c86e165c57c5 GIT binary patch literal 243756 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�YJ5)?=h-H4r9C8CQFrq8w`ES3 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 z�-)z#uCF0^7!S3svtv2+$l7u1Xa3sXo~L9s6A5yX^V3JNgsyR%93TnX5YjJq**# z04g#L3gYVVoyc`m0vw1-##mmP4-FUg1*X}!t3jT#7S#SdBb1>r{w}YpdCnj#EBNnI zOWu%zrTOoSyTkX;gU?dNA&-$TeSb3$@{$lP@{)$LqdZOm;w@~2O<6*uD6sA)iK*Th zkzuojZ$;PlcnIi9(o4?jaTWE{9S4=P>)pwf*j=?HHX)VL2;SXG5k*bdZ}JbI_eOH& zMM5V1QNI32zvudPtDII~-OV7$)OnbP-+*FVpTf@ns|cVPn$aS1cR(bf%%$6Od}>*5 zE+-J0)FM|^{W04uEU{TJU?8RZR3s4qkQF~gHRq!j=yZ7h2~%l?A$MRAjj&)vMwtFc z0CNRAem}bV)1D{;95w3cD=KA+<(N1Xn;Z=1f z+1%J?#D}S;D~a%Gb=(4JVJ;H20Dg-|gSjgRvp%9Eak3y$!NsS1c90U(1AmFC1y*M` zmJ{8Usum}~=2cHp`{MMiRkrgO>4T7;zbb!kX`(bzMCO3fEXnom7ADK2&d6169QBzn zk0DnIaNUAd&*_;`zR>BwSB()*Tkat_E52(){I7a6hAV&A*d$U5!!0*6M0ZqZvE6A zhTI=3S&;FQQm;-GU=HF%E^)0x_}>{ztSR+F$g>WqZ-u{sJz}d}OYfW&D)qD)tIXnf zP@?yU2eeKQ9C~sCc!gy)j#$}Dq<*~$$T0z=)lIR{COGK}#SC`g4oy{@Y*Z#>80&h{HK$mLErd~9qG6aorQU_= zJNr?DDP%=ZOz1%Kg9hBm56H2RlxiVF1}p&`-Baq*X;IL&j3f1ANkZtab!GVY&=>|- z4joqZR-(>kyqN^0S8M1@hRSX{tIYtG|6vx$`Xx%tfpX+@kD8y1dy+0N9KrOIe||#Y zGI6d7$AC1&8XMxk7UjY`{%C`~QgR{cj>>1rE@AF!+@MVmkCK&U%E; z%pl))EZ{fVY3FG%h@PfgGG0M_%=qs&rpQV6MPS{Xg{^q?x3wR|uB0i(DU~O{N`(mU zITAOSt44NHamt%0_{5q>WkP4PvOr`YHk33X@}pBY&U}P$Bv|?W7shamZ^bti`Y-tL zF}UZ9ZT`OYer(=p^P5aL%Pb<>cFy~SHA5&BrUk_uGCK9eB~eU&nK1PXl=1VX)FCMK z3y3zvW<|KYzEV*Y=2yda4YqqJ%vx?r+^f^UJB_sICRX>B{d$~rV zb89!6KnZpkuh1^DTXtyl>3siD^oOof7?5#6s3gc=cFC==V!XAZ4i*XtHb8+-zHK`S z?il1W9PVd{3@4(k?pf}}6OTjpcQE5n@UnGGS;nWmY}yRLvSn#=qcIDWqr22G9DS=s z-=~k;=RyHK?$Qo+CWXPlY!YWYCDxQ{w%d~}rjzNbc!WJb;sOUM&)B<0(@&JAsNO1E zi|=;&QBY006bSQ=e@3JwXQ*YbTF>?sa}g@Z98_o=KwDY+?NPpn6xpfo?F1`qj6#LbHcY6v?ibQ3og*t+XBbm>(uSTA?LRHH|n8_M%>lI>CXyK_mf%XoqxKd#%X z;k4on;>;qrGg}CIAZE)Kjw5FWmT?8v6^-D;2iUxZ!>EgK)3u^_)$cGFb{iDcVdBLt zXo$%p#HGk-fv^1*C^-<42+ut{eNqg4H;@L|Gm?k0Q_^}?c|r8?vpRtXi#p*dua`1t zZmY&j->mLf!sK8O*#1XuehhADsm@SkDU+^K8QW=7AK5JW*31#X&^V|AvBGmXdkI3O zvh*{e2q3lg+>{Ke7*DI)8U7DIbKP;-X@hkJP$(_2=iP7myZRS$WR~ z^F3XFz}G=9Z*11)xci*=kLR>3yr}5luV#mFmha>AynS7z^@kSRf~W|02HmWbMzU8t zxJ0A8)6T(xA7^93)ErW~5Y669QFTvXr92f&`@TaclT6SV1F(dgWF7aUN;OYv#cH?< zLMmr@$=^gO--zrv6#&8lu7^Wwz5>m_t#Be<#l@r`W<#K%m&TZ0HoVics{X=nB`&8t zB&ZKRt~r$jm9> z1*FD90cP>Yy!0cUF^_4Fb#suKouW=CZLXHhISTVGvIf=}km`Nd7qsl=jt%8nyco#f#*%L6@~XB_xuX6k+9FQw1%K9>35{RC)Xu>KKjCY>D?L(C zW*=`Y6NG~qyH)1e15h_>99J+EK>lX>9UhiLA?feLI0T4m$#1S3BCCB_r4fWd=l&?P zciX%&2}zRLTyAX6DN9-VKEtBujuN%Fr~E1eZ#wb~l^OeIkGT%YK#Kh4K(CV!91(&S zY=;T7I8jQ2>qpB_-3B5Zy()nHxGIc)!W{k#fX-32C;)Gq49XTp4K?#=r!X>E|1*%c z)oL;3t47tgRf<8g>qD`V<-P~ESi2NU{}8tGrJZQw^{USps^gR^>J9I=j?@ztMvtM2 z7N#nH=20P% z3PWObS`kS7in>d2nXRkz3X69O)US5RvaBvfpT(Vr1rq zozBM%BC<;yrv~{UcClSb9g#hx133T~s@w@$bJ%do}cd&jkU$LOD=zCP{}Ld2xhAl4v4x zp}a8(oN+2fj5&-ei)1&zC>pGF_6HHm=lu0!=U_uM^?dx(WdnQgl}Ng{YxhL5}MP6J779}zxqIT+TV205pb z{dP(I@^qalO_p+lm2UCdZW=t6KwZ1|v>9kd@C(1h>qP{IIr;|44TW69MlB7+n2T>U zNSvFi3m{1a#0eu`{}TVK>b-Nu`b9C+F%u65Frfwp4diX7A#p_Et})SY^Pw>tbb%!r z)G*MAG^d8#gZJSiZz93}pMd6A#rh_6($PaK0tP!qXKgSpAdOKlaK*bgyl;&!=*Q!A zoA)QOszQ;iMGopa*T;_tCIsI|@WO+>Aa628iAAI7 ziUGbvgYj`brMK@?)oR69X))|T1mrTr*)|i(>r3cTR=iV;4kJl5L}wz)M+8 zZeG7_@NjLw_Z(*KlZ&zCyh=I&h!o3OauM+-HoD;iRjj3t>(W}~a=rBr$BP77OA8$_*lrZN5lE@KWoVMDpT;T6umUZP@@ zp}sgunL7onm+YgIt-Gc(4yO)1A8NL7;wVEP)`kc-#+i9h_8vk3Mj5RXXFV7^u-{VZ z#`?}Gvvi_TQ^cF2Z|?33!!OC{z2z<>i-w4n;OEw~g9GIs-$u3{ z*snsga_3X0bT2g8|4yRFm;l#jm-V|C&m>%J__tS2$r-d9lFk$!*%Vd!yFMrl167Sg zhSu0)Y-XnLV0;>;h5kPdE^lYi@_b+cN};_uO_L=PGOX*acopy7bX55ipP_a%w&9;}(l{l)Lng0%xvN^wgu#;vI&k zp;|ycjX78aTeEuySeb;J%R=irD<|?-)OCZN?4DF}mn9A!K=#>5ij*mNb1L5u=pW0g z!9|u_iYvCOQEMKYsqQ-b|8V6xpn~b)Cw>C`A5HyY4FF9`t%?ERohG8D5-ElxlHY8$plBz9j%SI1M z3Z!6W6q#8@X4GtSFd(>(+B-4Ye!2asD0G-;9KQiVyc&o|R7=Zw6PKrzwh|L{t6ifV z5n?NR2F=3XY;o&`c3J^cV>S?7y2KSf@}2f`4*R({6qF^+R3!~3u6RF}^-cw4oWcc{ zPlNuPcaV;w?p>7dSgZgLlQs=tluKy*r>0ii@KI9={4avmHHJn1aVGFf<*oyyadnH^ z4e!y$u`~a29)MKU^5h7G8vSGuR=m5Gan{EL8|oOQgU;vVTo&FIzclj#W7R9tvJ4_~ z*JRkc381zIXE-IL3YFBB#*nZnSFd4Hjj~qL`7Ez0ankt;si&B3VQhnp+!-WaYusxBQYD%w z%aJ*SAA{)YG@Om-KSL4citM`ji3tGne zbs2wm?RU@aK=*E40A?Gn`+Ih&xP9u~zIbv#hWQ#VR@s#Z{&ypK)Hy;edT{qWNP!S1 z2GQ&b3+O!`=o`HF3aOqps>)8uX1`T8ZA6^;LOo*rX@r!Q8Lp^*YN7FW4;MN;r3$zG zgb{1vBsso!u3BZGUIKK(j5ZIvHcF`G1v)ogS9kpAx-4bfT)p39Vx?JQAMBySN- zZGS`|CW=eUjq1A9Xk1t2^1?0rNR%J!$5(5+B$<#CkK5xqp)b3J{1t(P0$(VgmYrT1 zR{u^bw^!T#35o<_>E+eHV0_{NeCVyty-&!s6~k2#TIdD5W?en~&qlgc5by^)c|~qX8qrREK@9;gLid-AVi!YXx8ksxt3I{~ zZ4cRN+X`VQPKN=7XS%`4bD&M)?UGhP!CLk*N)(Jx=08L*QUBw0mcW`E#mgQhBan1WrP)G3pZXR=y45usxX##irol)u+BY z>=l>`GSaC3lc_urBHnQ9$LtT2g<%btzaHEXiOokqli9ph7g@1tYh*p1ZvOGQrIs+1+apcWEuX^ZQ@MliN@{TD>pKZkuXZfc~o zir`Ng*q&-jx&_M#Z21e?#&Ts_8?cT7K3d)0H~-V%`#o}*gMkQV(s zyXwkuZbhdD){Kb=3&AMd!0~RXw3cX#sUEBiWy&o&=A?x|I(!VwEhD%2`ad-~UdGW_ zm^ct{Nh#5>yG5hLPu_F!`4Z3aEUDm+ll2x{y%4f}JB?Ue&wC1RL z5)tRuggHC4C|&&^#|+G48LYb8;^>VXv+nT)i}Kjp z#FFS*&9QuCZx}Q@tW`B`t;Uft{IFP7&GVVbE~{OaU^MBRZZ&S|ZHA5p0Yo4*8{J9y z-=-2h^P7PJ6M^;jtLxMT?)ZlRK8GIn96cB?@#1s$0Hp5@BGTTOhS>29HK3Z~?ljYC z4NRH}k&Vq^uBl)mkXN+k!Q*cPcsH3ld{HFGnK$;ky_s1D)7HES<&6BAFCTP)Zo{|{ zsZz>)48dT7mJO{zl{Z6q{TwhmNJiuESd?D^xwAxh^DS>fj@1G++H|XDLDqM(j|V6y z@I-PlAmaP9M~E=N32MG{x`sCU6OVeRUe%IBr2zOIQ7XI7GU7>X)T!w#6!kb>_C;owO!CvVQF(SM>`SO$2rP zEN`6AK~(VPQr3Hn1uGxB`)C*qB`OZgMK;l&{JV|N!OU|`HW=bt7%a^kpnn0X>H%Cf zJ#h}hvyR1a;nyVJt@73eoF&B`G!LX6$*jcP**&ZgUux+D^6Lg7$jIMcjXl#E)|-Nd z0CR!FeDo%6$R&<{(^zJ zM23WZ5=N>qrly+;{NZYz1syX+0lp6r9YOGwtkaWyWylImBk0_M{pwx*p4v_*B2ZgA zr}v9i$q+OdQ{4S}J^uKcbfaSl1FrU0~_Lhq6ByZ-Rh*Tgk! z$W4tCc$8cnrF2n{drykl-2&KoS-t@#AOOJrEG4ajtV7q8snl?I#@pumKtGt65aEyw zsP|Bf0AKg!Nm1ax<2}=wn~VfInp+~1uh_nyns3?(8q+>OO?CstjbAt`w^0|o>zg~& z(gU3aSj`dh`UOPZm`>2%enE&*Xm;?&*3u68ReU5 zKRXYvG;L&0+#(3|2ksQD7l~fIi2PEU{I$mieA}v|qH+LkB`KnXySYrO6906+pl3iw zCcUoyVRI!wILc{B%F=o12g&*AA%e21m_6iGE}bmmG6G(8y7Js(!s8YNR4YyjxYU&O zxt^$p8mzlBU<>(JO4qJfRoSBV*%nUPT_ zBC&tuFa6l4)C^nk-qUFAJ`HzkdW%Vo~TytoTGdZB;cd_1A%l zk$aOtgmSb4BN)jD`Wr`YCt{y*I=zihCxcnb1;gbL^H+`mXfuL3v)UJ|N6xfcK2K86(B{fVsL5FdOd z40LEc)Xiaik~60R<_JhZ=GHbXgxgXuK|DFJMIAL~_nag~;FI!{xt%FPutv2^UG$%X z>VZIi!z~{N-xL+~{6%uUEXrUOpEqjFZ#T;NLF}550Ye6juA?pX^c=(k7WHhv?%!(` zR78pp{MS=Qg3;}dzN=~|e8oG~oSLbhwI;t;3?|I~Lvy&-`z6^J`~dHY;US+i=^T3o z!M{}T*PqYQ5mvZC?N@W7?UeB3@hKNLemE&83fIEtO1joue%jIzbKoM*?pDoWOa+al z3OR1xfNvZ5OLVqgSoOBaC=R()3B$FGPInJkFum6bQ71I>+8O-{rs@qR7)Bjr|4xd^ z-_GjXr|X45N@0vpl+8#h_D!uYr>}>Q3qVk7DlM(jVjl&+ig`Zmwo-E%F7-(%IIh9J z4yuzKc-11s#crpuTJpsFM5M3+XF@uWBE51y999yX?=a`D_tHn8NyJG?6xH-ta}8N2 zmSj*oGhZzm7vf|cAxJBX@4=8H&n9^%RZ9-nQK4gEu7Cs(zNoCQ_xLAs0M~C$_8@8- zF*o`9=@%)pjekBs@KM(a4{|6tIoH0kae&P`EGWAT_0l`iTI_s%b+j?tv=sdtnd?en z%vLGQ9?Pdg>K%YVBg6EqM$96xEP3N#aa_*WUL`7I-JAuWGiaW)tu|dfrF2{d2+!Q0=J?fs}A_t3y)*4-lNZ?$ZUJp3gRj$%*g2*!rjrgY|^yt`nwl zAII6H2Rd$B5b+=(Olh577jww9I8uzR44-Y;|A@m0%j`^+80u$0L$fOM#=89NY2abb z8$swV63-3e?3$AXk4hwQl3il}a%fZ&O}>j(Z?ycXoXBAdOzo3sm^LsAYw9o}i+5!j zEe&bLPp?)Wq{P}JqrH+<1~vxN(R_zpWE5KsJsa?D54PT5;45fgaiJ>lrjR(L5M1a2 zQ7vu@Sl96E2c*o$LCYB3GxoM%l95GhuYf`=p>d$akCcTlf&L~n^$rtg!=T(0MGX}Qz6q2j z>+8S6T#s6S?dvreypC6?`XX~cE7H#U&bd)4UoL4^*tw8D z&4;EGrcAfS5GZ^HPUg~D^*<2|uAvk+^z7?6WV)hjTT4=;wd68m-wgo&KLEgholXDSlz-@E zT0BIY@Wzi;>wLw8nczrg@Qx%3j5I!*Zo18G>OPyWgAE6!phhsdZHmQ%( zZ69J|-RaNp@?a`Xw5}+Rr~1$}iPeo)5wUAWo+YP@bVY=`jaADXkU0hyXjicX?w5^t zV~KE{=^3xs#)~c@BBP(U>BJUFTj^JPf{Ufpit4ukt=+K^H?zLU0Hr(IPHixAnEi!% z7FX?+#7kF9oDD-sKfVB!KxsQH#A#>%C$#1}ZAmnc=;W=hP?^ctdc|UMNwFdWzn4!x z+f+?UpS0_)RWc^(YFa}T)*$>MVQ2)$w~qSn(YHITRQuUQq!zThi5j~f^tfO5FpP;m zXHr36oy9#@@bh&XR5=o zKD3z+QqxZA=sylCeX4J9lPRRl1)vq8e<9l*+a|m^xQv_zZ0>dxzN)2{v47(EL`9T1 zy0f-F^AWXs3*GT^X3bO)rI&jvmH#KKT2UjytnEqK5}O5Xk+5cgV-B3VYw+25_)J&q zWS=)QC<~{~UO?cXr#O-k$zR=dFgMo6N*m;Tu&CkHr?SH={+LPbeMW&G$7{dGF}w`Y zr5s{QI6tS%$s?4!GI;u@2Ysb0M9D_tBB&k-2Zmw*WkJCX29bRFcL0J~pF-`|0%!a9 zVlHmW%laFB_{iS76@AQ4R5$j5Z0lv3G%ux9R?sK>BaXxAIwGg z$7(7LFQ7FFu3>G^nLsQm62l<(GvJ1j^ji+;&U3wRjKw_t0TEHLMFVph8~`xXhYBx~ zWLr@U1XTW_++7j8tc|pn#cN25SsUW})EHquc6~gIDkQub+vkFqOAlVg|D&gNHC9kr zj4=N5{0LGL_1y(L!2KgwoNq+}xza)kOm_4$6x(J*$etACNkT!c^+MLSBzFtcJOd`1 zw9?4%aV$J0sY))Xs*{JXdyW+qg3y_t$tRj_vR9Y}0K!Rh2sKW0T!BHE8m&?;;433x zjJ+TohE%=6BF%e&(2A$&imfKId$ZGkgLSyudK%sYT!M>}UdDe#U}ddNnlH_hQ_vSE zoIV~rUXz&l3R;Cm=y=gg7b&Zm%QLNDn?W&9k|sJ5!r=8V%RQixx^^L-DmCw%_d~yV zWt5a9Q$N*E2d_(MGdLn6QBIidefid$LFRWKp#Vm0@2VglHTFkKUrq%n$zvyfhC1`Y z+iW{vQRxArMWQ3v03$$|Mih6Q#P|o7sV&7n!*eRZ?l{h#gXpNH?zxuJH0Q(vLp7rDEZ=pMt6!1TnN>)Oc2StN$w~jx-VjkeSW$D9w{4RC zjr1>+wMEi(n` z8{XyDk~Pl*>p!ge0bwwPu^Z7emiG;7iuNE&o@l1}0Z_Fso1^_t#`ZFf((?GBiGie_ zvIhn_u*o)@WGcKZ+AVE8I7Xl)s7ie*NgBrgP*_AqXS{qP-|3+23bZHN_LvaB$6g{_ z7R=6z2tvu+2lNn1@D0Yo6^X!aAxlu$>W2mC5UiUQ3FMcBX-TuMUc0k=|I_JI#Oxtk z5|)*`T3PmRzp77L2jNQ@Cx>l0qG|UB#GF_!z`k<2Vpl1-+_ZE8*^QlnI;@XMgQ*oI#RI z%ibfte)*sKeEM@tXD~uB9496x#Jipc))JAqsz2$(CCw#VFvc_mP9|vP5gGlNgD;`9 z88&~_M-O)!1}6@n3D-jn{f@s`Ml$lhV-ItMVJl?O48Yo={!1+XJQn8cT0ZeK+~O8N zd37c3qW%+TwxS%ELHEfOv7EVUPl3E1rri;0CXSnzr$N2GsD)$_WWmmwH&1KkYU4;A z7eu5Vv54SR`9(enI*mMR?_mx-%D2Ew-XN>juo|a6zx`#5e@DeT6xtwK zzp5k!@0mzVd!3y&g1WImP6!!h@wi_wSCUzVI%WOoiDFj$5K&@oi;_mo@& z9$K$<3Ua^}PpWTic`UvVfLd8K+{tT=EVU$*pt76^w9m|&8fDyH=ZLB`q=|E0Ryn?( zzaJvJs1f^+I*OhEi7^}KW6G~=q52WeP|bxf-I*7S4(A<*n%}HM zrh)YMw#mp|nn_}&U(Tfl!#EbdGQkG9|tVgf|_b@SSXQqypfF&3lE)c z3w*mjbp?Px(1>CF#jcmz9col2Uw_oLU6n}Q-Y;?&ekA?yZz^6jXkYTWy6yfY>r12Lc*@Xl%XgfWIYPN z{-a7Qelb3LdLb5jw&j6s88ue${AqjWR9Q4uJajV|;OnvGWD|FMMY$6)}{K^xitFnMm2e1%?WqRD~=nT8*F zs**MJ2oa#2M$%gBJ=6auY`A|ygg=qxL=!9+4>H;_B~_iPn7;;E)FG(3^8Dn|;5fBA z6}Afq#8QP|;@@*|pBUkOjbrZ9re6R}Wji%l(bMORVx1GC{(C{ET+pGlZM5sIR2!5Z zv8IZ`dr3xz8`UIqE#T6f!d;$cwRphsr>?uQtA6w&um1DluELB|9cbUu@k#Mfit>QTJ24^;e~q_gk1!*Kd@llt{snz8`(G$N?SILT&-?1= zhhEZ?ev=ViMCvDI7oz z)g6YW2urT>LZHRQoVSN@sBP^w^X%VrK;8!fx6-p4 z*`S}_%99Gr4_Q2FT=J?j)Iy-2EG?_6^1^m-{4G#^VpTwZL0@>hI~4n;s_Gn~*WSt# z7B2+(6%?g_!i6onQ9zA8oVYZjBk_!Y2*E(2UWi*Shs{FVk!6j8#Ot&8vQ2c`WM6-w zV;1)b@yX@=yN8YD+Q8UziLiNQcg#Z5rcZPzaS0U`4jTu{l;sm_+n?XdYY(4RuUblzN@`^ts|so%HD3z! zHA9e(n-?WY0fX4q5VU=~#lW@7)cBs48M_c-YIg-RK10EmDoMwYa>(XAqD(eQonK8T zzeULreOY=Bu(GbEspadd>=ZlY-mBHe5#4Y{@ijlLxH`!=6m5UY9W-A3wh2X2qYZG0 zHZdTAeYTD@ADL1lkI*}%pk&RvEluD5Vf9kplNmiA2B8aulMqU0|5MpgO=&iK5w!8Y z0Hs}x0uDISW3n+Mq|sEG)y6ft6FoOvh$#0j7N_<@2kB0y_ndr*xE$%<0D^oXr}sC9VF zH2v5OpV1E}ap5GSi)?*>rdM;f>AV|h_pnfb$BoxICKM< zH!R3_d?;ZE`xOb2sXK)7(?c-=Hxorc6R+&*W1v_=DaAb&BBu~OvX0}o|LqMvJZt|T z2GyHpxoS5vo1f2r-FS2!;UJ`jsC6u=H$(>x4K_k1)<&s<5pb+hHNuIBF+|-+LQcK2 ztJo@T6Of91<{m@8e%hy~GVLr)ZxVwMSa-f4eFSLfZLbp8pV5I8WBu$!-7ni%zcnEz zc=*3siU*rCExICya$2fA-P@Z6pC5v`9}YB3=`nul&|JQ9AGC!hZtW5Gv73!9CoUfQ zLzK8Y8KIE}xF9P^$5q^#+H@$sf>FP8C6grLwIdL|U~8}?7S=USQTEUM=;Up16Z^-7 zo7PdLZuq=$+$SN8Zj8k(O%^ZZR0*xRsFhuO{^*jjY7AZJ?AgO>uF~%sKI<{HZP~mR z*G}Q)q@{cKb&JJ#lwGL}CKVNm_h|XAF4LA>=Q@g``*%UmP^B&l>Cw9YJL2<^K_Li- zC>PO$XI?t)*V3EOt&+ZknjkSuf$SW@;mFWuTz6qVFsxAc{w_OSn zORi`Ke^xITgTCL)a2Dw%y2E>HP)CBhjagRM#g_%14qBw^bDfO}$v_Qh3njGKMIxSw z!iMHweu_PzR=3gaabGsR_g6pKID8Gmy%rm`xJ$L7xf7$U+HCf9wJXvSW1dsE+WW2g z_`PgwdTK?nSMA079A!v3bxY{%(~u-=9S^uJ_@dTo?;ThEK}E_$6|QwsUrHu2J))t1 zo|@JWiW}r1cIo|z@wIFNpDBBQDctq-B-=jzYHIAHZCgzM%A-{f#`juu;D|fvW$7Tlic@xTWC(SMj zQDD(JbqtAg-b0%~tx47d^3^6kIZ0|y#z(j2Sltuc8cO&4hyKj(@tTc_5`{JN%^TE6 z;68H89~^xx{hr-e9k`*eGc+v9u>^*@8RrL#OtbvNg7^hd*-U~yQD1&m#M?VN?~T!w zlRAQ+&fiM=c0EavW~;!`g>Jrp3FZRyS)QKi?g}Zq=U==rD0F%DSjRT89Sw@zUbAN# zGY-P@c?r5k-HRQ~-#Q0wW>5x1z-tpe6UiOVN?^O|XQI8r`4v7P0rQCIWf(R3Mxvrt zy+T1AW^Q~$)e9DFo0;}-s1w;(wL$P-D)DwCH$GtRa^CW#_^&}P<}-<=&PF^Qj<&fk zdxiUEyyZCfA|z|cU(S{)PqaE(elXbO_~gjBTN%*oLQd>k!3CPf@+@SD6h^+V&`AY7 zMsl!7OaFJH319u`<_MA77asGo%u!3cT7Ih*4~Hfg^U2FR1oDWekZcl-lSFD7bn_{6 z#i2pEYr4j^x)_o`5H9ZfuhEb`(Y-BFDrXS+rvb@BWzp zLhR|Ss+6Y&5%Vc{DJwgi!+q$7RLU}NO*bCZxyS+m9KFQ?W-n58o9g(%!L6N(`OFdW zda7vP#X8$TXM5g?jcu&xAwyRf36ZP?6f1tmmw`11DK4I7I-hM8I}r|FEHq1UwpPmC zwAcNor9j#QBsMvdm1sty`R1U4HJ!%vF{T{)f}!}RjW0iWR@?&JgFb+Uo2~}88gMR3 zGn?qfI9nBXA!hZ!EzQ6gLCS#H)Ay&>z#cI$RZ{N9o`Pl+O0?w#LyN~OI9-8o8+uCLz(RFRkbfz)X2E`hM)>8pObaDBZK z+)>Xn8FE}x)j#-Hx$C_AHeCPW2hxisAMVO(2+MR7mXJ|RP~XNFvKCKo1#A$PR^AvU zY}}Sn2`Q51FtO5sYE;2}?%bI{*Bo#^IiE52AVaguONcAQL61VI)^R>yka!^@rnaf0 zkJPH{-d!D!hO5a137VYp-Gvg)i2pO6&fEtOL)C|vvMbU9G zT%I@&y@H(0?GV)%vicRDbBR=FpM6Xz4Ow!faqdwXw9_c0&)LgeNy@|hf*(F3A0BM) zSvhD@K$DXTi{KIj)TFma_WqLQ(Wc5IuE)QOtzB|1nUiIaaQR&DAe9int#38tZVK{2 zdOP`m+Z-ETC`G}+LEGW^x%_@ON_yl+0QNH-hKjWeDc}oJ*&sX0(8o()VQmW8)vC=g- zNdYjR&{z)sJrH0paIKgugw63;I0z?=p%Pkka^RP2Wp|lRf{xLX_g17eM$$NS<-O#i za|8eC5%5a-b86!=pS_(f-`1 zJPw83&!FVVlG$nZ8f|$w<}P6*(ZkxPh|R? z{F%Q~rNplKK0aq%SGttHY@vdmK zw-n@w^M|R+sB9Y5 z4f+$bIO=ze_6>0VHbN>?=ot(Q5mEE$b}f%c=Nex114xwl5nHzCd$i3I3^z)G$6^o#n|!CMW^8T$$F9JD_;BigD8ft52x?BL{kl!#c7Fa7fZ36V>b z&TQhC_2SYbG!1Al>TG;8mbhOXtT`I{g513gKqPDOU}WndUq^RY1gxwvnGY&4;=5$? z{sALdXMRkALIeJzX~|aQN)1} zg!0~UP4x#WJeOKmRZ!!Z0pj9&I8_TcKix+^K#m1f0KF`z290t&BL8af#l>Z@5se5S ztn7K|s`Hlef-El}yAcA1-Aw@3MDe*$jGpyMKO|;8-FBZa#iYX8Eqpy{=ah1`|L`;# zUX{20tMoHSge|qy$#fpG=caikEy|lh6E5N9n;Qw-wqeWs0HD8BDwG`%{4oHeA; zSZs(d%8+%;T!=Fj4xgBZ^4-!g-5kJuE+isMoJp!1jH17t7{H;88+%ymzMot6n(Yyb zp`rXbv3aA1hiCg7G=lB_S;OcH0ouvsuZgEUL(`m4WanZ<$tf)h%x6d1h#zLQQzv1{5X2A&nN!AJ8(7DEx;7 zB`&cVqh43jYPk42U*Wg_NU|f%7@-^i<`w!C8_8W%#hHDCW)2P1H1c1UToqR!l}4D` zDOuSCEGXnCVNq#Bw>4cDl7AgE8P=|ND4$?cws>4bAnQnMtrhEdQWEVJj~E-8*==%* z{#eO*+P2-vVGy@P16^-yr)nU|Wzw~Rz^yY+Tgn1VeK7zqRC?c6JrySE-t9UCMk`uk zAo$}%TrGb*DE=?L4-40`g>{@7gk`&G|K))1#MXBXc^g8bhe&eWkOT``vBneNZ=A}5 zo+W@*az&Qm9|FVllGWA+)nB@~SSMnh(>D#))6{!BK)N|E1~z) zGf)km^kmy37E@B<=a^zK3=^{Yrugz~efcWrYONOu?UJ7cFc#v=cw>BY@XYRURE4qa*h7E@I2lxp zRSUu?Z5!O$r4-_pCuU|kTHaf)3?_S$#uFsUf8(XRVD8c5Bqfl1?SOC;36g7IyrO`_ z-MF<}O>dOru#VcVyrsgWs;F$3R@a^vsyJJQ1AHrMJj{SW23W|M6+lD%yx7LF(z-&N z_U>*S0q&9pqWKh-+|kTPHbKjUO1!B6rB>~gGQ>>eI@GaZzBaNqk52oLu|~${SviuY z*pkBiLx+)n1zG3T^Vw?^wqW-1-jBo9BuNE@XJhdNfmIeP*8YRSC(dcH!@>C&r8csw ztO=2Qz|;zw`~bv05yVV8<6v8zGsE?B8vu&f9EZf0NS^@%KY3RXU5U6E z-r*l+XX%v?OcR7+nxfi-O4`BIxsSOMFLz^AIrjua zk7RR;NO#=@JXl5=y_f#(3PIR24t>{I@YQIDT{kyYJZP?Wil;Y`C)~b=dKy1Nj&>ZX zO|NcaKYsmngz#F!TPa;B>#=g7(gq06)@9!N2Su>Cpz?BaE9@kHx=eVe)~a!TInO>g zs5b{#hp{lCH4UiRH?vLo!^UaxM*0ebh%#`GQU7{l4=x`Ad}6Z$>L6kbs5F>PilS-t z>L0S&q6<>(>lEEgr}w6ZXH+yfbow ze5gm87MzJ7>4GG_&mdpSW{;zsb}}+&M{u%xVywLfAbpk~{S{L0?dGsWFfSo{NF)cd zDXISHJAKyS=Z*uRaRfyiWfPPrR^9A#a+@b3p?<6DZm^7fJ@awt(q(A!xc7EOZSpa7 zw8Dv^Ju7hLMuhK4*$|&<}T0AFwOac5M!go%QB;;(_k4@9>6FOwlsu! z_V){zvi-l`U9Tbx{*|?icU;}U8Cu&|&?U|YbZTyTU5lXg+4ta{#wll^lgRs^M@Vj9 zBs1dC4n%T{pZk9rLb$tc?JMGkO0w37S9`xxnr)pyYWB&vb%UJ8C55a#Ld2Z!lbhrh zhbp~g@eBA`mA!scYD@z5sPZc`&ASAQlg9X7MQCLX$_38xxsnLW)-cgyi={gzKoP_P z^yRcPhLl8%9|vdn^Erp|?gDxSE{oiKZ!kJ&@(Z9JJj|>g+levd%I1dJDq(-zH(oAKUcA4pavpdhyD{3ph=z= zPEV<3j2`7nCt1-ixpS1z2$j^W^JLJn`as}XXj#C4Moxf~w@8B)xSPOo*6y4gOR@*U zzbX!oGKdm-J!Vb|9tvP#^^6o4n|zl8(F!%lWx4WqV>El>J!YQ|rYS2Tb98J=I}r?y z$t|xEd>Qb{aQ_B3^glbSny)h#D?vC)qvlahxi0*I0lgBfOQ~-|AhJSa5g~0P#D0;v zC!Il9gIXAC3S*njN=}clAX6^|O3~L+ps&LyfE$VXi}TLGj$;sI;{KE$T{qR%qq`D&UY9oS>V{&M-0Rp zDZ}hVEeNX#i2jzUspZl=Si R)~VF*Y5`H}@;``Diel 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

#|fgvC>C8 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 IBz-T0sng\"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/23604/f287921b\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 10:10:03 06.10.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +add bridge=Bridge-Lan interface=ether2 +add bridge=Bridge-Lan interface=ether3 +add bridge=Bridge-Lan interface=ether4 +add bridge=Bridge-Lan interface=ether5 +add bridge=Bridge-Lan interface=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-Lan network=10.30.30.0 +add address=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.33 name=prt.vados.ru type=A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=2ip.ru list=Test +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru comment=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" dst-port=80 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=80 +add action=dst-nat chain=dstnat comment="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip route +add disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +add check-gateway=ping disabled=no distance=1 dst-address=192.168.0.0/24 \ + gateway=10.30.30.85 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=time.google.com +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20261006/20261006102001-Diff-Config.rsc b/MikroMaster/history/20261006/20261006102001-Diff-Config.rsc new file mode 100644 index 0000000..5ee5ae7 --- /dev/null +++ b/MikroMaster/history/20261006/20261006102001-Diff-Config.rsc @@ -0,0 +1,8 @@ +607c607 +< \n:global CommitId \"main/23604/f287921b\";\r\ +--- +> \n:global CommitId \"main/23316/087b7d1e\";\r\ +610c610 +< r: root, in 10:10:03 06.10.2026.\";\r\ +--- +> r: root, in 10:10:05 05.10.2026.\";\r\ -- 2.52.0