From aaf8851cf443b2a691a63a460c818b1c27e998e3 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 12:40:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 12:40:07. --- .../20260501/20260501124002-Binary.backup | Bin 0 -> 369411 bytes .../20260501/20260501124002-Config.rsc | 5898 +++++++++++++++++ .../20260501/20260501124002-Diff-Config.rsc | 4 + 3 files changed, 5902 insertions(+) create mode 100644 MikroMaster/20260501/20260501124002-Binary.backup create mode 100644 MikroMaster/20260501/20260501124002-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501124002-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501124002-Binary.backup b/MikroMaster/20260501/20260501124002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..547488ad6173ab1dab2ee8049a58df6deed7c974 GIT binary patch literal 369411 zcmV+aKLEh*sF8C6qXht1WJ6Y0Z1FCV!0talEov120000C{QrJ1k_7-*;^}r@q5~~g zTwFCbttKByrP^o4F;(_@5IGRHGT#>c@R4(_jzvG&_tJd;XWmbk z2=E`Wr6ai3@f_JPq@xLj`~P-rZ#fvYM@O=Sc9pDyOZ7~%uce7{77>f35XKy;-g0@JVdoVKA+m@*C9r;F&YXdFybRy;uDr1J1D~{x)3KTS7q6jwyCvKS z4E9*W@)gn+Xs6?5N(K_$Xf4nl1oJ646FXZHj?VtGql#XMUgF0O#ld|)HArEZ*uXnM)yvFXp*@I7hF zsP2A9>~0jaH@M!vq+=@q^oz%cy+ZVUPr3q;y7J}y!fC1$#Se%}0YM}M-{~Zmmtc`Gm8N1hy7lRdi2R~hU%V5iM<;1Io@p<7uQK#kyws9 zLw~{B7ObEq+nyNLZU7Gyl%Gt%`~t{6ltma_=G0$qdI8wPDxI}P12`Snt)iFs-id4# zTUHXJ$~k+($;))5L;gZXN=B#voX7sd*YjeSDQj4mLFmlX*eK9|;-Xw+=48+ad$^s& zU`dEX({&Ou6kLV?>Xc;yZntE7w6$+cF3csi!#%)RB^jZ6mU;6gzmIVq7TzAgjbXST-BSM@4n6$%-cs}POQ3_nPtE8+dljr^&>XFWR(;Hz7Q5J!lgW!FOA zl%$3!xA&7Rl@lxT+K9B8G%w&pxYCJ7?NR@1_?m9vRTxrZl}AcG5V0f3ky6;Xl4r-1 zAB4v70g~r_$GQclDVXCcAq&Bc8HrBU)N4o^Y$|@Uw?}u69&lJUB6c5 zSEh81CYgiQmolwWFxHJ=hGVmJ2vkd}Co%SN^$SO3D7j2@&tf*b&ks(>b|MNtD8^iT zfT^A|MbDpl66T+$mpi>$7seUI=$NY-L*eMCr8O!EA|9T>+#$vTQFu?Ju1Ja`&(m!L z@QMs-C}0Q{Dak*}_;B(4&`wP$9(EN`WW{*@0B9J)-maLTG+i&s8G);6BHbs#VDglC z`_hY1^79zaGXL?MFnsMlmW9rQ#40P@`C1u8Cx48kMhfE*pH!%E$ZA+ao4dt1?Zzk8 zfM1#&lkmdg+BlYM47FH6`E2Ni#h1U+9Q3fSeOZI6Ig^%&@37&D*Ze1fZLGhoS1?JA zRGx{ZrCtF090W2n01GXktu-H(sk@{lwM408VMQ!IbiM9>E3NUf#_#`o7 zqZQbKUl&T+Y~hNN?}fHk`}1O~G0>+B^+@dWi#Rn{pCNfF^w&MM4V{|{-XN(`aIUw& zNHb)07bUIfwyF+5hc48xwptK7psS9|ql$M((IKeovheIJLl=Fq-wSmWP2NF-zxV|k z^p;42FcO>IuW80$C^UCA^s+7;I>YN99>My7uRp;|T>gWheB#6sg7t^dxX*R(H+rJ% zmQAIvwsO!iq#k2Lc@;~}n$C-5c1ylf#E`|REP?{DoE4Q-7;PZcG$PtkohwCMgaIKA zcQ622Za-*roSZ$B%L8bhy}8K#KSHB?wzKrz>Wsn9z1KnH^Njo#R5+s+gVw!O@9y)w z_k!NJkFItZJZdr|^;6`9_%}sCjztuZPa=W!4*z7TW2HQb%O>dKiNV83uf4asBfo@8 zcN2VQn5itl4#?;_*6Dl~5j91vLmRL}50+KSP*6J+X5F#qJdwjOQp|u5upw^|U=>OS z7s5b$vcYwW5C*5+?(Lby*l>|4H zlUR8^*5^MPID5P}?)zmi5pdSX7cPE%zVfH{Vq&CK0Fv&wY|_F=P8p7mj1lM4sBA!sImdGf{svF9=T%W zw}8)G_^M0oPdDCOaLkS_fVtMpcCuFQ{*ta~iAtF#U~^zTZ5azAE=g#kB-~PXob^Qq zkQDDZ-W7!P0nD5rbJvpy!qwPfIuCk^qw`I6S;>w5UK%C7c&1iugCv}2$t6lPoSZ6k z`#wJ|M>Nepn{t&2`~b)d8Oi^y=cFuhgUM}uLvMPCIvINZ^lN2tC6%Z$?ZvPAPn^2r z?1hWCkFJw+G^!woS|K&UH;McnXUMOCx?%nF&Jeg0O(5AQrsvFt1aWmKf+ zTrI=b7*=zRQ-NHRfqx+b)m_Poalz|=`dgg(P5yu6D)+eJxYpzv&Xj#*_-lIH@Wi)$%KA1QRx;M zHE3f6W?F}AF^qo`AVm8jR!;GnVo*cV^vbQB6x#8K^UsNLGlwx<1DXF zVJsMoxKD-K%8sh7Q6AaO;8WLw8xo|6rVqCHv?-}S616f z6vTzfMnm-Hhh35({>||%Vsy^6=#r7+_9w@(oP)!^g&>#Xa5_7fiM{|I=!EW{y6;l3 z*kxM7b*#(aNBoNIV3dgl`*E6sIsaD3fieLLF|MxDR7pNi8F8JN$ zFwjV`K*jxv%g}J50x@Z3M$OKZ9AlOff+&|BBi{0W;u0skZBX_9yHD!vi&;zVpjWvV zcj~YibZPv72b~%8%M@)0%W)Uz!)n&ggRuhQ%=ncSe2Bk#bM7P2qgM@Wh}*0!yLy(P z$S9*;S-G-d=qNdKEMetX7y5YxKLYr8_XptR z>|}NmF>aKB8L-i;RaFKUaYu)Uay`zu^vqW!g*QO+LN6dm4`4fO#HUbQ2a(;MCg-^9 z!6)UNrYz_l%Olp7y(|)pRqJ>MG0w!~uUc6Xc!xWOnddpJ?=4%Lfv5YM2Q&tAiWrHP zXt0!)p|xcpsV*%f(SfL9+b*WO#KGB|p>lM!KkeVhOJfRwjQ@xmko#c&10HmD`+^C)G)oy2-DrHUm0|b z%-ou4Y8B`qaLMK2RkI7E=((iYs?&@|DLaeMjxIrt!wbAm9~tvA1-QUnI9)fxvRwR* zVE>|CEjHN-lsR+A{q<5Hkc1hLaQf3LfdnuP|bzrk^H>q?uF>alaM$VSaQ0|bX<`i}r3-T~ zjev8PWJ-??^xz{#M05y}6>M{Gy-s=it^4V1>fVamJz-E8LJlR-WhWZwhXP|#kdDkT zXEP)ty;T`uZm`L~ADnA?M|II-w5K``A|9NLS8%79p@Wn$5+ve9@7R%`tE-Vpn z5$aThsg>vnzl=2g)k~IjGVuP#Haj$6aj~o7OgavWl_JZZ%q>vmh~@I`aMOHnIB0c{ zl4b+fCJu<^@RXFy4U76GmtG$E7W=8{cLzy~Nx=h8MdmzN7@NCGE~T*5H7z502eY0n?VNxr=ttgOR%S5$CiHiime zHe;cFhTnF%@)=q|G>> z1R~7$U5GMhmjJYBwfkv;Z^grgu~FP5Q}C?$M(o`NyRKqu5JN{ABj)`P;qHr_Czg?V zd&ioAT|%@wOA(H`UwDoy*WKow-kBWtU;`FA_Dj*r8AIJQ`)Ex`!+1DWa)d&}8(at= zZdThpv3Z%{7@Gq9{1D2gcct4m423u8xuKL2Ue3aWYZyD+JY9|JD+X@S;S8{vShW|d zG>iAr;erMt%jRz?hrX`fVR~lQLG?a1h39;(%$r`Q%Hs)h@8l?7(x?}+_HvF-w4qqT^#SN<)maU25i~nc&kVP||C498 z!m%66%a?Nsq99=k*54AYq#Lk42)-B#LE7fQ^UTA;e%3t>8Uee~ea#nC+CfJP2@AzQ zvu3N9I@zTdk=CuJszRNQW_u)zy5iT12ME1sQD7|57WNith&(PBbqU(z#Gt)&(8nt; z_~mGy^~;&1C{SB*5Kjcj`hQih`k@D>F;nOfit7#_t>b)isLYSR>iTE7s%!`*z}5rf zS>aDyFm+kuksI(L6jMZp%#sF_)UG1_&=3Xu`kSFpfH@wu#B3e2^PwhZ2_&goR-jiu-f{pr8NF^WXL&MHFVGEfw#6K)ufpnR)x@pUIK?II~-!9 zR%ilF)1uwWP80jr^cyGrX~4%6UO3tFF?zczMlIK{bu zORS86B$8V3soXZtCwk}ZBHch|!=c>MKls6z-OD6FeBV9_aNRka4iDl&W$x-C{yT~0 zyw@vZT}Z`(<5*nUZE|(&Nd%06>llf^a^0$)%6BHJ|3>nLf4;cH6E7x~Iu;bWrG7G3 z!AnY|(GUcX84r(WAIMkVZK5asWWV}@~a0cTy3h}A`;wk%sCd)b3QIgeS7mWJcM}Y&yXagKO-gx zH}Q41J}^RJCA|UViU;?pDjz6;w|WH3RGvDnf}0h%H>rzo~Cw2h~$w z4Nu4Lju`YZc|n|+G(b@_mqK-iaqa3-Zhhpve6w{vjdgVsp%j}CuOGrFVZIoXy?!!_Xwo;{SEprksYz?Rsd&-q+`v8hKRLG2c0fP&UG?ctPV< zu2t+d-+DPQNRCiC?`g6x4n~FK0zNp|CBQGt$WlaXDOva>T4(M)+G{3q5WCRWGO9|e z3*A=OOg3;up5iGyZc{yCt-LQ%ZLVPL)^Pj7(uk9rr=!?h)_brp3!1gEG%UQX7mJsk z9=@e&o9v31y{yFvPBnUqCJXLKCAsmVa$^YO{uh#3+Oct1pYGsvXZha?j94qbaH;M= z)`yXS4yNZUcoq$d&#R)zLECcUh5L7`c^fmK*lV1`N?aNE_eE{+o6FDtsm4=C)JRa$ zchQ3kyyrF*gZuEv?H>|Aw;=KT_QHlv2D=cK3xfbK5jPzln2U2=wRPf@ye49jMZ@`u zp;iL6ea1i@P3bC>p0#ve$hDXAr}>fJk_V~R+4@SJ&KGeiD;xP46;&GJ?zq<4^V=Bc z@vErGqhYsd`KZd+F45o0i>+}_ZO(fh$OW|N^^?3WL{|9>$)AQVw3$^n$0Xh&J*f%} zVTs$1y%WN8n}YvPAIAA$PYoE&zFd*!Js z%V<}#%0Z!+D?IJinCh2=a`hO;#p|GS%h~qia|(G*y9o)?%_LvmVKQl%5;G}HBtR3Z z69%MkHaW@(ZY?kK?{iLajiw42u4MF{(WcAykg-{%BL)}2a&xkIDR$lw%Qh_cNA8aW zQ|6}!FKusmu?D*Yjf;KJhpBV?qb=?>L`ZcJu9c&)EQCnLVQ+b8%Q_VK7R6is(W)KT zbm)mvja`BbhpCN1Mc}3m1&XHOPZbCCxYJv4rB|1iqNrasE2}nC42$t2!1~n~8oLV& zRz1Vwi#!dX42VlszKe4#KadHkvs^8nX)n6->I}ZtUt-jz=OlqJtb&(1ri8ARDocLnC|82GBO0$ z0g1<$B%)RqeS35fg0vj#OK;8tKkzR#bB;p@bsZ)ps*~eNyazPu_ynGbTxM# zUf_yQO18Vcg+dV{m=wj5(cvU-H_*;cJJg{3Cb-GNWWBB6jeyOF&Oo~%XiFCet}pIX zf4@yZ4Ke8beYHNte2^CLn0L*$D|ligh!eHl`xiK%)_(Pt4yeu>3XkX`?&)P@7GtCW z;N)&&22@5zI|)O6mHM%VEpa}f0t&joSWE29c!bT z(WyA2<@cR65kO!bu5=$@6TA(&9pVSSUjVF)KtQ3~1LHVlTM7B9lAuP0G-!RzPK5iI z%F8aMXgKY-zdXOzi-0_ir&ZgL9ybpqK@n1Pwtcs1Xi~?Ot~t$%7jT*aAZYhp?DS-z zsWE^nyI8IZl$W&?gah|UnE#)u)}{Wj3(vm$8H&JDz11u8 zf?-gx)0PTju>}j^i&QG!B=B%Bq>T&86Z|%H&=86Ik{BjEzhI~^ufZHc2UF$Ag}-pL z-N`b*<$^wSbxP1PZJU`nBqT4T)9pA`WNl98&YQt_oxNcX23qz9bv{lo)Qp6=+A|X` z=_Ik_8*)VjL)rpJ_;+6MJ2$*O?a#hTe)hMWR9_^IJzHqv+P9;ovwecKoBc;U&83Lz zz`3#9ILAJ+4B`qVXCbE$v4qHA#Di$ZfaA1QGQE>=LQ^~E?a2C1{;TNEpu*>MTXJ0m z22c6n%fm~0@mujRWBJMsG5kk9HZ^rKZ}h8rU>r5}QVxy&d;J;PfgwJ*4Qhen7ZFSW zV*N^d_Qre%>gD#N3)a~n@-%twulk)L!)7q;Ps7u3uM-FN<$fFz&q?*j-y!J9j5;XUb@Mmu?{OqR!dI`w)6~AxLO6WLOMPYV7e=XP43x_frpTpWgOe)U z1iJA>r%ageza=ClxVWn6GGtVtRai-n z+@x<56KpwwPxy0pz9mJ&7}n@0R;7vs=m3oC?bkU6E;wUL=eU>+*&^Y-N@bEhpSLLP zM)cj6*QxF_He0u5VQhQywy@b$2&Ewtu3PswXo4fG@Hz@A`$uUFA+i}a6E(6-l#J}} zNC3<1;mzVjn-osP-gvR+H~%=7M3$!6EEuP1RE7lrAp43#`BGan;6<#FGtUr~q)Z6zb-|a~7lv)eB zR#W+KgyxhWY~B;JLz6mcPcHJ6+w*6In$S+ju&``sepY7=O}>Rm(mTz3VBR(2I;mj} ztaHKX{ooe^RDeJd&+67v6prUaRc5dm7Iz&A`C?D@@lk@+SVR~xS7VGwcEi7;gX@_5-qPztcuXd^*OPCo1&n4>h8m zQeJLHQn+P@fCG{ch@ex}Eb)WP6!RnkBo%z(N{@kfPsrsQWs=2p2G8=ARcik}3WJHS zr?vP;;z7o0Zam{k6Yi#`a-O`#vP@n!`pmNHHO3aa-!ACOQJ>H_VuK7}W5V7!({L`a z?~sXcIXiFA*92`0sUTDjX}xL!wkV$pldhb5gk)>~Pj}wECw5L^m-lY|cH@hy!X~S)CBk%-SDI zf?9?q(qJV|?;+5Uj5aMipa7E#iDWq%Ww&j-FbI>xUz%#76tQ}&N|UoPolc}?)aQm2&TGTZSrb^FSg;!=?|p}l%IcFM9-Ki`|b8Y zUS8_Xj}+}|=5RBB0K8XjhH}LB>Aw&5%0)xRh`_*cPG=*U)G^!- z$~cQRu6Um_M+k83#qX-<>0}`lUL7cKY|T}o?yOjFvs$&C$+pk3RN`X3{5xJ)4$HwH zA?oZ?k)eK|frRVsf*8_c_JM_f8BkP?c-ur;v-U1#ayQsct<-W1G!Dd%<-N91>Z|NA z$TD75fxKd>;l&4>g~qs$g}Bep%IGxGa*YG9o-@0IS-$UnG4HxGcWcQl{eU~}7JJ4q zDrU`Dj52Ieb1Pc_`+8bJfz~932nU=u0IgTJG5kWZoGo&f_2bJnA2=0Xg);$a%mITIBFhJWK5V~P9o9JM$E`Ns6*U&5f zLT7R|w_l<9AiGyL<;!^|RyTBO-&@gd`jE2(OwRssd7m?s$DhjolOB%^KKgglwUb}* zbIrosbKHI>fvr1xFd}l{dP6)LOE)QsYq$;8G-plh#)WiV`Km7~2z6;Ypc9a&96fdd zEgu(sG+~mD@r|oe;8mGG(sJhe~wqQ-j&e>*xKIUbg9bw|~#Pyx=Ft zcP;C>4)MnhO@vTrqDSrGhmUj}vAYV`Qh?O(drA%sf)T$6oIJ;*463>KoaM(-NR{QQ zU1e;b(I%e&#rlob_E%I+oa9Lg!YH#~aGiLZ**PTmyHeNxuz&e!i11@guECD!H=R?- z?nhw~fUW0oh=c*Qvj~&GfbMY~v}JPh^vnD~WO3k!oWE_0 zU8ZD9mJK!j(Lx#eN$j8qR#$YqCH4h>Nw1Cp(4^Dtb_CMGHQaL|(<-%aijKBhPE?pu zth)Y0qcw*fM?sy&VYTZd*U)Y>_g6S~gF_=EHM23@PtBEPiOcNWKss0zp@Y&}A*xA* z%ZAkQ!e$Fi3XR4~OVID0!7?gqH)I!MK&;01G`bmG8}@`&3?6Lx1!l*{hxn9MSvC_S zF67tx7;4Og;NxF75E((!-nx(dx?6FL|D%lBoJB$^YE<#nzygk#yL;z08e0yqV6IG6 zGY{wrTpgT96S}LdP?eUO+sIvax{E{r%u}lxzMQ0G(ZKI0o^NeQFe3zGqNubW`Nz}1 zer_WU9bZS+?5aS^j9j4Z{PR7X{4(0aCK1qKGsCN*JekXdrBq;8G2f~i9o+Q<;i5MW zG;Vmc86xS(#m}|T*?$bd`8Md!aDF%c-R#Ly!f<^Y(W?a3}s zrIj2ZImWl{MQBZTXpO0KUkXRthQzZfWvzEr!D=U)T9UU+XJYB57PFjXh^HerpEAE( zB0&}>%*R113uyR;S;Uw&db(rL40{Jt{RvWJZTf}Go)!zOV@DZ}$yFIkoR+Pe#IOe8 ze%V|rXSR2`q4P*~_9arZ$U%c3V`5JUuYl$yK`xVK4B`hRdi?(Wg0oH;yyHb zGJLL?ILNQM`-M>oH;u)tn=+)lxvsUdyRSZ6>Cs+`vDmf%e3O53We-0w5jp=mn5SmV zHZVGKvfE3i_F@_$4M0k;MR!Pal(Yt#I4EGNL!ghjRk&iJI>-S;;MkI)<`h&=VS6~k z|2?sS^zaY5p>xAO!%(mV>jP2m)Zo-(Vy#G#H6^r9*l%YVDCpTmgkrO}qX>Pw5{}^S z_kNHV0&9*V-NqTPK9Z0AXqFC%5VLE_t0E{AVl@(r3qXvQ3PQN9^cy3)MJ3U^h~(82 z{Vz3ucJ{9=_lacPj@T7Gl|_Mg0b5Bp|GOM9%-aA>7jPgwUGW8~c(uH?R2}9bQhaG% z2M|h#6rhdMv2<(G%Be{WCcZVK&Sc(JiaMgq2@zm9xz^6hjn}Rojd2+r@#;5S#7T00 zv8Ru3g9~^G{8U~j03ILohVfG=S&U-DTeV`@LCk0h;8?i=b}=Nn>Iur5k93lEz3$pG z(iL#h)WLV1cMGT#Cvkj*TZI=fOEC_vTEkxA>nTT`fbMYtdCSAs?`yc7L|viIBbtSh z7xXST6xd`0KX5j59}a3hi_myKY`3=jhD4h|`lV$y@$uf7=)G4dqM@4yAE|g}H?aL9 zgF%X;nQ^UNc9)%59E-8I?{#*{GS=a*G8+MR!MDVDGJQ9a&;#fO>Q0xD#YdX8oH#Ov za&B9qS}Y~E5*~Jk%ew|^Hu}_O2);K_8CY*mr;i4!P~dP_{BFXE0U$0E{?nO&xDrd- z-ofqbWsnac*)K(4dcgcop9eydlqApxm>>YCdQ`o_;)BLgeG>QDGFO`<56>uMDOX@~ z+5EUIILoF!oud(X{0e{st`eu|E(8)UCV5COspyrmUZ&?UME-I}uW0t7rSa#rq;5jm z&(YjKuyrK`&_A}gl?=`ed$f~>dLkKkIRxTs>V{5)KhVmEyG>7OgW&;etSj2~mFNuM z+5W@dunJySH-8%WHmDX-e1odNbuDW8Vm`o#Qh9-Mm^0PnCU6|YJ^uY07am`{yRIPe z^Yn$jtPss`@rEXb@Ji4=u67%{D`|tZ`9E#CS~eI6dZi{u%YR1e_9D3)aX5*@74Bh% z4QgKCqIdSFe}?jwQQHoWM3fHofh0eU>6FRP3e31)B&`zY@_LUDeo(Xlq?qwjdt-ha zp-74+(3qKioE8gK?COn^e}BNz8vhVYb-X=Q!nU%x23%}FlYxn($aPw0d$v?#?=yZuqD!hQK;EGvQ zu0j5?0;N(nI!Hz}FT}%x-BqV#7#3ok70wE%D`gw_iQGzN+Ou%;>tsts)km38!1z1Pjb91xk)B2%@p<4Lz(S*XmMv0&1)TfR zyB1{Q39b%6R2Bmxjk-C+BOH+SxpWG#<>L_x73I;m8uKPY%8^U-iIyoQ?-w_O$7lUf zgXHmmTQEOd81r9jm5ia&`umrGHY={HL|22ebflJyN+7>g!6lH`fTjVBX731*3&Otu z`i16!7cZJ-zE---yT$iWe_m-K>9TxZ5nzbXZo48QMv1kSBttdFCoYBQ!56=Xd8m-q zPYDRdy*+bomnxW4!gi9HJj>?M{ zQSGm9BL}1cOCSq1k#iEjJO;MR8u#8F!95dK8z$9)ysaMug?-$c9Hj%(SfN1khE}VR zxbn-W3XK5EdX`9Al^$xOQ5xjU+zRKKTqCMPfmJ;}MmOmmmTO_BikJb6er5gm$gORf zby=Q#&m&V;l2GeL7rE?@uvL6ws|}8%#4`IaEwkVB$Bv@^Y?%XpA*~sZu#<{L(8Iyj zNl`Yi{pEBX?(XlwE>LabrNG&1fq0<2gn7!B{HLK+VWi~cHal2a*r zwAbVGVvvWsORK0}v~!1gHXY+Tg$(xF?0#(Y`bQS|8sSG2Y6G4;>1$F10_x&jIww9N zxJ7_g)(l(cNs>1E@Nx(vMHH)aIGUWp3kJw2#KLwlkagR>T6pGFc95OmE5%k;Hb0Og zVPkuva)Y>|`RdFKjX2MZ3HP*1WI>ploN2N5tmpaYD))xrk1|_$ExWro5u7+gO&{@5 z%lVW)QHq!`jz%4GKS^?!^ojkFu6NSCq6Bl99E~(6#eM%CZ;R{MW2)Wgl)?#HhFmWQ z5^&19RGZL@7v158O;mUbNW?J#SEbl3V;Bn(d?fc(#U6-nFPz;)a6IJmilZ&U5Ymd5 zYpbl{YCNxbHA_h{Kz7sOG5KippXrqc86@x_nY4@=(byNE4a!aM$F(Cha2_sm{)upP z9)!lr0ocB=qcgx*+4!q=qQu4YdUR#yJE!SaY90Lr`QV#S+4huk{0*}q0cu%(5V-Ps z54bQEQF-#JGOZ#yTdmcw-`NE>ig>*5i0_Pq`4!mH` zaY_%lb&+V}QltatJ`Y)|AHBi|CJMZ*9{bS!&rN-4ocZ>K+D8X`iAm`DSa~U9$}X$^ zEGmzbbczm4Bo-+obh>s_(3Q-%w|@va+{0;{dMQ>n_^M=4AmyY2hs3E(5$H|b?lXa@ zPL6{o?-n!AD=7khGV{2lVm4N$Z2Yuw8uQ=s^WxxsFvn+)$qPoV2p(l7dc`_}CwZg~ zXGccUqlBy(RTJte9V>~_`u{LwTag8tmJ%r>BG^P28=;zn)-VKFd(VI!`Nqdrcrkq( za|-b@EwFG?%go_?O~Zynk@;A86H9ir=%>A_FXO9O)=)8#rhxuN{&G5B^`&GyZsI}B=^beg`n=)NK1+%WVwJ<_=OKubR@YI z@5muE?g8;&-hF1UpXA0Z+rNk;ZqGQW`zbr~3%l1B^DDwjGUbIe$Im|F*XUUU79XIDEKZ1OhSPvb@2io;YL1{iX zPpVpY%`K_hjhiDA4ZwoN`T_^1D@<5uKv|XG=HL{_t`cEzkoz_uU4vACjGJweKBk*-NF<5`i#gOEq`U2-P#KS<8NjLCjOfuyc^?0ruDz}U%j0G9jD8SAQ z0jP610>!sw|r%~k2GV2$~`OU69+ z8QLnK)ykX#HiviZE*$0sI03n(p3f)Q*0X>5B^DrM^Fidb+$q=rw@kHNVI!4_G^7Yy zy^RH_T>0H6jxadpyJch!sH)FxSyM%I3t=pX9Bi5bew4Y>`J-0nDm#x5V6_2 za`BrSq&()#e0gf-K3O~jhdV}BCHZLVbxZI{&k;=fY{VIa!76B<#v_hoJ+gMV0U(Bv z5z%foV2lBk7g>Z2bjrST<%`m|Q9RiHNO$dqD%v@5`zM{z7%x8n#$9Z8R6U`=0DfD` z8)USqJtX-y3S+sZ!_L;guf3~HmR%$*3H|`+)>juxtDk?H22>c>Wp`u%Lllr}*WH(s z#1HNnL3_4#HgEk7V1>c2l?2pi(KL}R1jJip9rsIfLq^D2#pRCEcyWI0UR@I5f1u(q1FWDTU*ldwkn|1_8ZwJ z>XmrfdsIsg6#XpC2lnwGB*e*O=7ZobSR5(trLTu z3EO|nILKmMCXPcdAeHpGiRQ0)XnHm*J7gWz!zjn^i6Jk2?jwz&JzG ztob4N_X{gbJ*YcCeCxA$kV&4P+3&|3z$c9%>MSSoL$%m0kdH9Nf5B(m-FzLCh$*QQ zq*hjmI6h~Pl(3==rvYG-+BYS~k=PxoUNee8lMMh=sYX~o&|-}cjz^}>9FY!!&517{ zOF0QK5$k)%#IYg@y^l|VymAsl|DT z7hntGu0hBbSw_XDbZ^b!p)x4*7XN>Nf7{kHk{}!@{*Z@w?e~pd)htzTT&*}NrJ7o2d#p_VnfsDP~81Or%!;qP5@ zlukRbo|;HO%gAMJC5_bvzPFyDs0xL_z)+6cm@K+`Hh8E6Xzh@q&FaoFReD2`STHUn7OQa@znnBydX z$+xIJ7+Fgu^?+k#)`VQXJym6~6}m6Xa>3zUqeOo`%o?V}?}3E!?81PBwj&xiQkjsx zSFm$c0zvzyCiX3mg)igL1@PJ*to_|@b%{40z2HDR@dP6Vnd-(X%JsWEz?a`(w(V#J z@0fehU;|&qReC12mVPsq)a0)WN<9t%%G4|*&^+JYAzpSf*r4#<@nN`Y9~nasJDonm z+H;H`KG&snGbh~R0`X*kx|i}gqt-9 z!S(UZU%B^qAa&Lz_H^nszV4?R%#Y3AC-1S`4z{6YQqlAm)_83>m0|(0p*wN&p?8?$ z^ExLxC2#FM3Z{H(QE$0VOL2a&MUhUf1uQuDuu`ft9tsR&LhkI<@oZgm>|qpznq~?cPemILj<22K5U&qy%bf-hMj!qYhacFP(PbHyCL^pRt4|a00RAofG?&n$zGL0 z9w*N5R_@KogEDGSlIV6b}i3Ed#lqM#F! z0)ko-&+ZjfCz-{xg41jVr!5(>eLNf&aqyAE`go3~T4fDcnt%NlDg1D@Rh3H8K4~-g zr}SW!>%dH?44-vL#Fct6P?aWMM;_<5jwpGa=YFdD1!}UTfz{TjZ-yYXf_%v);{!MP zA|Ar*LF-8XH?F{ZHuQ*M%n^5$#F1$e89R5h&oGc{Tk51AXdP~{L2Que_^@9AEePH- zCa?6KHM5W4@e!LcM)wGL&4IsC_=Gbt%fO|oL9?kGKVh=N7MigFEc0kpdymMT?Hf+Q zn8jpYob(TVwjCb^WEf}Sd*hiMN{?!Z+hH%(HJf~afTwryXP4dwSqWJvNBCmYHoSW@ zAv`BT8#<1zeu=;Ox{N8181%*Du`kI|?| z#1Cl)a&!Ku2cNTH*vhB)ua}UdmU(^h8T!kg8kp}P&y@Z%4yf)Xwb4Cx% zK0DD>l>*j(eYqbvO2cN|+YuuazW$a%X2Ea4JYgKr4DN6=QsARU>C7CC8YI-!e` zJIFmmX3Q0JZDgkZa>4sT`GDRL9!c5#yQfGmwYy>t9mq04`NVmHkI8)?wK^mD!uZ0? z6d=BmSs$wV+@rkHs@p!hX)u~R_sM6Llt|0*ZwvQcGn;0V3+DIvwSwHYI09fzT+ac8 zDxEWx1Zk&>fiPZD1P(~3>DN)McIFXe0!g-^%GOVI{<|jp^PX?mbSjAD3O6P zX<3JtWiHhK@CSCONAvHF5an2Xo!~9K{b9n)mGXg~i~3{Rt=_*x{Q+AxrQU*LWi;Q11H?1IZnH4 zDGdq!xE5nZIp0m(B*Nh(jh!$Q^RSlo--twUL?nmp-a7!rp5n#lx8erbOxQSq1LNWz zknAwE)rEc1_v#56+Q1 zJ@zJ>gmYpK9@dPr`G36>qoQmj8`*~;a!sx+_VW!E) zXm?;M^{1&nRVrc-2m_$xpxS~2?L%2vci@w>B`H-+jg)-z?=|LJwdObSq+v{^+nb|! zAhT+?RFKTGQq4AJg*gevYCmaTGN|V<=I{3#0up$cYuMz7v19$z6|-#`jQ5@ zQ7V|ONEF%Oo$lJ$wnzu&9=`nhP!EIbd81+~4Bf!V~JK^&Y4e0FOj z1A?da4n%d(<#j_sC2^|kEo?YoJ}rbGfK->}a9zjD8F`B7oH9tir3ap}>|yvfZKXB?&nHIl@&kjkL+PAnH??@Zr+4 zVYBmT%(~7Eu7z08OdGRx&hbr&Ojv(af|1FaDo(M4n6CxYZBlflQYpp`Fn;MW270OI z(^!d=7?a>1lFS5fFB01g7&9}-8y<8MsV)eGJOo|amH{DtUHMqBnX zm)GjRpr&h&%A8{6^z!mu4D+Rg2Xwx*?JX4I# z#`DceJQ;>I&!4ydP_v~RFwaIN$C{B;tk0t0`-}jfCaTD?xWHw_J6wI*0u?Pg<;2nE ztzXl{niB|gqUQM9*nOYeo>eSyU`YH^Uo7~G-b(C7e#;QtV2Zqe%w)dY|hxl%;fqDUkh#oao zgX5kVgM939Lsh%1Qv_Kpg=(Nqawe_KLkkTyliizjhc!RtncCiDm&k$k{=e0NSLWm@ zE%WBoOmc~5y2KU`T-IM0G(BQ9hd$-2Wc)ZKI4)7 z(jY&cMe&0*I$fkXGqrCoTV3`jPluK$h-|vF03)y)_;2jri_(z2)eAG@S5enY*%Wq; z#DkioT|mfwStmuu26E9J_u(`>cPbKW3rUx&P|=JMypFUXN)d9j%lurjK_dS(T>B`$ zI1>1Cken3ZoBxtpIo68+H;fS^&*KOpib2!!9mBRwXP^95y0+&SKR>arE#kwfXQcd% z6^JBD@`1?O(hlgk-N54}%2(G@AZg^))gVEdAt)`FDbSlM!Yo&hnMkk^+yS z(kQ?v)Np0E8Cs}dl=oaEVDcc?#rkk)WuMmi7@jbg1I#O`@l}z8I<7RX#gC1J7Ms*( zN%Z1CBSF8?V~0D=eE3)6Okbzg^058j&S<=fNTMb<$KBzf@}X?Ve~a4K_)ENJo97&( zP%=$Qge93DsOG|zg*J@=_eH@&XSF3-KZnyZ^9FAiZdSR$|6auuMcu6+jAn@h`VQN} ztw%$2=c>anj*XhNcFsIhg27Ks1PaGMSiw4F(jNLhq+v2?REe^3fq~>YmP!k|Ayg%8 zEL{cDfg#xJ);F69rm75MxQ3y~%1D9RwSY7#*mumI&G|iVwu|0a@Z%VIF|ln29KuJp zq9(eSjY2c#4;C;2S6oVu%OApIPH0O{9X%)X1r2pOP{IO56m#F@9|_l%elhWE)Tj zKL(G3jbTVEC6~2pmWY+qgU(dQ%x)#Yv#GD?5<)}c79KlijM@&+Yp#WcFz8?lFAZk9 z2SGBg*0cURr^}#NF_Lzsj3Zthwi?^*6ZrsFvC{e3dfCf`2h2@iT#L`!?tx}bMi<_? zQjjXLG@-YVuBtvfLQwB${VScAVK|xZ1t=;fog2Uth87kKJ5O~75!%&M+kd}PsDWcc zi)xpb_rzam)cLC0bnXeOXk%~T>_E6fC3Df17UAHXPsh(C54s=bY3Rug9J~RApIgJ2 zV{5ri@P5tKiKg@6uEXlk!MkuOW60S;7ak@#HJn~v6qbgH_^D1GT`j%|1o1k(k*9wwYINfD}YxUnK>LD7LNX;g5 zYXsYE0H|%gfH)4_uT#{Vt$U3kT!tpNV3D*>{GPbUaqfD4J$I680(7i#1pHfcjLZai zs|Vaa+zoKC4b}9RRwG|L7pi=%W+%18& zPQ6gr~yZ?)Prr;UD>wWSOftM7u2=m}DolWI8q%{xVMqHpY>( zLM>cA3zzBil>{mo$Ok#}OcEpa)bB`eG$tiU5Egqiom+ZvRDrV|`fpJk?>GsW@IE13 zZ;=4`#dLazE~YklVB~IvXoH(TBUt-dr$T#?(sN45Z!qky^Gw>KmEpUsY+$Ko!5Xx4 zrQ!$FL6=7(?AB!MBq1gr1{uKB+LlY*ORhv~mG)%`6Q5Op8C2AK!a{&D@$+q?Fn==z z`jH#_6StQ4(X2&$$FSJ#%>;dc6_0!5x36h0mf%GVq=^OLAH0rLZtY(m7+5?ml*gX`*WaCL+%RcePNH-xOI zeZ073`6jv6sryr@x7Ar3{}b`|kHDNM^Erejli|q=<&)hZrW}ouV*oMh4-vQGydCI8 z0Ghye@_-Bt8uD^=9@y|>X$8lKVKqX+yd#R{oja20F}f-dq>xJVm90GBJgTOGRd^H_ z7WHH}Y0Uvie#fDtcyvk4XigbWU*FMvVcLAjaI%b$f%{&QIW3T8u9=gXwQ)^*kwbn) zvYmV}t&FwP=Q;)T7l7lo(;Tdf+q16d#%QQlG1W8t&3M>uXZ9T7LktwU0jDN`Uxgnq z<~L+QMZ)XZUPpkM?Pir4%1IJm{FUXJ@ZV43 zreSw`cTeiYTz+oKYz6WV!oQZ)N;xbqhT~P}85&PZ$WPR@E5i5o!w7+%*#)S?wVo@L z!I=TSBBtb3XbZ&%O3K4SAiW?(JsKrv;`Vk zdDmh(M#2wXkyh;US}^a+MvO5!2hNMx2k|j{tP`d&y0CCq<&!3v42kE*t2qBX{Os;0 z@l^%Kc3DimG2*lZyuJ=PNC970HMOxAX|lVw`Q&yIKKi}Q&PTC>`6~HtwP1@^0jdWE zyN`IMLSLk`Hb`+FjDq(o!_f1zB7cmV-Zf{v0#DJT5}pmdJpvgoxY%Wo?EW{nA#Gi= zkwMw6a2RcD$aB?YW_d}$KAFuD;NCw0pX|fdX98YUBPf5-J&(rPkBs?=@^`~m9}Sge zXR@;$IOJ`X*PdQVB7;7r-W3Fw-FJ-~tIvA{a|$6bq+NFER{mwxP1&0@-e$(j^K-YJ z2hfRg$$pf^f|I@RH^dw)#ZqJ+5hJ*K1^sbPD#&(MOug5c5||v+qL8v75uL5TPURnW zmQoZH!uJFXWd&MG?otV}jD7Vh#y4vTNuf5V!GLhrhxpv`1=}PgarNLHupWVmU=ADU$Rh~Cf2Y(1!t)&Mk9MR-|d zqc9afv_`aKq4lBM+SWcZI0xKS(NDyHWvYI&l6DKygUP?>k&b)6qwczI0rUe!wf2W^ zhA|$`t{jqYbMq+k*;d9t!DGCiZMNGlctIiF+f-c+)2BPOQlL05!^21-o4< zV$|s(6_o!bB^?0_L!Kac220-}>-5T^8ba7`N~XmD%Mh?tkAA{GU$)_%f zC!<_KZRYcb?)=tNB)X58Z!;t0oKW=Guu-dqAXan*y)^vwoxvBU-Zc8-&BrHjLk0GI z;+t;Evg)0Di;T9w=l2gjebvCk+0Jy1^PHKo<>kf-#s(7xAo)xnOB~d&^qg~)8&p)=n>w>+kCHo1H_B(Yobl37=<{=b`r->>FI;ryCuM z4@btW8D*`ub1M*dFlmwyKnTZ}%QLbFpjx@hv&(n)cOTq4fQWrwr84S)`yv#e)1Y`U zf$^T>;b8VqgUk@Yc{Z~6*M9moF=IThP?bR8IUIkMh<3c-BqENwaRXh8pD4xY%lC!Ney*h=(8#Qn)}CFY&y*h#{VCRK?~5bN;NP zEl^~x-829i(=1$~q8`1))b;8w(*a?Kl59?!31#0BEa&@_# zUj}wy4Gx(q{cp_+wD3bv)5bA1Tnr)a#C>qH!L|^HZwQCLrg{ZCtsKsxT;PW1E>Lg!w|{I}!dISbFiWqAto39Wua1>mKD?khm4auLW!|xg&FTZgt9Epe&=`G(yfIBb^^svnh+G;bw@OE zv~;4m>Ntf^Q4R26ii{R_EO!fUkREn&_V;Wf|5yMs+J6R6GA)0G02rk28tR-y>GdoE z+Dl$C-X4kq)f&Z)#}ISJ7wkbEV}s zTjh4-)KIp=i45T1#2Bi4y8?yC^Ee1O4=p^N0XP=gEI!V@N@BD_TKe zSdH)94CXLi|Du-~L2Wxg_prsgEuU@IB592~c@)g&@IPCUnWPYG1*LKvFvwI**F=}4 zNgvRwpn3$30lsJoZ{e0w9R+mgKx~SHzi~e2v5E2#+me{K}kAJ8hXE-m8I`R zVHj-R=IIf(k%jXUe~FOZ+3NQ!i>Bwkbn$!gQrl*?{CAkutKt`0M?MhmpWzBZ>j0a; z*N(O6)(R}%{{`uktX1YuEQTS(jRnZ>0qYfoZMyJBVLkygXHU#bEBlN> z13UoEs7Lg^$P$exI-;}{3!wH!x+%a3(2Wy)tI+QtUEuL1Gd8!5VxEo_K!ly)vJy8d+$)ej6jsTlw zAZv$&tZBa7dLZB6<9xt!`4)~IuKD9*Xwfwcwh9a{w#1p{RjC3eNiHxOp(LoP1zsmK zwE&a_curL(xex`fa1M^afstaXO!+wl`kL~!cA7l7z~m_((vt{;4qM8TzS>tBU#m|r zWPLUC71o*n>83C!Q=wv1YigFsZJb0;g>Mx^xl(P(Tq4Y#ryQA5Y9{bX%{Ahmn}Far zmaWi-7GmS@e$Mi&YwUNjbcsrYy0zqa-~b80o?IOkbF7B*8H@KkXptSJs4K2fO-*Q- zD-E0>4f8Dr!)_WZD9%w^8iMf&0GfuH)c6=1zzMLUJ-Sf4;f68MGavN>dnbJ7G2vJ2 zQEO~u+UZ^8y$qS1fZ1SZ7m?b1#Ljl0LQ8ql1wfBNdB9w;Gd}l=N7f-N&ITB}vlm>~ z)Dp;*IrwrV#-Ti6~Gy#>dS`1d<`)??-PnClgeU`$1N z+`EP~g{#wfCdL=x9V5*T%w4yO1G15L>5@#}Qr9(l+LHPxZc--X=k7!=qifR%S)xKm z#nPT?fCryz(!7;!s?*_D64z?%bVBIj*@<_12hIy*soN+g5Asq$Zijw_y5>TuT6*HYJS!WI5LT8oyL2)_!=|K7Bhu@> zP|n~@78g#9LM{T$?}PGd?*BqSo(Yo+Sa}bC0va1;Th~ z6W!<1(92048I?5}1*myzn{0~WI~JZ)2Vji(AVZBu8opy=j(zC8dYkSa_WsX1LdMa* z-=obwP%A*>ecrq?*Z_`EvvGZn`)y_grBvdsNCa7M9-Q;dRyPQ5`3zO zriO>##u#j@C-sH)Y;nsNBC@oPol3ZItPuWN4)gMUEukl>m$&G*O~kPKL8x-`Pp--_f53fFBPd#M<60! z>1na%!+Hos9p0lFd# z?dhiu<~O=buq6N43x=4twdputl_KQcdOjR_vTXhq`|5ZzOQai#P?sI2Ozi*nO)v(o zL&R%CkhJ?6ohp8oEu9&;qqtvq`(YL}z=Kc3chuH}`oWjed%Mc3iliG@?XTNCvPt5U zm#VX~&2|Env^Dt3NG|>KrGV@jbi2*h>-$>-hPfHA7yzCUAS(2zUmcOp62zpSJleL5 zugQZOhoJTSOG;io3CSl=$~1R@ZakbWB`C*320WzG*w_ysUa_v~kB?OU8&%EI2*?>m=R$^nQ zU;~8Su4AVE8E|MZLm|%!AYik{PYwDO8F_ZsU_6979Y-m(##%;x_q%Kf6S^GqiG?%M z6zbxZh7ob#dfuJoi0(n{NKW-Et0CaoX)2}_72pbwY^UJ%RCU7i4^>Gr?37(u_6bRrF$Si0}q5?$kQFF1#yWi;XR$6+W zMxC$bWD*VwTSX%K20NAv;0a4TI7bkWrOVfKenrVWjkEH~glj00yg zZ$MpI0*ZnD!etfR0+mV%>?9t57uQp81!lN5sMKo*qhqPB>@f4AM2l@^yq(LXdtBBYAvr@S^<<_-5v7(5Ji-XQY zAKeyFkoCe)=Np=OP~t?@U(GC`M)|~Q^ueEFnx*?b50z>e-+riJ*s48y{U>^P#L0iV zE~RQE(%?hE_iZZj!@s;v?hSVFa=DMvitJSN*}+ep0kEn#z)jxtGQIWtF9X%QG2}-udq@!qJ z;@p(oZ9W0nN^9D=&7U$8M0n&=SbU$rcrcK%ujT|PuB0331+L>B#byba>2vN=Mbc7M zMEL$M0BlDO7!JI6PO!r47}#E7o*v1j#(~16ZLmaXMNUF`LXEaNlVI&5mS!q3Mp@69 zZM(P6KOxw{-n7-5`qQY*7o?%Ri^k_&^w~YiD*1M0T*AvKN@6>l3c~1oQz1bM0OxJl z3FjpA{Q>DjT8IYiJ&jSM#Xd>D!$?Sz3+9@!X6-dF_&l9^;$lw>b}X&K*UOVq%GS9r z{z!exO=1d6WBYK6TIpKc9K@`@LEu68x`RNx1dXonSuRek@gDtI1&h5SLPYS|C@4s? z=%w4G92X{FG~-d(0)bNTKvt19MDa;hRBCVldVyrWSTmTj4*=QvCISMy8{5HUuO{)1 z-lgJ`Rr_8!Y>78M#6@~)TO_H|so#6@@j2}aIE{#7bl7RBousf8fKb)5h;b`~@$g}` zrbhV*{rJ5mFJCY&yoAC31WG6voM$78tnE8T)wfFsUUWfvOZ%W#Qf9;*L@BxSAaV5& z0c0q~VYzI>ThB6KozSNbZnLaXfJ~_({i*!;?#tzXv8sYAH5KAki}K6KG0HN*P!J(u zeiE<(3)Q{0YECUWB%!B&{MCF9cC>?nh)SB4`Uq`Gh&;{$ckeo&4J!xFQ(RwlY#*_V zcnmLl2f~g*AP)lo&Z5`$4bHpvI(5!l20_Fh-ZSTuq9^@*>eZSXlvjV4X}I{>t92N_Rc_6qU7%}XK~J_oazdjZQ~_} zAfoHJlP#&=Kq5m8$jt;2yPs@@YejnF9arnxaN$BZKI3r5ftyObeJegF6M!;UNUK8B z!}nPhi592F-F(0(#`8~_SEDXMZNe9etD?IP*=O#0pyySM2>tE5$|T}=!MwOnYo%2r zFHis_79s)X6A(98(muQivJ4>!KY|GoNp?QD?)cOZ@`)eI&v+?~&C_O`BsKPP?UL~; zR$KFDY-kt7#v^jtjP3eX5@&0lQZ;VCje#QLsw)p)!mviYxwxZxwVcnZD9}+-kUXu) zJI`7v6gy1!7;PY*bskLpw5(DjRNqb_6)yzGON_`JU@jh-tmgOIwOaAYGWJvI-}(1i708mgzJCG<---7k4MG?C!FXXR1;#iZUYS2GYs&a zWXvjO>+Se0ARXk&4>uKe1It(|v%2ob2b}eDobph9vexmQ1hiHT{B4sZF=xg#>5 zdidZ&rp&HXIB*@+`@kimH{s*8nI`ic!hNLw`q?*q)?)XkV3Wq;$r^Ve=g?W3Y1Q2S zuLr_N^ldXKNG*(^uWbsFKvm>V%^{e#GF2Cv2lMZonW}Uz?V!l76Oe`9Ivall(Vwj} zp`uj}R3(>8klhqFwfG-b1v_0{_>WJdOE#}{PR}l{on3z?IBvqVeE1ZKRE`G@vNMQ7 zXdxKktwG}9BXbi_cS#603oni9!#q-W29zk*-vxTv-beD(f8q&}LQRxXt(90yx_cC_ zV*eUJ65fZ8o@IQoqF(Q~40$+)~}g>LrYj^ytFbcE0Cd4DHDF5PDd+xlU_iYFT_FnRjy8f`D|4qF9O zw6yM2_NG+$2B!?op=0u1O5k*)Xgch!cueHX*uO{)9`p?=M;eI@H*9UweIOn|Wn&LO z7gbWix0F)ATEF<~_tPd(eAzy2MQSe#;>GdS0Hk~tNyfQ3XL7K;L=~2L(b~G%nYTU_ z#S{%k62Gi7TPk1e-Oc{{G|A49XuWtA{{X#(U~HZ+;db^FLvq}Xc|Ifn1BeSAI=Eh5 z!go5kjiJqCY43=?*`tkf+_D3gwIoWre=!oB-J&sJ3QLIj{6(x!haZ|=3_Pgl7fS)A z>?#$K9>h*qUq@dR-N|UcZ9k`_wSlcGFCS`oYKa7KQ$4=V1)&a%Pw3f@s=~gy-_*r6 zRYkay8n5R8g-cr4hv1?P)M{8npzLU*U_|ofbD(1p8GidaV$Xd~e@D?C?jb>;jjHN) zm>|edpt&Ja-E?E{NFfq3hn64dVO&_5oy?vm1+J4jr)!jCnan638}DgJ(Ac>CPMij= zqU0u7pp||Y~l@`qFuS%y=!uc%xJ#lTA4+HHdA9bd@Kl=z zh8r>sSIb4O3BX_1xESq5nrVZ70l@`q=Qd!<85qv8zV>j`w`hTn8Lwlenh+GyQ>MaR z+=SNNa>!QZVcZsreRgiNfO(-a&UT^FZO5uob zg3y>TTn#|g24)~7#->b%-TnZNGse-KgAL6)Ngvm+46uPjt`|-2fe663k2GG7QLKif zUP>Hj4HQZ9wINn8A^h_mwU$l$TNi5Cqw`ZzsWn4bPqN10Y8N>FCu#_-96P-iFSk_F zIiLke(DS0OIk|@YDnetn#&KRrPX2l%jmJ+4#}>6`Z$ke#^9#vsP|HnR`T{h5|AA9u z6yICAnxyqsWqHX*XgDAvI}uwC<0B4W_=yy9hSEbHb%CK-XZu6y>)+ z=@e`=JJpmZeVdhhTpkvy${UiqoOskVgq7UVL7l7ez$9 zgyL?gAB`5&oCP;3j#UJ)i< zXgVO(=XfJ#x}NGr&~;@RSt{tia66rv_6`;(6J1zGw@1pE6O^DW|LnYiEFYUW{W(I> zNO@59f|=s{ZrecM+ym4>;bM#BnSboS-}pXlfN)+$&5B=S6=62>wcX6C@wLmR{g|^E4hgOL(f_lw!?PGzq%sw9Te*^*gZ>K)1`<5q00e+Jf*)HcZ}X?<15_D4Ny-yWhk9 zhq&CFo>N7wI45*fxeV&QJB=kBK@0ts5Syqr?^b0Yc}Y%4zxLOEu+UnPmy{uT@9WCE zy`zBm?J%z1=qbTH-%GWMkuBZY&$~{vh|xG!V^X*%2y z7fQK*L4(DzeeBZXQCzpjVR-f%qEX?`s!~AUe+g);UfD zAOB}kqJ&CPW?g@cG4Mb}jTS!}U)nyd*WzW|Fkp!uKh~r?ktSAS{h@*Q^yp+jtjie= zB^(zfl!rFJR^_`696hefjP7bQh#0p|PZ`-3c6G)F$mcfBn~(^BO>N`A=G+uKHZng;M8agDSSnlO>Y^p1N!Cl=V;g%`deH)@7%JB!q zzVSg^vCGyoz3@(yok}rn*qv!R;_HmQg=d&+FfEng9r|Ykxxs~Mi>V`Qm%d9+??a0* z*)i>64tqhm?p}s#ts;=ZWTT+>AILsSWFm9~8ydEi40!zI!(UY>umJ~bXav3f(TSfC4Z|Aj{=j)~pHGy#eq&D8N3Eya$K;EU? zY@U_hA>ZhB6lO7|+3V218&(6+ZnkF6#$B8X-%~3^hf47oFE?iT0Bu2~UQ4qoT!3D^<0>a%CM7c7dKE zi#Y^f#jj!|V%Qn` ztU+sVrYOEL>2#j9vf$&xg;nHVuQx523Ru@77`@Yb92%hrZ-&FH@FK}MDe1_~=Ahs! zIRl-xhS8lmCTjO=@$f4uI_MX(d~2+t|D9D1P?6vV!@P`XLA^<3IQBCYxAAUAbXBJ7 zN+X}hre5P+1OGfZ+=3b3>h@^YeCfMH zq^I8w9Mwa{3b<;u{HAHEaW7}Pasy50ddWvJO`(N~OhhLuqNHm1Cs}zJiyuJYW)&bC zA#qVJNF_}(t51nr6Z46Ai39kuy?iPTj;bs#bVk*| z_@UGO}ll=PlxmCjP&dzk1v3ZMk}S zoMD#?Hl=TrCEj?_HmaysuXA{c_Apj$N}m3+=mZ_4LT$K4XlI%bK_+83*ru5Bp<(DO z0L_pVPQ#wyJ=luXJ?2W%dbj@Tb%23!!P6bQ%lUkM&^0fcr4CUBP9aJ9Mj&LbD36@a z;B{PBWcu?e+#AAoM~M4jVU&3hs9oL`!kK1EId-q0IZ!Ox)-v&Q_0}Dserw+CQ`*~=AMcpXnXLEJFAS6hsR_+6D(@zl zTnr$(QLS@qjYXP6BRj_GBumxf7QUriq-|S6PzSUUFwborws3aaO5u2#0F{%~BQ`md zEhfvsD$k?wX66FfB&EkfeU&nbA6|rAhK9p?3M@(tCN2A=_Z4lXfQw(RK7PRf}p-9=FbgDT%n>pR1O^%_kQu72U)$YFH z759WfqsbU}{gqS1bRJt}s#uuPF51Ou9TDISC2k4UC1&I^KYb~mz0th&DfvLZTw zan_bGi*L15uRr9T=Ln^WNdXVYc^zb(Mu3Rt>o6v&$WgE zOO1x@anYn1Gukb2XUtD*PZOtJBh3vqL6;kqjQ{J=-hxu)RC*N!`sggd25m%vwUo+D zvRlAXkQ*be1YpH&G@XF7Nj_@+%gU5}5$In$?_7$H=f@G{t8?mWI;P`#1Cn?U%8VkK zNLYpW(A4pZq6)5XW0ZvcXkWdnCPmj&RQWLS1R#iAfm}IDfdM<3Q?Hn~p4;fquNN~@ zv8i8rnE(*xq6e!-g8}dx!5Qw3oi=thaV};po3r0Oi$F8xe*#=jQ&`m*%UA=THzv-W zfiRnCK8gHyYQuE3H!5COv-awU4{qQ`r!JCp3a&Dc9!uyHFCi?(OY`qV(0?$4dNFNP zFEKjXQ)_?^DOYS*UiHO@oNIxt_l_{-$ASCDRW5gxY4W{aLUPrbO3+;gUlg7i2_p@U zE1+^udo(N73Oc;{yrum6y`}>e|C1aCO~;Ch^x-THebO+YqLc|v`BF>^J>$v0;nb0a zg#z82;%#W>PPmpigc>(Ty1f>GKVpX)-0wZ9+5EXGonWQ*bc7mw&UQP0!pD|4zI8Y0 zE zDxE1s^>O&&QiiL{=U>+SEeeXe0t=>f4RrXP$1h zonbfB#BUsBkaJy*0&j709?#25ettArhB33!<6K<_Yvqp8{1yY?U4ofe$qFo+349D= zH|iZqs%lX{3TvCe1&<`-9?r&{M~8PXiW9rXk*@mf$dAuvKl*-<%9{*%5)`521(wcij<`dv5>8LV#M+nvtj4e9&ywG~}WoV!WU%*g!J>+N6 z|NEgno-p`5tI!v{i*hr?q1*NU^$OdWQzJ)DFWrMI9=Uz1JwIMg zi}d^TcO#4hYQB^mu+9GP^{!6=(r@TsYKYQTuF}X;lK?)SB3`HZkB@)|Sw;cId)KcE zmL903Ej2w)5eogz1=d)z>DzFLx$Bt4wE%D(vFN8c0Q- z?>TLH6@JgPDv40MPd;&t7+=lGs5H46Q0c$+#gA;BfoXCDmzf>}m8=~ej;-RQnIk13 zz0>X%iJKa~2e~q|1XV^v>l}`{EDSHec?-V^ zDI3HOLxjNSAHr4pD%@2^Wc~G6>=8z3`4n+Eka#PZ=6~Lik zB7;c>zZ@#C54^|KY}U{R&ZK3AV^lrqa{92TTWPB6-LTm$ys&7-f3NoDY1Y+*9(}R~ zU-j?p(WTY$QoAJ7-ZL@nN8LhHp3=DWR@Km5Z-*}r#gSup&L`|kwIOkq>Hhi~l%H2}bhsxAZ>HnAuudDqvQyEsY<#EkJH^4(|`w!-x_Z^w+pg9$5KY=LXAIm7xJr$1#ZjR0% zVKy;{##C{wlCzyW?-fqbUcz9sNJ9eZg5{Eh%#Hu6!X8nUdqfz{mz^J5rk%|}b)a4a z?CMdV34KS}9rMV5A}=SrJ~u1PPF1cqsRAMmd@>bkT@FT0;mYzug*6(Qo1rHCROG{PSM=%l)gUUSn-?z^x@Hx%N0eu z#!VoBG=KZl8@lni(*hVloGZ_<-k2tKA;Kp(CURVK{{b+KP=}6)v-%N+1~LP3=lVrv zRG+T5i(LJYmq)-zPra3Oa?nYcdBo~0yBk9vfmx-n8nD_jLrf?Noxu))?*H?`A#I?U z*V4ez)rpO!m@2`hXwpd`X{b#zLx^Z4Zp(2BhRrNZFK>=cY^J3!J%3+!ic&T_78~^( zX6I-raRJL;^9Wk+etw;Ev#{6uQr8eN7%VE z3!P^iAx@(!j8hY^9g||KjK~~w7_+$I+V9Ws8L(Tt@+cG0RoSf5vqUNbMP`97$a<2T3yy!lSj# zvI{Xh-}lg}MYb!|Ub)1ARaXAb%YwA77e-|S=)LQ4ym&`^HJn3ZLdiSp!%JW_o3PQJ zjUb3-U2!MY3kkA!g_{20_@4zo=RThv;;tm*#Vr8P94_vV+RM3naby0zXzHe3mF;d4 zxI4bnkY41sD};)TFkx^;MZhk%#%XMZ$Ss&phTyA^H2s3RZW;T)Ztx0eeAB2mpJoE2 zJ-_YE2&=HqAhad)&oOmI=aft_3D8RhQrd$1<#7f2Mi9)=8NzGXZ4ry0)YeT|$i5sE^C^f7BRo z=kCiG1-UpUX7nG0KQCwCd*EC%o7swuc>!CbItLVjs&!7DFFam@KmJ zT<@7Jy4FYyvsl0P<6JGV^j&Zat4InRm00s)M2A$e?qT_ClLA08zv^5qhTfft;Ej0Os=pPNKT0 z8xhJ>P-dz6ir<>oBVY;LT*Nw@T56DY#~IXHc$Ew_B|vn8*jD0RxM?dK%Tc}mMA1}| z{tG^hA2M)@gh*nl75I&lmUbl3tX}zCq=*ad1#1US6yNN#`qEG&W6HvBXdZOju~@^q zUiiEo%R6F3?Kg=>5RtxzDZ3Y#y%@k}BXk1z9Q=26dB_|tLjN1*T(F-|GS-g*ZCYNQ zFCqkaj6tn(bX`|~y0e@lby=?+E!}rEbHSAGftt7Q#UZzIPTIucc@$l0ZDz)~=P@W1 z1FL-dgM{gx+>p^M%w?q+`4N4~H_h5Gfn;cIZ;1;K`=ootz7OX(Y^}>RG??)ca0X4l zb?V+q<8-z+-csn8h`4u+;yHOW&5dCyVLuz{f(P+ygbdMuTXSV>y9UV;d?Nnds{gbrH4m5pK8}1yL)Wp7>Fg!6u*zEt z-!5PE$3GUCj6D2&6m%l=hdcoPKLEhKiD9{V8`Lm7{abgdGo4cDPOLGd?9st^l~OL% zKU~50S5yn-QKlYhB7T1Cn1IVfM$!%5TpAggrV8*^NHV15Y4fFpMZ04{SyEAs6{S() zFUZ9CWjqXzWJE?-mPsvn`WS_b$;y?q!iA{h;27Wt$>?eq@73Go*2paa$rtNaLUxHf za(BG+ler=^R&_TXl_^S)!?d{Y^9N-prZ)g!H;jSpvcp&mg`@-EM9O9c!>w4h(I=ca z2qhIEA^VZz3TxWFm(xJxmF)lc#ym*l$FM_OF7j>Nh(}=U0mNaoq21b0HL+`AHJp%@E7ENa^J*-m6vE z-+`#~43%tK&E!{HTcxpXAeTU6ba62o>yRh+>&xzMEMo&3>AaK(f0*C?x(#U^>V~-6 zw%r}1cnf#gD*-JzAPN`AUz=WPVvt1#c1JS=++&xt>yYseqxe>CX}N!<;Wuye>& zFRQpn>WGi`tzlW$nLeR&u|CK36!(PG9t|=C)*f4?) z)4**w3O~PttkDy}oYj)pLvfk_(>i zS>!Br4fVoTy&(# zB<8=>z;y zkz2=}PW6mEz>t=bKS%z*RH-Gl;nHpeAi7GY3G=B^`EyG{lWC_}p5&F;(Is=EMtvDO zCHhr8Lq)LAx7JNVonZo?-Bo7OM%u%<~I;uY$|gTee%4 z%k!|PMT_pc%hQNxBBT{a@jbc1>C+Pw_gK2fY6)?Wc8$cKe@ST}Qf^gr;Ur3DYZ0t0 z8c3qQpUdjL+sqAZ;p5Lh4of#2K(c#$tlSZQAJ~J;PZyPNJCiu(EC=s58kBD-8^^re zm1+hgy?OfPOJvCh-{>LryN$CtZocR{9tYS+nyUar_MZ2pQdaLWQexoE%v$!aPkHI8 zEV{i6ZgUbm>Tny|_k-I4$6*Rfi_lItyv6wkI7y-FrNpm= ztpTj_gxf>+dCU_+AO06+iL3S)XNnjia?~>_ib-x};e#46%&V!Q(K;`}$)GX?lzV}! zoRIn5g;1?s5fTb#Zk`*Cya$`<=m7b+r|-t}0IKq7YqIIrUBOs*S)YzD6k+J_l_kkY z!P(G-FbgJ^#nItTSl9qZ!Sgm*K>WXI@GpmtUjjsMz@it(+ZOC_U)Pg7G&oiNZHYa zzDtMund$d%QjNe84cMTG4$Y1UsU*m7^X@|+al1Ewbqh(}nIKcQkK+oU!WgGQF(5hTxZBn%Z zm6waP1Akfov~%qCegD$&2!U=Qj?Ars_G^z&PTq9Zn;?o1^hxV*8KH0=3kANXjQZhx zE$f^X`r8t_$>#!6!OP-Q)sW*n>

`@0WfJPTIVP>g&g$I9|aYgq~s3r5V4|FP$_% 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

&OkVI-}` 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 H_~k0wH%d$2zjoUg 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260501/20260501124002-Config.rsc b/MikroMaster/20260501/20260501124002-Config.rsc new file mode 100644 index 0000000..2210a9d --- /dev/null +++ b/MikroMaster/20260501/20260501124002-Config.rsc @@ -0,0 +1,5898 @@ +# 2026-05-01 12:40:02 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + station-roaming=enabled wds-default-bridge=Bridge-LAN wds-mode=\ + dynamic-mesh wireless-protocol=802.11 wmm-support=enabled wps-mode=\ + disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz security=security ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac security=security ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +add name=mVados options=HostName +add name=hostname-search-set options=HostName +/ip dns forwarders +add comment=BS dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +add comment=telegram disabled=yes dns-servers=10.30.30.81 name=\ + api.telegram.org verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \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\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\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/366/ab812be1\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 08:50:03 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\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 GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\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 ExitError;\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 Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\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# check and download required certificate\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 LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\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 \$LogPrint warning \$0 (\"This system has low free flash space but \ + \" . \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\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\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint info \$0 (\"There are \" . \$CertCount . \" Certificates \ + with CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\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 \$LogPrint 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# download and import certificate\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n \$LogPrint 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 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 \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$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 \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$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 \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\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# name a certificate by its common-name\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global LogPrint;\r\ + \n\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 \$LogPrint 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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\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 (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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 MiniDateTimeStamp do={\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 :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\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={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {: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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\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 :global LogPrint;\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 \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint 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 \$LogPrint 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 \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint 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 \$LogPrint 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 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 [ :len\ + \_\$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 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 LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 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: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: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 LogPrint;\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 \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\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 \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', 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: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: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:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\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 \$LogPrint 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: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: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: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:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\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:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\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 #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\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 :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\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 \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\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 ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\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 \"Setup Global Environment for scripts\";\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#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\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# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\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} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$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:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false;\r\ + \n:local scriptVersion \"26.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ + ________\\n\" . \$mailBodyCopyright);\r\ + \n :set mailStep1Body (\$mailStep1Body . \"\\n[*** TEST START ***]\\n\\\ + \$DeviceInfo: \" . [ \$DeviceInfo ] . \"\\n[*** TEST END ***]\\n\");\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ + \n\r\ + \n :local FwAddrLists {\r\ + \n \"allow\"={\r\ + \n { url=(\$FwAddrListsUrl . \"allow\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n \"block\"={\r\ + \n { url=(\$FwAddrListsUrl . \"block\");\r\ + \n cert=\"ISRG Root X2\" };\r\ + \n# { url=\"https://raw.githubusercontent.com/stamparm/ipsum/refs/hea\ + ds/master/levels/4.txt\";\r\ + \n# # higher level (decrease the numerical value) for more addresses, \ + and vice versa\r\ + \n# cert=\"ISRG Root X1\" };\r\ + \n# { url=\"https://www.dshield.org/block.txt\"; cidr=\"/24\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://lists.blocklist.de/lists/strongips.txt\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v4.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v6.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n };\r\ + \n# \"mikrotik\"={\r\ + \n# { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ + \n# cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n# };\r\ + \n \"FuckRKN\"={\r\ + \n { url=(\$FwAddrListsUrl . \"FuckRKN\");\r\ + \n cert=\"ISRG Root X2\"; timeout=1w };\r\ + \n };\r\ + \n };\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHuge;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ + \n message=(\"\\\$LogPrint: The message is already in log, scripting \ + subsystem may have crashed before!\") ] ] > 0) do={\r\ + \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ + , possibly caused by us. Delaying!\");\r\ + \n :delay 5m;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n\r\ + \n :foreach FwListName,FwList in=\$FwAddrLists do={\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n\r\ + \n :foreach List in=\$FwList do={\r\ + \n :local CheckCertificate false;\r\ + \n :local Data false;\r\ + \n :local TimeOut [ \$EitherOr [ :totime (\$List->\"timeout\") ] \$Fw\ + AddrListTimeOut ];\r\ + \n\r\ + \n :if ([ :len (\$List->\"cert\") ] > 0) do={\r\ + \n :set CheckCertificate true;\r\ + \n :if ([ \$CertificateAvailable (\$List->\"cert\") \"fetch\" ] = f\ + alse) do={\r\ + \n :log warning (\$ScriptName . \" Downloading required certifica\ + te (\" . \$FwListName . \\\r\ + \n \" / \" . \$List->\"url\" . \") failed, trying anyway.\");\ + \r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHuge \$ScriptName (\$List->\"url\")\ + \_\$CheckCertificate ] ];\r\ + \n :if (\$Data = false) do={\r\ + \n :if (\$I < 5) do={\r\ + \n :log debug (\$ScriptName . \" Failed downloading for list \ + '\" . \$FwListName . \\\r\ + \n \"', \" . \$I . \". try from: \" . \$List->\"url\");\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" \ + . \$FwListName . \\\r\ + \n \"' from: \" . \$List->\"url\");\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :len \$Data ] 1024 ] . \\\r\ + \n \"B for list '\" . \$FwListName . \"' from: \" . \$List->\"u\ + rl\");\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Li\ + ne ] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"\ + cidr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\ + \\.[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$C\ + IDR ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3\ + })\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \ + \"/\" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\")\ + \_do={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n } on-error={:log error (\$ScriptName . \" Failed parsing address\ + : \" . \$Line->0);}\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName .\".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store=fetch,dns crl-download=yes crl-use=yes +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set disable-ipv6=yes max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add comment=WAN interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=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.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.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.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=HostName \ + dhcp-option-set=domain-search-set dns-server=10.30.30.81 domain=WORKGROUP \ + gateway=10.30.30.81 netmask=24 ntp-server=10.30.30.81,10.30.30.10 \ + wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=git.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=ros.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" 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=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid disabled=yes +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Telegram dst-address=\ + !10.30.30.0/24 dst-address-list=Telegram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=dst-nat chain=dstnat comment=npm disabled=yes dst-port=81 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes dst-port=80 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=Telegram \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +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 +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" interval=1w \ + name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Setup Global Environment for scripts" 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="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260501/20260501124002-Diff-Config.rsc b/MikroMaster/history/20260501/20260501124002-Diff-Config.rsc new file mode 100644 index 0000000..52bffa9 --- /dev/null +++ b/MikroMaster/history/20260501/20260501124002-Diff-Config.rsc @@ -0,0 +1,4 @@ +4679c4679 +< set builtin-trust-store=fetch,dns crl-download=yes crl-use=yes +--- +> set crl-download=yes crl-store=system crl-use=yes -- 2.52.0