threefoldtech/mycelium

Feedback from community members

Opened this issue · 5 comments

Situation

@scottyeager and I presented a demo on Mycelium. The feedback is amazing. People seem very interested.

A user asked if we were planning to add the following (see below) for Mycelium. I create this issue so we can track interest and get the POV of the dev team on this:

  • extension browser for mycelium
  • websocket support for mycelium
  • filesystem implementation for mycelium
  • database implementation for mycelium

Scott, feel free to add more insights.

It feels like I'm missing some context here. What is the ultimate goal that this user wants to achieve?

For the individual points:

extension browser in mycelium

Does this mean a browser extension to run mycelium?

websocket support for mycelium

On a technical level, mycelium nodes could communicate over websockets if that is implemented. The question is why that is specifically needed, since a websocket is essentially a tcp connection with s specific frame codec on top (i.e. slightly more overhead than tcp).

filesystem implementation for mycelium

Mycelium as in the application in this repo is only a network tool. Various filesystems exist which can be accessed remotely over the network, and as long as these support IPv6, they should work over mycelium.

Database implementation over mycelium

Similar to the previous, databases (generally databases which run in cluster setups such as mongo) should be able to run using a mycelium connection out of the box, by configuring peers with the proper mycelium IP.

To give a bit more context, the question from the community member is about the possibility of implementing Mycelium as a web browser extension. The given reasons for this were around the additional security of web browser sandboxing, some users not wanting to run the binary release directly on their own system, and the ease of install.

The question regarding websockets then is related to this, as websockets are the allowed way for a web browser to carry on this kind of connection.

Implementing websocket connections between peers should be fairly straightforward. The main issue with browser extensions is (to my knowledge) the fact that they can't create network interfaces. After all, creating a network interface requires elevated privileges, which the browser by default doesn't have, and if it could do so, allowing extension to do this would also break the sandbox. So while it would essentially be possible to run some form of (lightweight) node in a browser (extension), it would just serve as an additional node in the network which may be used for routing.

As for not installing a node on the local system, if you connect more than 1 device, you could install mycelium on the router, and have the router hand out ip addresses from the /64 subnet you get to devices on the network. This obviously makes all your devices reachable on an essentially public network, and thus needs some firewalling. Alternatively, you can also run mycelium on the router, and set up an ip6 NAT rather easily. This way, other devices have no knowledge of mycelium (they won't even get an IP in the mycelium range), but can still reach services exposed on mycelium. The devices themselves will obviously not be exposed on the network. This relies on the fact that the router is the default gateway and receives all traffic for which no specific rules exists on nodes.

Thanks for the details @LeeSmet. It certainly makes sense that a browser extension wouldn't be able to achieve a system wide enabling of Mycelium.

The remaining questions for me are:

  1. Could such a set up in theory enable the browser and extension to work together to render web pages served over mycelium, without the creation of a network interface?
  2. Any chance of an in browser SSH client working over a mycelium connection established by a browser extension?

Those would be the two main use cases I could imagine.

Could such a set up in theory enable the browser and extension to work together to render web pages served over mycelium, without the creation of a network interface?

You'll need to run a mycelium node somewhere to join the network. One possibility would be to run mycelium on a device you can reach, and running a socks5 proxy next to it. If you configure the browser to use the provided socks5 server, it will tunnel all data through it, and the proxy can use the local mycelium node to reach the network. This of course routes all traffic through the proxy. Perhaps using an extension might allow for more granular control over what gets routed where, but I don't have any relevant experience in that matter to provide more insights.

Any chance of an in browser SSH client working over a mycelium connection established by a browser extension?

If you mean to use an extension to run the SSH client while using a (local or otherwise routable from the machine) mycelium node, that should "just work"