A VPN tab: the tunnels, and who is on them

Beside Network, per machine. Every WireGuard interface on the machine in the
switcher, with its address, listen port and public key, and under it the peers:
name, allowed addresses, last handshake, where they connect from, and what they
have moved.

Per machine is the point rather than a limitation. The tunnel devices dial into
and a tunnel a machine dials out through are different boxes here, and putting
them on one page would invite the question of which box you were looking at.

The kernel is the truth and the configuration only supplies names: wg show all
dump has the handshakes and the counters and knows nothing but public keys, so
the # comment above a peer in a wg-quick file, or a UCI section's description on
OpenWrt, is read alongside purely to label them. Whether a tunnel is dialled or
dialling is worked out from the shape of its peers, and says neither when it
cannot tell.

Online means a handshake in the last three minutes, and the tab says so in as
many words: WireGuard is silent when idle, so there is no connection to be in.

Read-only, and no secrets leave: the private key is the second column of the
dump and is read past, pre-shared keys are noted as present and never read.

The Network tab keeps listing tunnels as the interfaces they are, and hands off
to here for anything about them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Mitchell-Johnson
2026-09-27 21:59:30 -07:00
co-authored by Claude Opus 5
parent 9c7848907b
commit 6f634bbe11
10 changed files with 686 additions and 4 deletions
+24
View File
@@ -629,6 +629,30 @@ Decisions worth keeping:
history is the obvious next step and deliberately not built yet — the cron shape for it
already exists twice over (ZFS snapshots, Docker image updates).
## VPN tab (2026-09-27)
A **VPN** tab beside Network, per machine: every WireGuard tunnel on the machine in the
switcher, and the devices on it — name, address, last handshake, where it connects from, and
what it has moved.
- **Per machine is the point, not a limitation.** The tunnel people dial into and a tunnel a
machine dials out through are on different boxes here (`gate` and `hamtv`), and a combined
view would invite exactly the question "which box is this on".
- **The kernel is the truth, the config only supplies names.** `wg show all dump` has the
handshakes and counters and knows nothing but public keys; names come from the `# comment`
above a peer in a wg-quick file, or a UCI section's `description` on OpenWrt. Both are read
only to label what the kernel already said.
- **Server or client is worked out, not declared.** A peer allowed `0.0.0.0/0` that has an
endpoint is a way out, so a tunnel holding one is this machine dialling out; a tunnel with a
listen port and peers is one being dialled. Anything else says neither rather than guessing.
- **"Online" is a handshake in the last three minutes**, and the tab says so. WireGuard is
silent when idle; there is no connection to be in, and a tab claiming otherwise would be
lying twice a day.
- **Read-only, and no secrets.** Private keys are in the second column of the dump and are
read past; pre-shared keys are noted as present and never read. Adding or editing peers is
not here: it means generating keys and writing the machine's network configuration, which is
a bigger thing than this tab, and a bad thing to get half right.
## To do
- **Grow the Files tab until copyparty can go** — asked for 2026-09-23 as two items (Files