Add WireGuard, DNS and more to the web UI and router-setup

Web UI: a WireGuard page (tunnels, peers, keys made on the router, client
configs with a QR code, import of wg-quick configs, live status), a DNS page
(records, wildcards, forward zones), interface dropdowns with VLAN devices,
IPv6 options and a local domain. router-setup asks about VLANs, IPv6 and
the domain. The router publishes its own name in DNS and hands the local
domain to DHCP clients; wg and jq are on the router. Includes a script
that takes over antigua's tunnels.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AeFqV9dZrK6nipHkPfyM4F
This commit is contained in:
2026-10-29 23:53:34 +01:00
co-authored by Claude Sonnet 5.5
parent 54040a1402
commit 84f6002d05
23 changed files with 2484 additions and 64 deletions
+5 -1
View File
@@ -37,6 +37,7 @@ let
dhcp
n
gw
192.168.10.1
hunter2hunter2
hunter2hunter2
@@ -58,6 +59,8 @@ let
pppoe-secret
gw
Home.test
home.test
192.168.10.1
hunter2hunter2
hunter2hunter2
@@ -128,7 +131,7 @@ pkgs.testers.runNixOSTest {
installer.wait_for_unit("multi-user.target")
with subtest("router-setup refuses to install without the disk name"):
installer.fail("printf '/dev/vda\\nn\\neth1\\neth2\\ndhcp\\nn\\n\\n\\nhunter2hunter2\\nhunter2hunter2\\n\\nno\\n' | router-setup")
installer.fail("printf '/dev/vda\\nn\\neth1\\neth2\\ndhcp\\nn\\n\\n\\n\\nhunter2hunter2\\nhunter2hunter2\\n\\nno\\n' | router-setup")
installer.fail("blkid /dev/vda1")
with subtest("router-setup writes a PPPoE uplink on a VLAN, shared with the LAN, with IPv6"):
@@ -142,6 +145,7 @@ pkgs.testers.runNixOSTest {
assert r["wan"]["ipv6"] == {"enable": True, "transport": "ppp"}, s
assert r["lans"]["lan"]["interface"] == "eth1" and r["lans"]["lan"]["ipv6"] == {"pd": True}, s
assert "vlan" not in r["lans"]["lan"], s
assert r["dns"]["domain"] == "home.test", s
assert "pppoe-secret" not in s
installer.succeed("grep -qx pppoe-secret /tmp/vlan-config/pppoe-password")
installer.fail("blkid /dev/vda1")