Server
Overview
The EON Path server is distributed as two Debian packages:
eonpath-api— the management API (PQKS: post-quantum key server). Stores registered client public keys and endpoint configuration, and exposes a REST API and web UI.eonpath-server— the tunnel server daemon. It authenticates clients with the ML-DSA-87 challenge-response protocol and, in a single process, serves both of EON Path’s connection methods: an SSH-based proxy method and a WireGuard-based routing method (the VPN this documentation focuses on). The routing method is enabled by default in the packaged systemd unit.
Both packages install systemd units, create a dedicated eonpath system
user, and generate the secrets and host keys the services need on first
install.
Prerequisites
- Debian 11+ or Ubuntu 22.04+, amd64
- Root or sudo access
- A firewall that allows inbound UDP on the WireGuard port (see Firewall below)
Only amd64 .deb packages are published; there is currently no arm64
package.
Install the packages
Download the eonpath-api and eonpath-server .deb files for your
release, then install the API first so the server’s public-key lookups work
immediately:
sudo apt install ./eonpath-api_*.deb # API + web UI
sudo apt install ./eonpath-server_*.deb # SSH proxy + WireGuard VPNInstalling with apt install ./<file>.deb (rather than dpkg -i) also
resolves the packages’ dependencies (libc6, iproute2) automatically.
On first install, each package’s postinstall script:
- creates the
eonpathsystem user and group (shared by both packages) - creates
/etc/eonpathand/var/lib/eonpath - generates an ed25519 SSH host key for
eonpath-server - generates random
JWT_SECRETandDB_ENCRYPTION_KEYvalues foreonpath-api - seeds
/etc/eonpath/server.confand/etc/eonpath/server.envfrom their.examplefiles if they don’t exist yet — an existing file is left alone - enables and starts the corresponding systemd service
What gets installed
| Path | Description |
|---|---|
/usr/bin/eonpath-server | server binary |
/usr/bin/eonpath-api | API binary |
/lib/systemd/system/eonpath-server.service | systemd unit |
/lib/systemd/system/eonpath-api.service | systemd unit |
/usr/bin/eonpath-license | licence helper shipped with the API package |
/etc/eonpath/server.env | server configuration (environment file), seeded from server.env.example |
/etc/eonpath/server.conf | endpoint registration and endpoint list, seeded from server.conf.example (mode 0640) |
/etc/eonpath/api.env | API configuration, including generated secrets |
/usr/share/eonpath/web | the API’s web UI |
/usr/share/doc/eonpath-*/ENDPOINT_LIFECYCLE.md | standby/active states, activation and the evaluation window |
/etc/logrotate.d/eonpath-{server,api} | rotation for the audit logs |
/var/lib/eonpath/ | state: SSH host key, authorized_keys, PQKS database |
Configure the server
Server settings live in /etc/eonpath/server.env, an environment file read
by the systemd unit:
# SSH listener (post-quantum SSH proxy method)
EONPATH_SSH_ADDR=0.0.0.0:2022
# Local PQKS API endpoint (used to look up client keys when a client connects)
EONPATH_API_ENDPOINT=http://localhost:8080
# HTTP CONNECT proxy address (for the proxy method's tunnels)
EONPATH_PROXY_ADDR=localhost:2290
# WireGuard VPN settings (for the routing method)
EONPATH_WG_KEX_ADDR=0.0.0.0:9998
EONPATH_WG_LISTEN_PORT=51820After editing, restart the service to apply the change:
sudo systemctl restart eonpath-serverSee Configuration for the full reference of server settings.
Start and enable the service
The postinstall script already enables and starts eonpath-server on a
fresh install. If you need to do it manually (for example after changing
the unit file):
sudo systemctl daemon-reload
sudo systemctl enable eonpath-server
sudo systemctl start eonpath-serverVerify it’s running
sudo systemctl status eonpath-server
sudo journalctl -u eonpath-server -fIf the WireGuard routing method is enabled (the default), the server also
brings up a wg0 interface:
ip addr show wg0Firewall
Clients connect over UDP to the WireGuard routing method. Open the WireGuard port in your firewall:
# UFW
sudo ufw allow 51820/udp comment 'EON Path WireGuard'
# iptables
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPTThe routing method also needs its TCP key-exchange port reachable before a client can bring up a WireGuard tunnel:
sudo ufw allow 9998/tcp comment 'EON Path WireGuard key exchange'Clients connect to the server using its public address — a DNS name (for
example vpn.example.com) or IP address (for example 203.0.113.10).
If you also use the SSH-based proxy method, open its port as well:
sudo ufw allow 2022/tcp comment 'EON Path SSH proxy'Upgrading and removing
# Upgrade: install a newer .deb over the current install. Config, host
# keys, and secrets are preserved.
sudo apt install ./eonpath-server_<newer>_amd64.deb
# Remove, keeping state (host key, authorized_keys, api.env)
sudo apt remove eonpath-server eonpath-api
# Purge, wiping /etc/eonpath, /var/lib/eonpath, and the eonpath user
sudo apt purge eonpath-server eonpath-api