Self-hosted service
mysteriumnetwork/node avatar
mysteriumnetwork/node

Mysterium Node for Running a WireGuard dVPN Node

Mysterium Network Node - official implementation of distributed VPN network (dVPN) protocol

1,354 stars357 forksGoGPL-3.0

At a glance

What is it?
Mysterium Node is the Go implementation of a distributed VPN network, combining a Mysterium server, Tequila API, console client, and WireGuard transport. It suits operators who need to run a network node, but its setup and network exposure decisions require care.
Who is it for?
Adopt Mysterium Node if you intend to operate a node in the Mysterium Network and can accept blockchain, container, and host-network responsibilities. Do not choose it as a conventional self-hosted VPN server when you need a documented, self-contained configuration model.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Mysterium Node Operates

Mysterium Node solves the problem of participating in a distributed VPN network rather than managing one isolated VPN server. The repository describes itself as the official implementation of the Mysterium Network dVPN protocol. It is for operators who want to run a node, and for developers integrating the node's server, API, or command-line components. The software contains three relevant parts: the Mysterium server, the Tequila client API, and `client-cli`, the console client. That scope matters because the project is not merely a VPN client binary. It is also a network participant whose service can expose routing and node behavior to other clients.

The documented transport is WireGuard. The README also lists OpenVPN among the technologies built with the project, but the current support statement specifically says that Node supports WireGuard as its underlying VPN transport. That distinction should guide adoption decisions. A team that requires an OpenVPN-only deployment cannot infer that capability from the broader built-with list. Likewise, the project name contains `vpn`, but the relevant architecture is a distributed network with blockchain-related components rather than a conventional centrally managed VPN appliance.

Node Architecture and Request Flow

Based on the repository layout, the implementation is split into areas such as `communication/`, `core/`, `market/`, `router/`, `session/`, `services/`, `tequilapi/`, `p2p/`, `firewall/`, and `dns/`. The README does not document a complete request sequence, so the exact control-plane exchange between a client, the Mysterium Network, and a provider node cannot be confirmed from the documentation. It does confirm the building blocks. The Go module declares the project path `github.com/mysteriumnetwork/node`, uses Go 1.26, and includes libraries for Ethereum, libp2p, HTTP routing, DNS, networking, and WireGuard-related packages. The `market/` and `p2p/` directories indicate that discovery and peer communication are part of the repository's concerns, while `tequilapi/` represents the client-facing API area.

The Docker command starts the image with the `service` command and `--agreed-terms-and-conditions`, which shows that the container is expected to run as a node service. The `--net host` setting removes Docker's normal network namespace isolation for that container, while `--cap-add NET_ADMIN` grants the network administration capability needed by this setup. This is a deliberate operational choice. It can simplify access to host networking and interfaces, but it also means the container's network behavior is closer to the host's network than a default bridge container. The README does not publish a production hardening guide for the container, so the security boundary must be evaluated by the operator.

Installing on Debian, Ubuntu, and Raspbian

The README provides a shell installation path for Debian, Ubuntu, and Raspbian. This installs the latest stable release according to the project documentation. The command executes the repository's `install.sh` through `curl` and `bash`, so an operator who cares about reviewing installation logic should inspect that script before executing it.

The documented stable installation command is:

bash
sudo -E bash -c "$(curl -s https://raw.githubusercontent.com/mysteriumnetwork/node/master/install.sh)"

After installation, the service is managed as `mysterium-node.service`. The README gives these commands for checking its logs and status:

bash
sudo journalctl -u mysterium-node.service
bash
sudo systemctl status mysterium-node.service

For a development snapshot, the README documents a separate command. Snapshot builds are described as bleeding edge and carry a use-at-your-own-risk warning.

bash
SNAPSHOT=true sudo -E bash -c "$(curl -s https://raw.githubusercontent.com/mysteriumnetwork/node/master/install.sh)"

The README says the installation script was tested on Raspbian 10, Debian 9, Debian 10, Ubuntu 18.04, and Ubuntu 20.04. Those are tested distributions, not a promise of support for every current Linux release. The repository also links to installation guides for other options, but the README does not reproduce their contents.

First Use Through Docker

Docker is the clearest documented first-use path because the README gives a complete run command. The image name is `mysteriumnetwork/myst`. The container receives `NET_ADMIN`, uses the host network, is named `myst`, runs detached, and starts the node service after the terms and conditions are accepted.

bash
docker run \
  --cap-add NET_ADMIN \
  --net host \
  --name myst -d \
  mysteriumnetwork/myst service --agreed-terms-and-conditions

The resulting service can be inspected with the following command. The README uses `-f`, so the output is intended to continue streaming rather than return only a fixed snapshot.

bash
docker logs -f myst

The README says Docker should work on operating systems that support Docker. It lists Debian 9, Debian 10, Ubuntu 18.04, Ubuntu 20.04, Ubuntu 22.04, and Yocto Linux with BalenaOS as systems it had tested. It also links to a post-installation guide for running Docker without `sudo` as a non-root user on Linux. The README does not explain how to persist node identity or configuration across container removal, and it does not present a complete production compose file. The repository contains `docker-compose.e2e-basic.yml` and other compose files, but their names indicate basic, compatibility, shaper, traversal, and local-network environments rather than a documented production deployment template.

