Skip to content

Commit

Permalink
Merge pull request #516 from threefoldtech/development_mycelium_tips
Browse files Browse the repository at this point in the history
mycelium updates for troubleshooting
  • Loading branch information
khaledyoussef24 authored Apr 21, 2024
2 parents 9f24ac5 + c97ddc2 commit ec27f42
Show file tree
Hide file tree
Showing 2 changed files with 109 additions and 32 deletions.
61 changes: 35 additions & 26 deletions src/documentation/system_administrators/mycelium/information.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@
- [API](#api)
- [Message System](#message-system)
- [Inspecting Node Keys](#inspecting-node-keys)
- [Permanently Enable Mycelium](#permanently-enable-mycelium)
- [Troubleshooting](#troubleshooting)
- [Root Access](#root-access)
- [Enable IPv6 at the OS Level](#enable-ipv6-at-the-os-level)
- [VPN Can Block Mycelium](#vpn-can-block-mycelium)
- [Add Peers](#add-peers)

***

Expand Down Expand Up @@ -153,32 +157,37 @@ Public key: a47c1d6f2a15b2c670d3a88fbe0aeb301ced12f7bcb4c8e3aa877b20f8559c02
Address: 27f:b2c5:a944:4dad:9cb1:da4:8bf7:7e65
```

## Permanently Enable Mycelium
## Troubleshooting

It is possible to permenently enable Mycelium on your client.
### Root Access

For Linux, we use systemd to manage the mycelium daemon in `/storage/`. Here's an example:
You might need to run Mycelium as root. Some error messages could be something like: `Error: NixError(EPERM)`.

### Enable IPv6 at the OS Level

You need to enable IPv6 at the OS level. Some error messages could be something like: `Permission denied (os error 13)`.

- Check if IPv66 is enabled
- If disabled, output is 1, if enabled, output is 0
```
sysctl net.ipv6.conf.all.disable_ipv6
```
- Enable IPv6
```
sudo sysctl net.ipv6.conf.all.disable_ipv6=0
```

Here's some commands to troubleshoot IPv6:

```
sudo ip6tables -S INPUT
sudo ip6tables -S OUTPUT
```
[Unit]
Description=End-2-end encrypted IPv6 overlay network
Wants=network.target
After=network.target
Documentation=https://github.com/threefoldtech/mycelium
[Service]
ProtectHome=true
ProtectSystem=true
SyslogIdentifier=mycelium
CapabilityBoundingSet=CAP_NET_ADMIN
StateDirectory=mycelium
StateDirectoryMode=0700
ExecStartPre=+-/sbin/modprobe tun
ExecStart=/storage/mycelium --tun-name mycelium -k %S/mycelium/key.bin --peers tcp://[2a01:4f8:221:1e0b::2]:9651 tcp://[2a01:4f8:212:fa6::2]:9651 tcp://[2a02:1802:5e:0:8478:51ff:fee2:3331]:9651 tcp://[2a02:1802:5e:0:8c9e:7dff:fec9:f0d2]:9651 tcp://[2a01:4f9:6a:1dc5::2]:9651 tcp://[2a01:4f9:5a:1042::2]:9651
Restart=always
RestartSec=5
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
```

### VPN Can Block Mycelium

You might need to disconnect your VPN when using Mycelium.

### Add Peers

It can help to connect to other peers. Check the Mycelium repository for [peers](https://github.com/threefoldtech/mycelium?tab=readme-ov-file#hosted-public-nodes).
80 changes: 74 additions & 6 deletions src/documentation/system_administrators/mycelium/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,28 @@
<h2>Table of Contents</h2>

- [Introduction](#introduction)
- [Full VM Example](#full-vm-example)
- [Considerations](#considerations)
- [Set Mycelium](#set-mycelium)
- [Start Mycelium](#start-mycelium)
- [Use Mycelium](#use-mycelium)
- [Mycelium Service (optional)](#mycelium-service-optional)

***

## Introduction

In this section, we cover how to install Mycelium. For this guide, we will show the steps on a full VM running on the TFGrid.
In this section, we cover how to install Mycelium. This guide can be done on a local machine and also on a full VM running on the TFGrid.

Currently, Linux, macOS and Windows are supported. On Windows, you must have `wintun.dll` in the same directory you are executing the binary from.

## Full VM Example
## Considerations

You might need to run Mycelium as root, enable IPv6 at the OS level and disconnect your VPN.

Read the [Troubleshooting](./information.md#troubleshooting) section for more information.

## Set Mycelium

- Deploy a Full VM with Planetary network and SSH into the VM
- Update the system
```
apt update
Expand All @@ -33,16 +42,75 @@ Currently, Linux, macOS and Windows are supported. On Windows, you must have `wi
```
mv mycelium /usr/local/bin
```
## Start Mycelium
You can start Mycelium
- Start Mycelium
```
mycelium --peers tcp://83.231.240.31:9651 quic://185.206.122.71:9651 --tun-name utun2
```
- Open another terminal
- Check the Mycelium connection information (address: ...)
- Check the Mycelium connection information (address and public key)
```
mycelium inspect --json
```
## Use Mycelium
Once you've set Mycelium, you can use it to ping other addresses and also to connect into VMs running on the TFGrid.
- Ping the VM from another machine with IPv6
```
ping6 mycelium_address
```
```
- SSH into a VM running on the TFGrid
```
ssh root@vm_mycelium_address
```
## Mycelium Service (optional)
You can create a systemd service to make sure Mycelium is always enabled and running.
- Create a Mycelium service
```bash
nano /etc/systemd/system/mycelium.service
```
- Set the service and save the file
```
[Unit]
Description=End-2-end encrypted IPv6 overlay network
Wants=network.target
After=network.target
Documentation=https://github.com/threefoldtech/mycelium
[Service]
ProtectHome=true
ProtectSystem=true
SyslogIdentifier=mycelium
CapabilityBoundingSet=CAP_NET_ADMIN
StateDirectory=mycelium
StateDirectoryMode=0700
ExecStartPre=+-/sbin/modprobe tun
ExecStart=/usr/local/bin/mycelium --tun-name mycelium -k %S/mycelium/key.bin --peers tcp://146.185.93.83:9651 quic://83.231.240.31:9651 quic://185.206.122.71:9651 tcp://[2a04:f340:c0:71:28cc:b2ff:fe63:dd1c]:9651 tcp://[2001:728:1000:402:78d3:cdff:fe63:e07e]:9651 quic://[2a10:b600:1:0:ec4:7aff:fe30:8235]:9651
Restart=always
RestartSec=5
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
```
- Enable the service
```
systemctl daemon-reload
systemctl enable mycelium
systemctl start mycelium
```
- Verify that the Mycelium service is properly running
```
systemctl status mycelium
```
Systemd will start up the Mycelium, restart it if it ever crashes, and start it up automatically after any reboots.

0 comments on commit ec27f42

Please sign in to comment.