03 Systems & networks
WireGuard
A few thousand lines of auditable kernel code instead of a VPN appliance with a support contract.
- Role
- Private networking
- Licence
- GPL v2
- Since
- 2016
- Upstream
- Project site ↗
WireGuard is how the machines, the offices and the laptops talk to each other. It provides one flat encrypted network, and public keys are the entire identity model.
Why we still choose it
The most important security property of a VPN is whether anyone has read the code, more than which ciphers it supports. The previous generation of VPN software runs to hundreds of thousands of lines, with decades of accumulated negotiation machinery. WireGuard is small enough that reviewing it is a realistic exercise, and it has been reviewed.
There is one fixed cipher suite, so there is nothing to misconfigure and no downgrade attack. Peers are identified by public keys, as in SSH, so revoking a device means deleting a stanza instead of running a certificate authority. It is connectionless and runs in the kernel, so a laptop moving from office wifi to a train keeps its tunnel, which is what staff notice.
How we run it
It is declared in NixOS with everything else, and the keys are held outside the repository. We design the topology up front: hub-and-spoke where the number of peers justifies it, full mesh where it does not. Services that need a second factor get it at the service, not at the tunnel.
Where it falls short
WireGuard is only a tunnel. It has no user management, no portal and no built-in multi-factor authentication, and key distribution is left to you. All of these are smaller problems than running a certificate authority, but they still need handling, and the operational layer around WireGuard is most of what we are paid for.