Nine servers on one private network. Forty-three seconds.

WireGuard as a full mesh between the boxes you own: a private address for each, every other box a peer, one UDP port between them. Drop the servers in, press one button, and Vigia makes the keys on each box, writes the interface, opens the firewall between the members and then proves every tunnel from both ends. After that the replication, the backups and the admin traffic ride private addresses, and the database ports can be shut to the internet for good.

A WireGuard mesh of nine Linux servers in LockFlare Vigia: every member with its public and private address, 8 of 8 tunnels alive, and the matrix showing all 72 tunnels answering
Nine servers, every member up, all 72 tunnels answering.

Drop the servers in. That is the configuration.

Open the VPN tool on any server — from its card under Setup Packages while the box has no WireGuard yet — and it becomes the first member. Name the network, keep or change the subnet — 10.99.0.0/24 unless you already use it — and check the public address the others will dial. Then drag servers from the tree: one, several, a whole group. Each takes a row and is read as it lands — a box with no shell open is connected with its saved login, or its connect form opens — so you know before anything is written whether a box already has the WireGuard tools or Vigia will install them from its distribution.

There is no peer list to type, no keys to paste between terminals, no file to keep in sync by hand. Eight boxes on the list and nothing has been touched yet: nothing is written until you press Save and build.

Every wire made at once, then proved

One job runs on every box at the same time. A key pair is made on each box and the private half never leaves it — Vigia does not read it, and it is not inside the configuration file either. The public halves are filed, and from then on a box whose key changes stops the job instead of being trusted. Then the interface, lens0, is written with every other member as a peer, brought up and enabled at boot; the firewall lets the members reach each other on 51820/udp; and every tunnel is pinged from both ends. "Done" means every one of them answered.

9servers, one private subnet
72tunnels answering, each proved from the box it starts at
43 sfrom Save and build to Done, timed

These nine boxes already had the WireGuard tools. A box that lacks them gets them installed from its own distribution by the same job, which adds the time its package manager takes. Every line the job said is kept, and can be copied or downloaded. Close Vigia halfway and it stops between boxes; the same button goes on from there.

/ THE MATRIX

The network, as it stands

Every member as it reports itself: the public address the others dial, its private address, the state of the interface, how many of its tunnels are alive, and from the box you are on, when each last shook hands and how much has crossed.

The matrix is the proof: a row is the box pinging, a column the box pinged, over the private addresses. Confirm the tunnels runs it again whenever you want to know.

/ ONE WIRE, WALKED

Press a cell, and that wire answers for itself.

Press any cell and Vigia walks that one wire, a question at a time: both on the network, each a peer of the other, the key on the box matching the key on file, a handshake, a ping across, a TCP connection across, and the largest packet the path carries — with the fix beside whichever one says no.

Beside it, the network as one box reads it, and one wire walked.

# backbone · 10.99.0.0/24 · lens0 · read from db-1 member dials private lens0 alive handshake crossed db-1 203.0.113.11 10.99.0.1 up 8 of 8 — — db-2 203.0.113.12 10.99.0.2 up 8 of 8 14 s ago 2.1 GB db-3 203.0.113.13 10.99.0.3 up 8 of 8 9 s ago 1.8 GB app-1 198.51.100.21 10.99.0.4 up 8 of 8 21 s ago 310 MB … five more, every one 8 of 8 # one cell pressed: app-1 → db-2, a question at a time both on the network yes each a peer of the other yes key on the box = key on file yes a handshake yes 14 s ago a ping across yes 0.6 ms a TCP connection across yes the largest packet the path takes yes 1420 # a "no" anywhere comes with its fix beside it
By nameEach member learns the others by name — db-3.lens — in a block of its own in /etc/hosts, so a connection string can say what it means.
RemoveTakes one box out and rewrites the others without it.
ForgetForget this filing leaves the tunnels up and only forgets the network on this computer.
Take downTake the network down brings the interface down on every box.

Private only: shut the ports the internet never needed

A private network is only worth having if the public doors get closed behind it. The Private only tab lists every port something is listening on, judged against the firewall: what it is, which service holds it, and who can reach it today — anyone on the internet, a list of addresses, or nobody.

One button per port. Vigia lets the port in from the private subnet and takes away the rule that let everyone in, in a single change, so the port is never open wider in between. The service is not touched and nothing restarts: it keeps listening where it listens, and the firewall decides who arrives. Undoing it is one press. The SSH row is guarded — that is the door the console is standing in.

