new contribution from oxeo for onionbalance
124
graphs/.$moneroSSO.drawio.bkp
Normal file
|
@ -0,0 +1,124 @@
|
|||
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/25.0.2 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="25.0.2">
|
||||
<diagram name="Page-1" id="qvUqTVi_m56ZG5ivpzJK">
|
||||
<mxGraphModel dx="1193" dy="736" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-1" target="46JsVXyUa3pXCljOW_3D-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-1" value="Monero Daemon" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="550" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-2" target="46JsVXyUa3pXCljOW_3D-1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-2" target="46JsVXyUa3pXCljOW_3D-13">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-2" target="46JsVXyUa3pXCljOW_3D-27">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-2" value="Monero RPC" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="480" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-3" value="Local<br>Monero Blockchain" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="620" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-10" target="46JsVXyUa3pXCljOW_3D-16">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-18" value="2) if new transaction<div>that is more than 0.01 XMR:</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-17">
|
||||
<mxGeometry x="-0.6173" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="13" y="-1" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-10" value="MoneroSSO.py" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="374" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=-0.075;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-10" target="46JsVXyUa3pXCljOW_3D-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-15" value="1) monitors incoming monero transactions <br>that are more than 0.01 XMR" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-12">
|
||||
<mxGeometry x="-0.2108" y="1" relative="1" as="geometry">
|
||||
<mxPoint x="-1" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-13" value="Local Monero<div>Wallet keys</div>" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="180" y="480" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-16" value="txids.csv:<br>(txid (32chars), sxclink1, sxclink2, sxclink3, sxclink4, sxclink5, sxclink6, sxclink7)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#008a00;fontColor=#ffffff;strokeColor=#005700;" vertex="1" parent="1">
|
||||
<mxGeometry x="783" y="374" width="436" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-19" target="46JsVXyUa3pXCljOW_3D-16">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="647" y="394" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-22" value="4) one-time invite links created<br>and stored into txids.csv" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-21">
|
||||
<mxGeometry x="-0.8538" y="2" relative="1" as="geometry">
|
||||
<mxPoint x="52" y="17" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-19" value="(complex part) 3)<br>Query the SimpleX bot to create a one-time invite links to the chatrooms it's configured for" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" vertex="1" parent="1">
|
||||
<mxGeometry x="582" y="243" width="131" height="94" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.305;entryY=1.005;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-10" target="46JsVXyUa3pXCljOW_3D-19">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="622" y="394" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-23" target="46JsVXyUa3pXCljOW_3D-24">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-23" target="46JsVXyUa3pXCljOW_3D-27">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-23" value="index.php displays a search bar that only accepts 32 length [a-zA-Z0-9] characters" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="458" width="161" height="67" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-24" value="upon successful searches, it either displays 0 results found (and the tutorial on how to use moneroSSO)<br>or it displays 1 result found with the one-time simplex invite links for the user" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" vertex="1" parent="1">
|
||||
<mxGeometry x="879" y="453.5" width="255" height="76" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.478;entryY=-0.003;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-16" target="46JsVXyUa3pXCljOW_3D-24">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-27" value="Displays the main address to recieve monero to, with the minimum fee to enter" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" vertex="1" parent="1">
|
||||
<mxGeometry x="695" y="567" width="131" height="65" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-31" target="46JsVXyUa3pXCljOW_3D-24">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-38" value="5) after 20 minutes, Bob queries index.php<br>with his transaction id (txid) that only he can know<div>since monero is an opaque blockchain<br>to retrieve the simplex invite links</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-37">
|
||||
<mxGeometry x="0.5817" y="1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-31" target="46JsVXyUa3pXCljOW_3D-39">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-31" value="Bob" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="745.5" y="762" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-33" target="46JsVXyUa3pXCljOW_3D-27">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-36" value="0) sends payment" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-35">
|
||||
<mxGeometry x="-0.0395" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-33" value="Monero wallet" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="705.5" y="708" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-39" value="6) Bob uses the simplex links to join the chatrooms" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" vertex="1" parent="1">
|
||||
<mxGeometry x="556" y="815" width="154" height="62" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
124
graphs/moneroSSO.drawio
Normal file
|
@ -0,0 +1,124 @@
|
|||
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/25.0.2 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="25.0.2">
|
||||
<diagram name="Page-1" id="qvUqTVi_m56ZG5ivpzJK">
|
||||
<mxGraphModel dx="1193" dy="736" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-1" target="46JsVXyUa3pXCljOW_3D-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-1" value="Monero Daemon" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="550" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-2" target="46JsVXyUa3pXCljOW_3D-1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-2" target="46JsVXyUa3pXCljOW_3D-13">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-2" target="46JsVXyUa3pXCljOW_3D-27">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-2" value="Monero RPC" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="480" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-3" value="Local<br>Monero Blockchain" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="620" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-10" target="46JsVXyUa3pXCljOW_3D-16">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-18" value="2) if new transaction<div>that is more than 0.01 XMR:</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-17">
|
||||
<mxGeometry x="-0.6173" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="13" y="-1" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-10" value="MoneroSSO.py" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="374" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=-0.075;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-10" target="46JsVXyUa3pXCljOW_3D-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-15" value="1) monitors incoming monero transactions <br>that are more than 0.01 XMR" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-12">
|
||||
<mxGeometry x="-0.2108" y="1" relative="1" as="geometry">
|
||||
<mxPoint x="-1" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-13" value="Local Monero<div>Wallet keys</div>" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="180" y="480" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-16" value="txids.csv:<br>(txid (32chars), sxclink1, sxclink2, sxclink3, sxclink4, sxclink5, sxclink6, sxclink7)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#008a00;fontColor=#ffffff;strokeColor=#005700;" vertex="1" parent="1">
|
||||
<mxGeometry x="783" y="374" width="436" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-19" target="46JsVXyUa3pXCljOW_3D-16">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="647" y="394" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-22" value="4) one-time invite links created<br>and stored into txids.csv" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-21">
|
||||
<mxGeometry x="-0.8538" y="2" relative="1" as="geometry">
|
||||
<mxPoint x="52" y="17" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-19" value="(complex part) 3)<br>Query the SimpleX bot to create a one-time invite links to the chatrooms it's configured for" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" vertex="1" parent="1">
|
||||
<mxGeometry x="582" y="243" width="131" height="94" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.305;entryY=1.005;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-10" target="46JsVXyUa3pXCljOW_3D-19">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="622" y="394" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-23" target="46JsVXyUa3pXCljOW_3D-24">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-23" target="46JsVXyUa3pXCljOW_3D-27">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-23" value="index.php displays a search bar that only accepts 32 length [a-zA-Z0-9] characters" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="458" width="161" height="67" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-24" value="upon successful searches, it either displays 0 results found (and the tutorial on how to use moneroSSO)<br>or it displays 1 result found with the one-time simplex invite links for the user" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" vertex="1" parent="1">
|
||||
<mxGeometry x="879" y="453.5" width="255" height="76" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.478;entryY=-0.003;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-16" target="46JsVXyUa3pXCljOW_3D-24">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-27" value="Displays the main address to recieve monero to, with the minimum fee to enter" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" vertex="1" parent="1">
|
||||
<mxGeometry x="695" y="567" width="131" height="65" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-31" target="46JsVXyUa3pXCljOW_3D-24">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-38" value="5) after 20 minutes, Bob queries index.php<br>with his transaction id (txid) that only he can know<div>since monero is an opaque blockchain<br>to retrieve the simplex invite links</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-37">
|
||||
<mxGeometry x="0.5817" y="1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-31" target="46JsVXyUa3pXCljOW_3D-39">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-31" value="Bob" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="745.5" y="762" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="46JsVXyUa3pXCljOW_3D-33" target="46JsVXyUa3pXCljOW_3D-27">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-36" value="0) sends payment" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="46JsVXyUa3pXCljOW_3D-35">
|
||||
<mxGeometry x="-0.0395" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-33" value="Monero wallet" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="1">
|
||||
<mxGeometry x="705.5" y="708" width="110" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="46JsVXyUa3pXCljOW_3D-39" value="6) Bob uses the simplex links to join the chatrooms" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" vertex="1" parent="1">
|
||||
<mxGeometry x="556" y="815" width="154" height="62" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
|
@ -251,7 +251,7 @@
|
|||
<!--<li><a href="hiddenservices/index.html">✅ Introduction to Hosting Hidden Services</a></li>-->
|
||||
<li><a href="hiddenservice/index.html">✅ Where to host Anonymous Hidden Services ?</a><img src="logos/Tor.png" class="logo"></li>
|
||||
<li><a href="anonymousremoteserver/index.html">✅ How to rent remote servers anonymously (Cloud resellers) ⭐</a><img src="logos/Tor.png" class="logo"><img src="logos/kycnotme.webp" class="logo"><img src="logos/vps.png" class="logo"></li>
|
||||
<li><a href="torwebsite/index.html">✅ Hidden Service with custom .onion Vanity V3 address</a><img src="logos/Tor.png" class="logo"><img src="logos/torbrowser.png" class="logo"></li>
|
||||
<li><a href="torwebsite/index.html">✅ Hidden Service with custom .onion domain Vanity V3 address</a><img src="logos/Tor.png" class="logo"><img src="logos/torbrowser.png" class="logo"></li>
|
||||
<li><a href="http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/blog-contributions/issues/179">❌ How to Verify one's Identity while maintaining Anonymity using PGP canaries ?</a><img src="logos/gnupg.png" class="logo"></li>
|
||||
<li><a href="forgejo-anon/index.html">✅ Forgejo .onion Setup (Anonymous Code Repositories and Collaboration)</a><img src="logos/Forgejo.png" class="logo"><img src="logos/Tor.png" class="logo"></li>
|
||||
<li><a href="http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/blog-contributions/issues/47">❌ How to setup Nerostr (Nostr blogging)</a><img src="logos/nostr.png" class="logo"><img src="logos/Tor.png" class="logo"><img src="logos/monero.png" class="logo"></li>
|
||||
|
@ -347,7 +347,7 @@
|
|||
<li><a href="high_availability/index.html">✅ Why is High Availability Important for Deniability ?</a><img src="logos/HA.png" class="logo"></li>
|
||||
<li><a href="tornginxphpmysql/index.html">✅ How to setup a basic NGINX / PHP / MySQL app</a><img src="logos/nginx.png" class="logo"><img src="logos/php.png" class="logo"><img src="logos/mysql.png" class="logo"></li>
|
||||
<li><a href="mysqlmastermaster/index.html">✅ How to setup a MySQL Master-Master replication over Tor</a><img src="logos/mysql.png" class="logo"><img src="logos/Tor.png" class="logo"><img src="logos/HA.png" class="logo"></li>
|
||||
<li><a href="http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/blog-contributions/issues/207">❌ OnionBalance for .onion domains load balancing</a><img src="logos/Tor.png" class="logo"><img src="logos/HA.png" class="logo"></li>
|
||||
<li><a href="onionbalancelb/index.html">✅ OnionBalance for .onion domains load balancing</a><img src="logos/Tor.png" class="logo"><img src="logos/HA.png" class="logo"></li>
|
||||
<li><a href="endgame/index.html">🟠 Endgame V3 (.onion service Anti DDOS / Load Balancer / WAF + Captcha) ⭐</a><img src="logos/endgame.png" class="logo"></li>
|
||||
|
||||
</ol></br>
|
||||
|
|
BIN
opsec/onionbalancelb/0.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
opsec/onionbalancelb/1.0.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
opsec/onionbalancelb/1.1.png
Normal file
After Width: | Height: | Size: 243 KiB |
BIN
opsec/onionbalancelb/2.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
opsec/onionbalancelb/3.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
opsec/onionbalancelb/4.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
opsec/onionbalancelb/5.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
opsec/onionbalancelb/6.png
Normal file
After Width: | Height: | Size: 37 KiB |
443
opsec/onionbalancelb/index.html
Normal file
|
@ -0,0 +1,443 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<link rel="shortcut icon" href="../../../../../../assets/img/favicon.png">
|
||||
|
||||
<title>OnionBalance for .onion domains load balancing</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="../../assets/css/bootstrap.css" rel="stylesheet">
|
||||
<link href="../../assets/css/xt256.css" rel="stylesheet">
|
||||
|
||||
|
||||
|
||||
<!-- Custom styles for this template -->
|
||||
<link href="../../assets/css/main.css" rel="stylesheet">
|
||||
|
||||
|
||||
|
||||
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Static navbar -->
|
||||
<div class="navbar navbar-inverse-anon navbar-static-top">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand-anon" href="\index.html">The Nihilism Blog</a>
|
||||
</div>
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
|
||||
<li><a href="/about.html">About</a></li>
|
||||
<li><a href="/blog.html">Categories</a></li>
|
||||
<li><a href="https://blog.nowhere.moe/donate.html">Donate</a></li>
|
||||
<li><a href="/contact.html">Contact</a></li>
|
||||
</ul>
|
||||
</div><!--/.nav-collapse -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- +++++ Posts Lists +++++ -->
|
||||
<!-- +++++ First Post +++++ -->
|
||||
<div id="anon2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2">
|
||||
<a href="../index.html">Previous Page</a></br></br><p><img src="../../assets/img/user.png" width="50px" height="50px"> <ba>oxeo0 - 2025 / 02 / 26</ba></p>
|
||||
<h1>OnionBalance for .onion domains load balancing</h1>
|
||||
<img src="0.png" class="imgRz">
|
||||
<p> </p>
|
||||
|
||||
</div>
|
||||
</div><!-- /row -->
|
||||
</div> <!-- /container -->
|
||||
</div><!-- /grey -->
|
||||
|
||||
<!-- +++++ Second Post +++++ -->
|
||||
<div id="anon3">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2">
|
||||
<h2><b>Introduction</b></h2>
|
||||
|
||||
<p>
|
||||
In our <a href="../mysqlmastermaster/index.html">last tutorial</a>, after setting up database replication between two instances of our vegetable shop, you might be wondering if there's a way for clients to access the service via a single frontend. Practically, this means users will go to your main onion v3 URL and may be presented with different backend instances in a transparent manner.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When one backend instance becomes unavailable, users will still be able to access the service on other backends. After the unavailable backend comes back online, changes made during its offline period will be automatically replicated to the database. It will also resume participating in load balancing.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div><!-- /row -->
|
||||
</div> <!-- /container -->
|
||||
</div><!-- /white -->
|
||||
|
||||
<div id="anon2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2">
|
||||
<h2><b>Overview</b></h2>
|
||||
|
||||
<p>
|
||||
<a href="https://github.com/torproject/onionbalance">Onionbalance</a> leverages the way Tor Hidden Service discovery works under the hood. In short, Tor uses a <a href="https://en.wikipedia.org/wiki/Distributed_hash_table">Distributed Hash Table (DHT)</a> where hidden services are published. Onionbalance makes the frontend address resolve to multiple backend addresses in a manner similar to <a href="https://en.wikipedia.org/wiki/Round-robin_DNS">Round Robin</a>. It functions much like how <a href="https://en.wikipedia.org/wiki/Content_delivery_network">CDNs</a> work on the clearnet, but it is free and does not rely on any third parties. <a href="https://onionservices.torproject.org/apps/base/onionbalance/design/index.html">Here</a> is a more detailed explanation of how Onionbalance achieves load balancing in practice.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
At the end of this guide, we'll have a load-balanced frontend URL. There is simplified diagram of how this works:
|
||||
</p>
|
||||
|
||||
<img src="1.0.png" class="imgRz">
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>
|
||||
User accessing the frontend gets transparently redirected to either of the backends.<br><br>
|
||||
A more detailed version presenting how clients get connected to the load-balanced service over Tor:
|
||||
</p>
|
||||
|
||||
<img src="1.1.png" class="imgRz">
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>
|
||||
From an end user's perspective:
|
||||
<ul>
|
||||
<li><b>1</b> - Tor client makes a request to the Distributed Hash Table (DHT) with the address of vegetable shop.</li><br>
|
||||
<li><b>2</b> - The DHT returns a descriptor with multiple backend addresses. Tor client chooses one of the addresses.</li><br>
|
||||
<li><b>3</b> - Tor client connects to the choosen backend.</li><br>
|
||||
<li><b>4</b> - Tor client passes the HTTP data to the browser and displays the store interface returned by one of the backends.</li><br>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div><!-- /row -->
|
||||
</div> <!-- /container -->
|
||||
</div><!-- /white -->
|
||||
|
||||
<div id="anon1">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2">
|
||||
<h2><b>Prerequisites</b></h2>
|
||||
<p>
|
||||
To start, you need to have two working servers running our vegetable shop with a replicated database as we did <a href="../mysqlmastermaster/index.html">here</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You should also know the public onion v3 URLs set up for our vegetable shop instances. Here, this will be <b>srvone[...].onion</b> for the first server and <b>srvtwo[...].onion</b> for the second server.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Onionbalance frontends can also be located on different servers than backends. If you want to run the frontend on a separate server, you'll need to <a href="../torwebsite/index.html">install Tor</a> on it (running as a client in default configuration).
|
||||
In this guide, I will assume that we are running frontends on the same servers as backends (<b>frontN</b> is the same as <b>serverN</b>).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Additionally, I <a href="../torwebsite/index.html#mkp224o">generated</a> another domain <b>vgshop[...].onion</b>. It will be used for Onionbalance frontends; clients should use it to access your service from now on. Requests coming to this URL will be load balanced and distributed across available backends.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To start, install the <b>onionbalance</b> package on each frontend server:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">oxeo@frontN:~$ sudo apt update
|
||||
oxeo@frontN:~$ sudo apt install onionbalance
|
||||
</code></pre>
|
||||
|
||||
</div>
|
||||
</div><!-- /row -->
|
||||
</div> <!-- /container -->
|
||||
</div><!-- /white -->
|
||||
|
||||
<div id="anon2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2">
|
||||
<h2><b>Frontend Configuration</b></h2>
|
||||
|
||||
<p>
|
||||
Edit the <b>/etc/onionbalance/config.yaml</b> file:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">services:
|
||||
- instances:
|
||||
- address: srvone4oj33rvnykz252tf2holi5ae6pz5w62znumesgmzg7mjbnhtyd.onion
|
||||
name: server1
|
||||
- address: srvtwo7a3ddvt5kncimkh5esstmzomdjx2fr7o73q66fzdrsbtnexhyd.onion
|
||||
name: server2
|
||||
key: vgshophitykmo5he6botlhvuosdd2rbpmcorhk5dnt2twetdwlwofyyd.key
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
Remember to replace:
|
||||
<ul>
|
||||
<li><b>srvone[...].onion</b> - public onion URL of the first backend server.</li>
|
||||
<li><b>srvtwo[...].onion</b> - public onion URL of the second backend server.</li>
|
||||
<li><b>vgshop[...].onion</b> - public frontend onion URL that you have generated for this tutorial.</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Now, on each frontend server you want to configure, place the <b>private key</b> (usually stored in <b>hs_ed25519_secret_key</b>) of the <b>vgshop[...].onion</b> service into <b>/etc/onionbalance/vgshophitykmo5he6botlhvuosdd2rbpmcorhk5dnt2twetdwlwofyyd.key</b>.<br>
|
||||
Replace the URL part with the actual frontend onion URL. It should match whatever you put in <b>/etc/onionbalance/config.yaml</b> as a <b>key</b>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Edit the <b>/etc/tor/torrc</b> adding the following line:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">ControlPort 127.0.0.1:9051
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
This will be used by the onionbalance service to control the Tor daemon over a local port.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div><!-- /row -->
|
||||
</div> <!-- /container -->
|
||||
</div><!-- /white -->
|
||||
|
||||
<div id="anon1">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2">
|
||||
<h2><b>Tor Daemon Configuration</b></h2>
|
||||
|
||||
<p>
|
||||
With the frontends configured, you now need to log into your backend servers and modify the <b>/etc/tor/torrc</b> file. Insert this line below your public hidden service configuration:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">HiddenServiceOnionbalanceInstance 1
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
After editing, it should look something like this:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">[...]
|
||||
HiddenServiceDir /var/lib/tor/veggie_service/
|
||||
HiddenServicePort 80 127.0.0.1:4440
|
||||
HiddenServiceOnionbalanceInstance 1
|
||||
|
||||
HiddenServiceDir /var/lib/tor/internal_service/
|
||||
HiddenServicePort 33061 127.0.0.1:3306
|
||||
HiddenServicePort 22 127.0.0.1:22
|
||||
[...]
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
Now, create a new file under <b>/var/lib/tor/veggie_service/ob_config</b>, substituting the URL with one you set for the frontend:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">MasterOnionAddress vgshophitykmo5he6botlhvuosdd2rbpmcorhk5dnt2twetdwlwofyyd.onion
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
Finally, restart the <b>tor</b> service on each backend:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">oxeo@serverN:~$ sudo systemctl restart tor
|
||||
</code></pre>
|
||||
|
||||
</div>
|
||||
</div><!-- /row -->
|
||||
</div> <!-- /container -->
|
||||
</div><!-- /white -->
|
||||
|
||||
<div id="anon2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2">
|
||||
<h2><b>Final Adjustments</b></h2>
|
||||
|
||||
<p>
|
||||
Both services will soon be accessible under the <b>vgshop[...].onion</b>. To differentiate between them, you can change the header to indicate which backend is being accessed.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
On the first backend server:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">oxeo@server1:~$ sudo sed -i 's/Vegetable Shop/Vegetable Shop 1/' /srv/shop/index.php
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
On the second backend server:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">oxeo@server2:~$ sudo sed -i 's/Vegetable Shop/Vegetable Shop 2/' /srv/shop/index.php
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
Finally, on each frontend, restart the <b>tor</b> and <b>onionbalance</b> services:
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">oxeo@frontN:~$ sudo systemctl restart tor onionbalance
|
||||
</code></pre>
|
||||
|
||||
</div>
|
||||
</div><!-- /row -->
|
||||
</div> <!-- /container -->
|
||||
</div><!-- /white -->
|
||||
|
||||
<div id="anon1">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2">
|
||||
<h2><b>Showcase and Verification</b></h2>
|
||||
|
||||
<p>
|
||||
To verify our setup, go to <b>vgshop[...].onion</b>. You should be presented with one of your backend instances. In our case, it's <b>srvone[...].onion</b>.
|
||||
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Now, purchase any product and take note of the balance after the operation.
|
||||
</p>
|
||||
|
||||
<img src="2.png" class="imgRz">
|
||||
<img src="3.png" class="imgRz">
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>
|
||||
Wait a few seconds for the state to be replicated, then stop <b>tor</b> and <b>onionbalance</b> on the backend where you made the purchase. This simulates our backend going offline.
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">oxeo@server1:~$ sudo systemctl stop tor onionbalance
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
Then refresh the page.
|
||||
</p>
|
||||
|
||||
<img src="4.png" class="imgRz">
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>
|
||||
If the website is still up and points to the other backend, this means Onionbalance works as intended. If the account balance was updated, then the database was replicated successfully as well.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You can now make a purchase on the other "working" server and take note of that balance too.
|
||||
</p>
|
||||
|
||||
<img src="5.png" class="imgRz">
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>
|
||||
Start services on the "offline" server to bring it online again.
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">oxeo@server1:~$ sudo systemctl start tor onionbalance
|
||||
</code></pre>
|
||||
|
||||
<p>
|
||||
Wait a few minutes for the servers to synchronize, then make the other server unavailable. Refresh the website once again.
|
||||
</p>
|
||||
|
||||
<pre><code class="nim">oxeo@server2:~$ sudo systemctl stop tor onionbalance
|
||||
</code></pre>
|
||||
|
||||
<img src="6.png" class="imgRz">
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>
|
||||
If the balance appears correct on the first server, then everything works as expected!
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div><!-- /row -->
|
||||
</div> <!-- /container -->
|
||||
</div><!-- /white -->
|
||||
|
||||
<div id="anon2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2">
|
||||
<h2><b>Closing Remarks</b></h2>
|
||||
|
||||
<p>
|
||||
<b>Congratulations!</b> - You now have a fully working, highly available service on the <b>"Dark Web"</b>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
It's important to note onionbalance doesn't support <a href="https://blog.torproject.org/introducing-proof-of-work-defense-for-onion-services/">Proof of Work mechanism</a> Tor uses to combat DDoS attacks. However the work is ongoing and you can track progress in <a href="https://gitlab.torproject.org/tpo/onion-services/onionbalance/-/issues/13">this issue</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you want to learn more, explore advanced setups, or troubleshoot any issues, read the <a href="https://onionservices.torproject.org/apps/base/onionbalance/tutorial/index.html">Onionbalance wiki</a> from <a href="https://onionservices.torproject.org">The Onion Services Ecosystem</a>.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div><!-- /row -->
|
||||
</div> <!-- /container -->
|
||||
</div><!-- /white -->
|
||||
|
||||
<!-- +++++ Footer Section +++++ -->
|
||||
|
||||
<div id="anonb">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<h4>Nihilism</h4>
|
||||
<p>
|
||||
Until there is Nothing left.</p></br></br><p>Creative Commons Zero: <a href="../../../../opsec/runtheblog/index.html">No Rights Reserved</a></br><img src="\CC0.png">
|
||||
|
||||
</p>
|
||||
</div><!-- /col-lg-4 -->
|
||||
|
||||
<div class="col-lg-4">
|
||||
<h4>My Links</h4>
|
||||
<p>
|
||||
|
||||
<a target="_blank" rel="noopener noreferrer" href="http://blog.nowhere.moe/rss/feed.xml">RSS Feed</a><br/><a target="_blank" rel="noopener noreferrer" href="https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FBD4qkVq8lJUgjHt0kUaxeQBYsKaxDejeecxm6-2vOwI%3D%40b6geeakpwskovltbesvy3b6ah3ewxfmnhnshojndmpp7wcv2df7bnead.onion%2FdXQ3FLM5ufTNQxgXU6jm07fRXSq9Ujkt%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAzABUDXe4g0bjXyPcNOU0QzWxMYMMGgR3kcOQacoEaQ0%253D&data=%7B%22groupLinkId%22%3A%22G3yklv9753AcNA7lGV3FBw%3D%3D%22%7D">SimpleX Chat</a><br/>
|
||||
|
||||
</p>
|
||||
</div><!-- /col-lg-4 -->
|
||||
|
||||
<div class="col-lg-4">
|
||||
<h4 class="readable">About nihilist</h4>
|
||||
<p style="word-wrap: break-word;"><u>Donate XMR:</u>
|
||||
8AUYjhQeG3D5aodJDtqG499N5jXXM71gYKD8LgSsFB9BUV1o7muLv3DXHoydRTK4SZaaUBq4EAUqpZHLrX2VZLH71Jrd9k8
|
||||
</p></br>
|
||||
<p style="word-wrap: break-word;"><u>Donate XMR to the author:</u>
|
||||
862Sp3N5Y8NByFmPVLTPrJYzwdiiVxkhQgAdt65mpYKJLdVDHyYQ8swLgnVr8D3jKphDUcWUCVK1vZv9u8cvtRJCUBFb8MQ</p>
|
||||
<p class="readable"><u>Contact:</u> nihilist@contact.nowhere.moe (<a
|
||||
href="https://nowhere.moe/nihilist.pubkey">PGP</a>)</p>
|
||||
</div><!-- /col-lg-4 -->
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Bootstrap core JavaScript
|
||||
================================================== -->
|
||||
<!-- Placed at the end of the document so the pages load faster -->
|
||||
|
||||
</body>
|
||||
</html>
|