Add wireguard-ui-multi core: multi-server DB, WireGuard manager, REST API, UI, installers

Implements the from-scratch multi-server WireGuard management fork per
CLAUDE.md spec: sqlite schema (servers/peers/audit_log/users), Curve25519
key generation, per-interface config rendering + wg-quick/systemd control,
nftables hook scaffolding, session+CSRF-protected REST API with QR code
and config download endpoints, a minimal vanilla-JS web UI, legacy
wg0.conf migration, and both a native installer and a Proxmox LXC
provisioning script (with auto-detected latest Debian template).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sysops
2026-07-10 02:53:14 +02:00
co-authored by Claude Sonnet 5
parent 3d6608ef80
commit 3b3ffd8ebf
26 changed files with 3236 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>wireguard-ui-multi — Server</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<p><a href="/">&larr; Zurück zum Dashboard</a></p>
<h1 id="server-name">Server</h1>
<p id="server-error" class="error"></p>
<table class="details">
<tbody>
<tr><th>Interface</th><td id="d-interface"></td></tr>
<tr><th>Port</th><td id="d-port"></td></tr>
<tr><th>Address Range</th><td id="d-address"></td></tr>
<tr><th>DNS</th><td id="d-dns"></td></tr>
<tr><th>MTU</th><td id="d-mtu"></td></tr>
<tr><th>Status</th><td id="d-status"></td></tr>
</tbody>
</table>
<div class="actions">
<button id="btn-start">Start</button>
<button id="btn-stop">Stop</button>
<button id="btn-reload">Neu laden</button>
<button id="btn-download">Config herunterladen</button>
</div>
<h2>Peers</h2>
<table id="peers">
<thead>
<tr><th>Name</th><th>Email</th><th>Allowed IPs</th><th>Aktiv</th><th>Aktionen</th></tr>
</thead>
<tbody></tbody>
</table>
<h2>Neuen Peer hinzufügen</h2>
<form id="peer-form">
<input type="text" name="name" placeholder="Name" required>
<input type="email" name="email" placeholder="Email">
<input type="text" name="allowed_ips" placeholder="Allowed IPs, z.B. 10.20.22.5/32" required>
<input type="number" name="persistent_keepalive" placeholder="Persistent Keepalive (s)" value="25">
<label><input type="checkbox" name="use_preshared_key"> Preshared Key verwenden</label>
<button type="submit">Peer hinzufügen</button>
<p id="peer-error" class="error"></p>
</form>
<div id="qrcode-modal" class="modal hidden">
<div class="modal-content">
<button id="qrcode-close">Schließen</button>
<img id="qrcode-img" alt="QR Code">
</div>
</div>
<script src="/static/server.js"></script>
</body>
</html>