Raising the server
The server needs a machine with a public address and a domain name pointing at it. The install script does the rest: it registers the systemd unit, configures nginx and obtains a certificate.
sudo DOMAIN=vnet.example.com sh install.sh
# then open https://vnet.example.com/admin
# sign in as admin / admin and change the password
Resources are modest: a single core and 512 MB of memory carry dozens of connected machines, because the server forwards frames rather than processing them.
Installing the client
The client needs two things: the address of your server and an invitation code from it. Everything else — the adapter, the service, the address — is arranged for it.
sudo dpkg -i elx-vnetwork_*.deb
sudo elxvnet join -server https://vnet.example.com -invite ELX-XXXX-XXXX-XXXX
sudo systemctl enable --now elxvnet
elxvnet status
cd "C:\Program Files\ELX-VNetwork"
elxvnet join -server https://vnet.example.com -invite ELX-XXXX-XXXX-XXXX
elxvnet -service restart
elxvnet status prints the connection state, the address that was issued and every neighbour in the segment. Most questions are answered by that one line before anything else is opened.Segments and invitations
A segment is an independent network. Machines inside one see each other; machines in different segments do not, even though they share a server. A site, a customer or a test bench each gets its own.
- Create a segment in the panel and give it a name you will still recognise in a year.
- Generate an invitation code — it can be limited to one use or left open for a batch of machines.
- Install the client with that code.
- Approve the machine in the panel: until you do, it is waiting rather than connected.
Reading the member table
| Column | What it tells you |
|---|---|
| Address | The permanent address in the segment, unchanged across reconnections |
| Version | The client version — an old one here is what the update button is for |
| Online | How long this session has lasted; a number that keeps resetting means an unstable link |
| Speed | Current throughput in both directions |
| Traffic | Totals for the session |
| System | The operating system, memory in use and processor load, refreshed every half minute |
The system column comes from what the kernel already knows; nothing extra is installed on the remote machine to produce it.
The browser terminal
Any Linux machine in the segment can be opened as a terminal from the panel. This is an ordinary SSH session: the remote machine authenticates you itself, with its own accounts and its own password policy. The panel does not store those credentials and cannot bypass them.
Updating the clients
- Windows. The client updates itself, without asking.
- Linux. A machine running an old version can be updated from the member table: the panel opens an SSH session and performs the package update for you.
- By hand. Download the new package and install it as before; the invitation and the address survive the upgrade.
Notifications
The server can tell you when a machine disappears or comes back, when somebody is waiting for approval, and when somebody has failed to authenticate. Delivery is by Telegram, by e-mail, or both, with timestamps in your own time zone.
When a machine will not connect
| Symptom | Where to look |
|---|---|
elxvnet status shows no connection | The server address, the certificate, or an outbound proxy that intercepts TLS |
| Connected, but no address issued | The machine is still waiting for approval in the panel |
| Address issued, neighbours do not answer | The local firewall is blocking the virtual adapter — allow it as a private network |
| Windows sees the adapter but no network neighbourhood | Network discovery and file sharing are off for that adapter's profile |
| The connection drops every few minutes | A mobile link with an aggressive idle timeout, or two clients installed with the same identity |
| Everything works except one protocol | That protocol is bound to a different adapter — check the interface order and metrics |