meshvpn

Open-source mesh VPN · Rust · Apache-2.0

Your machines, one network. No server in between.

meshvpn connects laptops, servers, Raspberry Pis, containers and GPU boxes into one private network. There is no control plane to run or rent, no account and no cloud: the machines find each other, punch through NAT and firewalls, and relay for each other where they must.

install (Linux, macOS)
$ curl -fsSL https://github.com/PlugOvr-ai/meshvpn/releases/latest/download/install.sh | sudo sh
public DHTencrypted hints only desktophome routerno port forward laptop5G hotspotchanging address direct, punched IPv6, encrypted
$ meshvpn status
● desktop  100.91.20.7  (network "home")

NAME     IP              STATUS   RTT   PATH
laptop   100.122.64.143  online   31ms  direct [2a02:…]:7870
pi       100.94.140.208  online    2ms  direct LAN
$ ssh laptop.mesh
0servers to run. Not for coordination, not for finding each other.
1static binary. Linux, macOS, Windows; x86, ARM, Raspberry Pi.
<name>.mesha stable address and name for every machine, wherever it is.
Apache-2.0all of it. Signed releases, SBOM, public security policy.

Why another VPN

Most mesh VPNs still need a server. meshvpn doesn't.

Tailscale needs its coordination service (or a self-hosted Headscale), NetBird a management and signal server, Nebula its lighthouses, ZeroTier its root servers. Those servers are convenient, but they are one more thing to run, trust, pay for, or lose. In meshvpn every node is equal, and the network is just its machines.

Finds each other again

Home routers change their address every day, phones move between networks. With the DHT switched on, nodes leave an encrypted, signed note in the public BitTorrent DHT that only members can find and read. No DynDNS, no anchor server.

Through routers and 5G

UDP hole punching through NAT, hole punching over IPv6 (TCP and UDP) through the firewalls of home routers and mobile networks, automatic port forwarding (UPnP, NAT-PMP, PCP), STUN. Relays over other nodes when nothing else works.

Through corporate firewalls

A machine that may only open SSH joins over a supervised reverse tunnel. Networks that may only reach out connect to a node outside with meshvpn connect.

More than a tunnel

Everything you do between your machines, built in.

Password-less SSH

Decide per machine who may log in as whom, in one grid. Keys are bound to the node's mesh address. A built-in SSH server for containers without sshd.

A desktop in the browser

meshvpn desktop gpu1 opens a remote Xfce, MATE or Cinnamon desktop in your browser, over SSH, with 3D and H.264 on the GPU.

Multi-node AI work

Launch distributed training across nodes, reserve GPUs, share datasets and checkpoints peer to peer, and check the network before a run.

Made for AI agents

--json everywhere, clear exit codes, meshvpn guide and an MCP server, so an agent can run commands and move files across your machines.

Exit nodes

Send a machine's internet traffic through another node, to appear with your home or office address. Nothing leaks while the exit is down.

Admins and invites

Single-use, expiring invites; admins; bans that rotate the network key; members for a limited time; several networks on one machine.

Get started

Two commands per machine.

first machine
$ sudo meshvpn init --network home
Invite code: mesh1-eyJuZXR3b3Jr...
$ sudo meshvpn install
every other machine
$ sudo meshvpn join mesh1-eyJuZXR3b3Jr...
$ sudo meshvpn install
$ ssh desktop.mesh

Windows, packages and builds from source: Download. A step-by-step walk-through, also for a home router and a laptop on 5G: Get started.