Automatic Updates and Upgrade Controls

Mysterium Node includes an automatic update mechanism for new `myst` DEB installations. According to the README, `myst-updater.timer` checks the stable Mysterium Launchpad PPA every 6 to 12 hours and installs a newer authenticated package when one is available. The updater rejects downgrades, held packages, unexpected repositories, architectures, package paths, and artifact hashes. After installation, it checks both the installed package version and the running node's `/healthcheck` version.

An administrator can perform a check without installing anything:

bash
sudo /usr/lib/mysterium-node/myst-updater --check-only

The timer schedule and updater logs are available through these commands:

bash
systemctl list-timers myst-updater.timer
bash
journalctl -u myst-updater.service

The updater can be disabled with a documented configuration variable in `/etc/default/myst-updater`:

yaml
MYST_UPDATER_ENABLED=false

The README states that APT continues to verify repository signatures and package-index hashes, and that the updater does not enable insecure or unauthenticated repository modes. This gives DEB users a defined update path, but it also introduces a policy decision: stable automatic updates, manual checking, or disabling the timer. The README does not document rollback behavior, so an administrator should not assume that a failed application-level update can be reversed from the README alone.

Limitations and the Alternative Design

The main limitation is that this is network infrastructure, not a self-contained VPN configuration. A conventional VPN server typically gives the operator direct control over users, routes, certificates, firewall policy, and service configuration. Mysterium Node instead participates in a distributed network whose discovery, peer communication, and market-related behavior are part of the broader architecture. The README does not document a complete user-management workflow or a local-only mode that would make it equivalent to a standalone VPN server.

The Docker deployment adds another constraint. `--net host` and `--cap-add NET_ADMIN` are meaningful privileges, and the container is exposed according to host networking rather than Docker's isolated bridge mode. Operators must decide whether the host is dedicated, whether the image and tags are controlled, and how service exposure is restricted. The README points to troubleshooting and help-center material but does not provide a complete firewall policy in this document.

A real alternative is a conventional WireGuard deployment managed directly by the operating system. The difference is architectural: direct WireGuard uses operator-managed interfaces, keys, peers, routes, and firewall rules, without Mysterium's blockchain-oriented discovery and payment components. Mysterium Node is the better fit when participation in the Mysterium Network is required. It is the wrong fit when the requirement is a small, predictable VPN server with no dependency on a distributed provider market.

Maintenance, License, and Project Status

The repository is not archived. Its last push was on 2026-09-30, and recent releases include 1.39.7 on 2026-09-23, 1.39.6 on 2026-09-18, and 1.39.5 on 2026-08-17. Those facts indicate recent repository activity and release production, but the README does not provide a support policy, compatibility matrix for current distributions, or a long-term maintenance commitment.

The project is licensed under the GNU General Public License v3.0, as stated in the README and repository metadata. The presence of `TERMS_END_USER.md` and `TERMS_EXIT_NODE.md` also indicates that end-user and exit-node terms are separate project files. The README does not summarize those terms, so this review does not infer their content. Distribution, modification, packaging, and service operation should be reviewed against the actual `LICENSE` and applicable project terms. This is a compliance identification, not legal advice.

The Go module requires Go 1.26 and contains many external dependencies, including Ethereum, libp2p, Gin, and DNS libraries. Source builds therefore require more than a Go toolchain, and the repository's `Makefile` exposes build, Docker image, and test targets. The README does not give a complete from-source dependency or release-signing procedure.

Editorial conclusion

Adopt Mysterium Node if you intend to operate a node in the Mysterium Network and can accept blockchain, container, and host-network responsibilities. Do not choose it as a conventional self-hosted VPN server when you need a documented, self-contained configuration model. Verify the target OS, Docker permissions, `NET_ADMIN` requirement, host networking exposure, updater policy, and the node's `/healthcheck` behavior before deployment. The first release decision should be based on those operational boundaries, not on the project name or release cadence alone.

Frequently asked questions

How do I install Mysterium Node on Debian or Ubuntu?

The README documents a stable installation command that executes `install.sh` with `sudo`. It also documents a `SNAPSHOT=true` variant for the latest snapshot build, which the README describes as bleeding edge.

What Docker permissions does Mysterium Node require?

The documented Docker command adds `NET_ADMIN` and uses `--net host`. The README also links to a guide for running Docker as a non-root user on Linux, but it does not provide a separate production hardening policy.

Does Mysterium Node use WireGuard?

Yes. The README states that Mysterium Node supports WireGuard as its underlying VPN transport. It also lists OpenVPN under technologies built with the project, but it does not state that OpenVPN is the current supported transport.

Official sources

  1. License: GPL-3.0
  2. mysteriumnetwork/node on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/mysteriumnetwork-node.svg)](https://hysenlabs.com/projects/mysteriumnetwork-node)

Was this useful?