Decision 01
One WireGuard server instance per client
- Context
- Per-user policy (MFA, kill switches, isolation) needs an enforcement point per device. A single shared interface makes per-client firewall targeting messy.
- Decision
- A one-to-one mapping between each client and a server-side WireGuard instance on its own random UDP port, with PostUp and PostDown directives writing that client’s routes and iptables rules.
- Trade-off
- Interface and port sprawl, and putting the server behind a port-forwarding router meant forwarding a moving target.
- Outcome
- Clean per-device control, including a client-to-client toggle and per-profile rules. Once the policy model matured, the v2.1 rewrite consolidated new clients onto one shared listening port, making router setups trivial.