From 2eae9dead7a76c8dbbcd9bdb023a379b3c9401bc Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 01:40:33 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 01:40:33. --- .../20260504/20260504014002-Binary.backup | Bin 0 -> 266741 bytes .../20260504/20260504014002-Config.rsc | 4403 +++++++++++++++++ .../20260504/20260504014002-Diff-Config.rsc | 349 ++ 3 files changed, 4752 insertions(+) create mode 100644 MikroMaster/20260504/20260504014002-Binary.backup create mode 100644 MikroMaster/20260504/20260504014002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504014002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504014002-Binary.backup b/MikroMaster/20260504/20260504014002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..d70da4319709dbb304c60a15c4f00860ca58ff8f GIT binary patch literal 266741 zcmV+aKLEh*sF8E^5d;8Jt7D30EXK()9qW=6qDm_O000O80004Z`T(2&Lm%jBlc{0< z$e=CbQGN4ugSQmqkF4LGWa_p5GRIIRo2QyU*szrftgX!!;NL5+1;23eKnOG@MNSKz$Iu%* z-we91H<;U3<%f2)YmzIcUGkO+B7M2%OqI-9qoVAozgW-I8{zVeV=FW-W%YV<5wl$-rdQ8njzG4 z`wdc*;P8Bf-)0>=q_JBj->QqZxw#$yH5eFauP_w?fwxQ{r3vHJ3#}!@6}<0I;ZC-x z6-#oF-s(Po?vQ@{bXg+<%CYv|YUDB(`+J(MPG|U>XhK6; z*9p>_(5%((W@_ZlV^LzCUwtvj3-PRr_yN>#g7S?c#rH;o)DhV(ClBo}{!6$ds@!DV z0e$#R!?sEL5F{!at~_^;5rBiPSV45Gt!+Y#{T(I_JJ?zbG$M0$$s&)9a*U8YG05tX zMtH0C%i1ySgr+?o)_PmeE9Bv>ZW8spbdvL)qz%woG`NQ9EGF4~3{(lc<4gbGYULIm zxKI}NnH|_`=+Uo{(6eG8jk~=!j+zBtdgZj~TO!J|E z$X$(4>pi^XF9{F^v*@sg2MI!CL%rfV4B!t3=_>cHv)(4X*P&zvr7U3VOF2=wyj*Z; ztVjR8E5XJ!gVvtD5|1`PC(tD20;6~mNsmZD$5VDlBv;Yyex#w9!ipBr2@}h&;!yka z0_=Da3DHYJlVN$tQRYk1Q_lswyq6cbUk&YUvoY%Bw);Vxt+GhME1xwC(*Kqax^d6DRq*;o)`Ds{yyksGfl}L`%bIJJJ5`NUED0o z!8EYV`!BOg!=8uH4!4-?7*GNnD589uwvfaB!p}yugg#{z-GqAxpR6JPv0bvrt|jIJ zfV?MN6CD5xDXfZPoq0rC47hFVavX2toiu~4?uGmBtvUk17Gx`ZD#4DNVOI>yxb#0) zW_LKu;`Y~rO+AjksfT&z&=BrGvv^~p`S||Klj|dtlIO{@j7FD3BQ3%}&(|3cg2YR! z|JTLO)vdw~KVY$I4M{0MN_NiVpVl67pV___e#OlbHU8V$OKX1Wa&jpZ3U!5q>BXWHxcfxqVRvtvD1e8;V{a8B8tIrWU-tCdM(9|Q5;D*bF zHrXAJW&{!s`?2jzqc{jwjV5N;B^RmVj017DCk!z%KBQKd9=P@7COICUfn}(5ur3D* zsZ0hl0{*Hzg9U4zys?`;O9qcf7@;PX@|f*L!6PoJ-vkd<69Ks?kGDKKy3a*l22y^K zrF{@>Z#B(J{3)p?f)Autu3y1|a_J8rLm2OoNArwo{^kOSN~{-o%Sn^;HBY)iHmYUa zL;OkZ7kduuYd6Wl2_EwHy2bA4b}@1H4|pbm&*=y5u1g=ct8#rJnQ-D31cXEyk7#;L z@BwWXbh7DluIm982ia+~Bv_D1KYlesk*G{E1#ykV>Z0FaIjozF3Yhgl;e+VCe^($v z>7J(EIUJONiglYyt&?^Q^2lw|ZPXd*&oj9d;@!Qs`*CgM-z*C#(*G5#B-hK4f5rDb5naDL<{GK5|RBo3(nY}8Ab$1VL zUYf|oUPfdDUrOC+SEQGrJ-N+hOQFLO+cV2i>f)#Y{x@4+Auzm++9)Mg#x6w-oAz?d z%t!V_DeZ>Td*0P1z1FI(JXNo%a;8;hGd-Lrvj^IODbkZ)427!xgP>Qw_}QCQ%DO*j zv#WsBNDgny_a=mdVE20x8IYXDs4B)A`k_F>1fv$<_I2bp#oVf!y`Y^hnUFe zY4A_uBZSiC;4vj}bRK^oEVh-Y=IVtW+hRam&k%#wTtsDUQ0&_KYonisUyovXvYH2c zvEkizM#g8A-K&y8JB#(3VaQZ94FxlKo5)sE$B4H$oFUH3eShu&-Xf@E?@iwFc4Z^q z7wqixY%7&zHBnV#3aLWg!3n$HiAv!ygnK3X955GE`S{*Ao+-19T^J%;nGq*wUH`im z#XVkONp+6M=7VT8X2(86U0LjB%T4=xOXYpXmps7;(OG6!)nA5dE~?M$e496Pj`@hR zjshv>ah87h>2LWB(3%yTt&aN^Dg!(>k8Y9ceZrr^!O7V|nuV+~`Yn1-r%$;}=!BGS zbY+{Bt5lYo({mEy@pPIZoG)AQKXKY7@kkTvnesBoi4Abk+GPCDEGc}nCa1Q?OYV=> z(RF`iXpf(t94*;%^q?3yd8K3_X8=?cPJWS^hfpV=_zbP6H0-4i7#0aZXkd|2MVZo% z?=#zah{nveh5uE#sCu4<>5hcH0bkq>7>#;L>KL@KVI*b`;s76t*wq=-o1#&DnZ|k{ zXo)ZK)0UPk^hTe#cE4|z6Ft-W%F+gPKumdN%`ykTU&J?(WElL8z%%Y}_fp+a z)7`m0J5qpt<&qGFc9AyItrUujvsVq@F5c+27W*Yh{mbwGeGkPrNFEb5J&s<;m(GIW zkiXYrKKuuXjm#x{iq&g%7bccHknh zC)BV2XX~lxb*W&RD9nP--zA0kIo+4UgUO&Yzef+8f2fzQcY^viCK>MXLWEAb+?^bV zaDf^>fA{B9i?jz4DXFdIGEOa_O3{j?W}y65$%CCOK;1EEmOH#_e;4%Um`#A zQXf}%h;8l{g}vP@8QJ9MF$981ZUnGq(KWks$cr;jlI zmXEoI{epqjRm`DJhR_Xspu@dQgxN28Xu^o%DTBP@T*MAWB4YHe7o-wOL?C6dF;+=5 zYI2cQa)xvEME>@zLr1J7Ukgs{apMueACuw-+Z0bcY$Kx)_Ql-JKFbGyMKQ%g%u5f4 zIvG2U$P`k_D9hrlY7^~0iO>K@IFIIGu2&Tu41fT=d1a2JByEui$j=DIG1P0o?Ojc? zIq&%B0ffonu*i#d4>43}L;V(auPt}-U{inl*aZCDP!;YhD1{CpN6&{Pb|*_Y@D&VD zJgSs00z!}hZd1GVSSANN;o)yB*>#ldg1;sI18q!bKt#L4-qP1kRn^hU7Zlzw33}!{ zJ|<(eezq7tz`cx_d@Z~4ilu}Ug@F1agEr8qlMZx6z>b*W40_x!MFRgAF5d~SwTF%e z-x%T<(jM(@cJCZJhF+2j+VX!4H;d0gKmqmY|BGY(#f0pbxeZq3*%2FS7uSQh&CKyz zirf&sv{sA3#5GyFV)ie>$!$zYDNw_P49!PjAFwD78a0?5;70nkGRwo=8%PB52b0(( zWLcG9!qRhPsx~?RH=@@q{UlWgq#OIEw5?{9K{puHLC1Mkk5Hf7_I!-*N z%;QBE#5HBtdpr}{*r1Av;pNWQ%S&gP{1L!@a@}~_XWDSwm@GaX#`s!ShFWHGAC=Q%_MfH7C0nsLG{j;p^rT<&T z(T0Xa3MR#TbGI3oA?F<=1Y++2tfZgyYF4=mj))MU2mdd~YQ0Lo`;0xXZecmfgGHM1 z04%+;YUZ7dW7<(`l8nR4?zyWBtbJ#)ZQ7P(m7e{viQvQ7b%R^dI5X&|@3fJ*biK0% zh7yU+aBfbuMhu{US3Dy@=5R=_kkLu*mK}LpT>iwZPJ}rcWcWvHdrS~yN-mQPK^vA4 z#CqX^9iQCm8dEXnwk8lR!sAsnW~iO=VkZBa0%(iz(}Pf9wk=?iSGdA>1K@$310mtQ zy@dg}OTysra^;cV)!BQ4veFr6PO?g6|7r4EtS>)f%DWj_tgFQO(ha$ynd^#xi~Tmo z&~^5LidF&Qs~8!mBCqu6o*HLlxV3C9(tAGl!h|rpQ2pkEM&`(s@n1R7(7QYD)3YE= zh$Ozx`oJ#v##H?N=Yp(w;j8O^hm#DyEsKUXd1Wfc_qiHe`Gq#5>U*_L}qEJ7&ZDj>2?Ee z1Czm#6`MrEIo>+&IB&J3oU2w$?YdVh`q5(PRfFPW=6-p7<+3P&j^?A2r*Rcwn7yDo z15}6KcLn*TIykkl&IBlmY$z=n~>pr2CG z74gIt;B4qv)AjD!pcBaOOV`Lg8x>BrzO^{USD$HmKi6pgpW32ESjAk0R4SQvp(7S~ zk19(z_s^$GltUj0IV-M>wbBP$337W*rFa@<$mL4m$X8I*-RK~_y4Ao+HJT9Y(AtYL zwOA+fY9+Vri$Zw9+lRogiiN_bD<@c&434v^c4`n4^@HbCtqYV&m<2!>e(3`} zA3>J_R&BHV1%hNKnwWwJpK!|iIM~|1^X@@nI*v|`1^`(V9!I!J1O#z=mP?v+dC;W0 ziHn(0y&GbOcxn5Nwt0UL$L5`e<5Y5Mf48Qn@*K*fJuH&4Op~8R#t}T z=l973QGYr5BkS(Hh_&z!FeYAli9<_WwzG@$^9Mnfl5DjV3tjrT{@mNn;Bg_9`-^ut zQgdVjNuTqS%tlt_@)5v79M910IPu-zXSa{@=ftLIZ)q|rHd_w4b-p@t(#+lS*8dC8 zAAYFjs7DC+mqm5-%k7U6Wp}^XLZv>QpagA@!DDk%(jpqAQ^$;P^i&@;dW?V+BVi!w zWc#n}p2!FZ#vi$9X{fT0hE=$L-RYk90MJ4EE<}ZYE)(5c3QK#eqK#dl(x?EMF1cX|5f-Ql73dB|&Lo8SE|3pbuQmQVCK;oH@S6yf`Z!Db%oXyz*ZO3|7 zs{@IOskbs`3WJTiDwVu!h-xB)R{AqxH00=@XG8j4b=f8j#9h_+~IyRfSO>wI}n z$je)v^kDyLk(n?A?03&8>OQ?T6iR!cqVb}~@sT%Dd8JTY^c-xg3&?Vr} zMul>Oz=_o3h6>x->u!F4;Tomv^KZquEG!LS79}#ubNyA|@N)WxXOpjs((} z!PG&AxRNQz!~uhLXXcq&*bi7#jo&;|hRQ_E36eMfNK;RFBU@OOT&Iu|jx3YG#dJ_6 zs|JmNV*1`iN;mF416zCdJO98onS_FB<7Kt+8oX~ASc6XGD zuudH2pdg;`BBiTmujOGi4l zAoS3<(R}eLgay1zeeiZy5YHg_l|L^>xMjHjdwiDmuOMo>qB~Cq+U9Eq z%UGqr-;nnro$3-=E0JSN!q2zF15FoT0q4@rB!9@``Ry)1tLYdlo8gU!12aB5&@DUV zd9f? ztGqGfvn8nsIHjJoCu2dOFc2QT*i66YB`nPU%wSoTf_4wkPPVOF|0#g(cfcJlNGEg|2I_e8vcaajoJ z*8^D9D4TIcjg-D~R$LQ_OD(36-T*xa2Y};oSrtvJtl#wEg8#^!Z?+N)nC6-MNRRu~ z)ddJ0H7r}+QmdgNWc$rDNvA+Hf=!?c45GUNLTm|g<)4F;l}?3EnZOmg^LtA3%@_4r zn9WTi3&q<{W>LCQLwY%JWK){ExhF#R5_8S=SEeN)?)y^ zD-DWx|4tr`98j7bLeu0s9a3Q7m!;N#_@}( zIc_>4r@@#_XjhfUV#6}rJyW(JOcwroT(P))sfmt_Vl(aPu}@jU7-a#q?u&VD|G2DE z^E9+;6jUHP>6K~wNi^eOMyrE_#3#FF+vCR)-LGg_TxT@1G% zJKhf0`(-(_Q#XX4aOxDgJVdA24o$&F;2zbiKTnIy1zS=hs2fj3lVVbO55l_*(6-Ng&mBz}VwKAXmwwqenfg8gmvm)TRnA;YVCQ&aH+@s_yx-Q&LROemYW0IIyF&W&9cF16$FeU_B4n@}YH;xV?#!mV7q(fsg_ znz^Y7YT_328qILM_6^8saOTQ*R`5y7&S?G|lOgJhU3sJ0W95QY;+1=KF=zv3CAV89e1G zzS640L{+sk{oV~K;JnOoRRe!E`J8yYNN7M6^~WvtDpNs0;0(|)`;=Tjq(^v5mdjLk zK7o0ZnIgKT2+GTVLaJ1WoTe5tD-2MCmO(rXOlGd5)_D0^->#@HJx5y-=;aJ>@Lep_ z8trjClEF#5cKWZsrsnfWZu~c1f9N#Qe{kwn{-=YZxzxkfz;v0J@%_&E!#GCi*J$OU zA_hZW7iY&53+z)(Y{%n7)hiAS5l=cIZP!K*<*=fZLry1Vr$-ELRZPN!gJ9?T-Lioc&GC6r)<-oM$exRdo^Yl>R%9A+;F+MQ3(LLv8kN6!UVFaRv}q1)w7 zX>4aXYBL7*e!rPlOVgM@9YS|f5lPr4Fsl^S=M@V|z>wtCsX_(<-?I&#G5^?UChzV0 z10I)uJrn3<-dhR2^Pv$u+70JF^xzI*NYq7Z$8TIS(buUn!o6GG#8QD-awvi>d~
#Cy+}E} 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 TkI;+~ZCTUt{3c>rp27ttU+_lJ literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504014002-Config.rsc b/MikroMaster/20260504/20260504014002-Config.rsc new file mode 100644 index 0000000..17c3f1f --- /dev/null +++ b/MikroMaster/20260504/20260504014002-Config.rsc @@ -0,0 +1,4403 @@ +# 2026-05-04 01:40:03 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="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 comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/368/b69ddb1c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:35:02 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# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# download and import certificate\r\ + \n# Usage: \$CertificateDownload \"Common Name\"\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl 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 :log warning (\$0 . \" Failed downloading certificate with CommonN\ + ame '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# name a certificate by its common-name\r\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set 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="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=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="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 :local FwAddrListsIndexUrl (\$FwAddrListsUrl . \"index\");\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 ] - 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 :local FwAddrListsIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$FwAddrListsIndex = false) do={\r\ + \n :set FwAddrListsIndex [ :tolf [ \$FetchHuge \$ScriptName \$FwAddrL\ + istsIndexUrl false ] ];\r\ + \n :if (\$FwAddrListsIndex = false && \$I < 5) do={\r\ + \n :log debug (\$ScriptName . \" Failed downloading address-list in\ + dex, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$FwAddrListsIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$FwAddrListsIndexUrl);\r\ + \n :set FwAddrListsIndex \"\";\r\ + \n }\r\ + \n\r\ + \n :foreach FwListFile in=[ :deserialize \$FwAddrListsIndex delimiter=\"\ + \\n\" from=dsv options=dsv.plain ] do={\r\ + \n :local FwListName (\$FwListFile->0);\r\ + \n :local Delim [ \$FindDelim \$FwListName ];\r\ + \n :if (\$Delim = 0) do={ :set FwListName \"\"; };\r\ + \n :if ([ :len \$FwListName ] > 0) do={ :set FwListName [ :pick \$FwLis\ + tName 0 \$Delim ]; }\r\ + \n\r\ + \n :local FwListUrl (\$FwAddrListsUrl . \$FwListName);\r\ + \n :if ([ :len \$FwListName ] > 0) 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 :local Data false;\r\ + \n :local TimeOut \$FwAddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHuge \$ScriptName \$FwListUrl false ]\ + \_];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$FwListName . \"', \" . \$I . \". try from: \" . \$FwListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$FwListName . \"' from: \" . \$FwListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$FwListName . \"' from: \" \ + . \$FwListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Delim [ \$FindDelim \$Line ];\r\ + \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ + \n :if ([ :len \$Line ] = 0) do={ :set Line \"#\"; }\r\ + \n :if ([ :pick \$Line 0 1 ] != \"#\") do={\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address [ :pick \$Line 0 [ \$FindDelim \$Line ] ];\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\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,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ + \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ + { :set (\$IPv6Addresses->\$Branch) ({}) };\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 }\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" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system 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="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="Windows Update script" disabled=yes 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" disabled=yes 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" disabled=yes 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" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 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/20260504/20260504014002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504014002-Diff-Config.rsc new file mode 100644 index 0000000..34f9731 --- /dev/null +++ b/MikroMaster/history/20260504/20260504014002-Diff-Config.rsc @@ -0,0 +1,349 @@ +2737,2749d2736 +< \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ +< \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ +< ertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ +< n-name=\"DigiCert Assured ID Root G3\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ +< \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ +< ertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ +< n-name=\"DigiCert Assured ID Root G3\" ];\r\ +2779,2799d2765 +< \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ +< \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ +< ertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ +< mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ +< \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ +< ertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ +< on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ +< \n\r\ +< \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ +< \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ +< ertName);\r\ +< \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ +< \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ +< ame=\"DigiCert Trusted Root G4\" ];\r\ +< \n\r\ +2938,2939c2904 +< add comment="download, import and update firewall address-lists" \ +< dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ +--- +> add dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ +2941,3239c2906 +< 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 :local FwAddrListsIndexUrl (\$FwAddrListsUrl . \"index\");\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 ] - 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 :local FwAddrListsIndex false;\r\ +< \n\r\ +< \n :for I from=1 to=5 do={\r\ +< \n :if (\$FwAddrListsIndex = false) do={\r\ +< \n :set FwAddrListsIndex [ :tolf [ \$FetchHuge \$ScriptName \$FwAddrL\ +< istsIndexUrl false ] ];\r\ +< \n :if (\$FwAddrListsIndex = false && \$I < 5) do={\r\ +< \n :log debug (\$ScriptName . \" Failed downloading address-list in\ +< dex, \" . \$I . \". try from: \" . \$FwAddrListsIndexUrl);\r\ +< \n :delay ((\$I * \$I) . \"s\");\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n :if (\$FwAddrListsIndex = false) do={\r\ +< \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ +< x from: \" . \$FwAddrListsIndexUrl);\r\ +< \n :set FwAddrListsIndex \"\";\r\ +< \n }\r\ +< \n\r\ +< \n :foreach FwListFile in=[ :deserialize \$FwAddrListsIndex delimiter=\"\ +< \\n\" from=dsv options=dsv.plain ] do={\r\ +< \n :local FwListName (\$FwListFile->0);\r\ +< \n :local Delim [ \$FindDelim \$FwListName ];\r\ +< \n :if (\$Delim = 0) do={ :set FwListName \"\"; };\r\ +< \n :if ([ :len \$FwListName ] > 0) do={ :set FwListName [ :pick \$FwLis\ +< tName 0 \$Delim ]; }\r\ +< \n\r\ +< \n :local FwListUrl (\$FwAddrListsUrl . \$FwListName);\r\ +< \n :if ([ :len \$FwListName ] > 0) 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 :local Data false;\r\ +< \n :local TimeOut \$FwAddrListTimeOut;\r\ +< \n\r\ +< \n :for I from=1 to=5 do={\r\ +< \n :if (\$Data = false) do={\r\ +< \n :set Data [ :tolf [ \$FetchHuge \$ScriptName \$FwListUrl false ]\ +< \_];\r\ +< \n :if (\$Data = false && \$I < 5) do={\r\ +< \n :log warning (\$ScriptName . \" Failed downloading for list '\ +< \" . \$FwListName . \"', \" . \$I . \". try from: \" . \$FwListUrl);\r\ +< \n :delay ((\$I * \$I) . \"s\");\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :if (\$Data = false) do={\r\ +< \n :set Data \"\";\r\ +< \n :set Failure true;\r\ +< \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ +< \$FwListName . \"' from: \" . \$FwListUrl);\r\ +< \n } else={\r\ +< \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ +< \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$FwListName . \"' from: \" \ +< . \$FwListUrl);\r\ +< \n }\r\ +< \n\r\ +< \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ +< tions=dsv.plain ] do={\r\ +< \n :set Line (\$Line->0);\r\ +< \n :local Delim [ \$FindDelim \$Line ];\r\ +< \n :if (\$Delim = 0) do={ :set Line \"\"; };\r\ +< \n :if ([ :len \$Line ] = 0) do={ :set Line \"#\"; }\r\ +< \n :if ([ :pick \$Line 0 1 ] != \"#\") do={\r\ +< \n :local Address;\r\ +< \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ +< \_] - 1) ] = \"}\") do={\r\ +< \n :do {\r\ +< \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ +< dr\") ];\r\ +< \n } on-error={ }\r\ +< \n } else={\r\ +< \n :set Address [ :pick \$Line 0 [ \$FindDelim \$Line ] ];\r\ +< \n }\r\ +< \n :do {\r\ +< \n :local Branch;\r\ +< \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ +< .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ +< \n :local Net \$Address;\r\ +< \n :local CIDR 32;\r\ +< \n :local Slash [ :find \$Address \"/\" ];\r\ +< \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ +< \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ +< \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ +< \_];\r\ +< \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ +< R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ +< \n }\r\ +< \n :set Branch [ \$GetBranch \$Address ];\r\ +< \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ +< { :set (\$IPv4Addresses->\$Branch) ({}) };\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 :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ +< { :set (\$IPv6Addresses->\$Branch) ({}) };\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,}\\\$\") d\ +< o={\r\ +< \n :set Branch [ \$GetBranch \$Address ];\r\ +< \n :if ([ :typeof (\$IPv4Addresses->\$Branch) ] != \"array\") do=\ +< { :set (\$IPv4Addresses->\$Branch) ({}) };\r\ +< \n :if ([ :typeof (\$IPv6Addresses->\$Branch) ] != \"array\") do=\ +< { :set (\$IPv6Addresses->\$Branch) ({}) };\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 }\r\ +< \n} do={\r\ +< \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ +< \n}\r\ +--- +> source="#!rsc by Vados\ +4302c3969,3971 +< set graphs-plain=no rest-plain=no webfig-plain=no +--- +> 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 -- 2.52.0