The MTU, measured instead of guessed

An MTU larger than the path can carry is the one WireGuard fault that looks healthy from everywhere else. The interface comes up, every ping answers, the matrix is green — and then anything with a full-size packet in it stalls: a replication stream, a backup, a dump. Small packets cross, so nothing that only pings ever notices.

Measure the wires sends real packets down every pair and reports what each path takes and what the tunnel can carry inside it. The narrowest wire sets the number, and one button uses it. The same tab holds the keepalive — 25 seconds unless you say otherwise, under every common NAT timeout — and preshared keys, one per pair rather than one for the network, so taking one box does not hand over the rest. Nothing here touches a box on its own: filed settings reach every lens0.conf the next time the filing is applied, all the boxes at once.

A new key on one box, and every other box told

Rotating a WireGuard key by hand means one command on the box and then an edit on every other member, in the right order, without a typo. In Vigia it is one press on the member's row. The old private key is thrown away — that is what rotating is — a new pair is made on the box, and every other member is rewritten to expect the new public half. That box's tunnels are down from the moment the key changes until the job finishes, which is seconds.

What Vigia writes on each box

WireGuard's own tools from the distribution, three files, one firewall rule and a block of names. No agent, no daemon of ours, nothing listening for Vigia.

/etc/wireguard/lens-private.keyMade on the box, mode 600, and never read by Vigia. The interface loads it from this file, so it is not inside the configuration either.
/etc/wireguard/lens-public.keyIts public half: the only part of the pair the other members, and Vigia, ever see.
/etc/wireguard/lens0.confThe interface and its peers, Vigia's file whole. It is lens0, not wg0: a box with a WireGuard of its own from before keeps it, untouched.
51820/udp, between membersOne rule in the box's own firewall so the members reach each other. The mesh adds one interface and one address; the box's real network is not rerouted.
/etc/hosts, one blockThe other members by name, under .lens — local to each box, never resolved off it.
/ ON THE PRIVATE ADDRESSES

What rides it

Replication and Sentinel.

Build a MongoDB set, a PostgreSQL or MariaDB pair, or a Redis Sentinel set between members and the private addresses are what Vigia offers first. A database port let in from 10.99.0.0/24 only is a port the internet cannot see.

MongoDB, end to end

Backups and admin traffic.

A backup pushed to another server, a dump pulled across, an admin panel that should never have been public: all of it between private addresses, encrypted on the wire by WireGuard whether or not the service speaks TLS.

Databases

Your own machine as a peer.

Add my machine makes a key pair on your computer, gives the public half to every box, and writes the private half once into a file you import into the WireGuard app — on this computer or a phone. Vigia keeps no copy. Every box is then reachable at its private address from wherever you are.

A cache that was never public.

Redis bound and passworded from the first minute, and its port let in from the private network only: one press on the Private only tab, no restart.

Redis and Sentinel

/ QUESTIONS

Questions people ask

Does Vigia install an agent to run the VPN?

No. Vigia installs WireGuard's own tools from the server's distribution and writes three files under /etc/wireguard, one firewall rule and a block in /etc/hosts. The network runs on WireGuard alone; nothing of Vigia runs on the box, and the tunnels stay up with Vigia closed.

Where do the private keys live?

On the box each one was made on, in a file only root can read. A private key never leaves its server: Vigia does not read it, does not store it and does not put it in the configuration file. Only public keys are filed on your computer.

I already run WireGuard on a server. Will Vigia touch it?

No. Vigia's interface is lens0, with its own key files and its own configuration. An existing wg0 — or any other WireGuard interface — is shown in the reading and left exactly as it is.

How long does it take to build a mesh?

Nine servers that already had the WireGuard tools were wired into a full mesh, with all 72 tunnels answering, in 43 seconds, timed. A server without the tools gets them installed by the same job, which adds the time its package manager takes.

Can I close my database ports to the internet afterwards?

Yes, from the Private only tab: every listening port with who can reach it, and one button that lets the port in from the private subnet and removes the rule that let everyone in, as a single firewall change. The service is not restarted, and undoing it is one press.

Which servers can join?

Any Vigia server you can already log in to over SSH — Debian, Ubuntu, AlmaLinux or Rocky Linux — with a public address the others can dial on one UDP port. The first 10 Vigia servers are free.

Wire your own boxes together

Vigia is free for 10 servers. Nothing is installed on them to try it.

Download Vigia