If you've set up a VPN recently, you've probably met WireGuard - it's the protocol now powering most modern VPN apps and built right into Linux. But what is it, and why did it take over so fast? In short: WireGuard is a VPN protocol that does more with less - tiny codebase, modern cryptography, and configuration simple enough to fit on a napkin. Here's a plain-English explanation.
What is WireGuard?
- WireGuard is a modern VPN protocol - the tech that creates the encrypted tunnel between your device and a server.
- It's small (~4,000 lines), fast, and secure, with fixed state-of-the-art cryptography.
- Configuration is just a public/private key pair per peer - far simpler than OpenVPN or IPsec.
- It's built into the Linux kernel and ideal for self-hosting your own VPN.
A VPN changes your IP. It does not change your browser.
A tunnel replaces the address a service sees. It changes nothing about what your browser announces on its own - fonts, screen, time zone, graphics stack - and that combination is often stable enough to recognise you across sessions, tunnel or no tunnel.
Measure your own browser fingerprint - passive, no questions, no account, no email.
How does WireGuard work?
A VPN protocol's job is to build an encrypted tunnel and decide what goes through it. WireGuard does this with a key-pair model: every device (peer) has a private key and shares its public key, exactly like SSH keys. Two peers that know each other's public keys can establish a tunnel - no certificates, no username/password, no complex negotiation.
Traffic is encrypted with a fixed, modern cipher suite (ChaCha20-Poly1305) and key exchange via Curve25519. Because the cryptography is fixed, there are no weak options to accidentally enable and nothing to "downgrade" - a frequent source of trouble in older protocols. WireGuard runs over UDP (on a default port of UDP 51820) and is connectionless by design, which is part of why it reconnects so smoothly when you switch networks.

What encryption does WireGuard use?
WireGuard's security comes from a small, fixed set of modern primitives - each with one job, none of them optional:
- Curve25519 - the key exchange (Diffie-Hellman) that lets two peers agree on a shared secret from their key pairs.
- ChaCha20 - the cipher that actually encrypts your data; fast in software, no special CPU instructions needed (great on phones and routers).
- Poly1305 - the authenticator that detects any tampering with a packet.
- BLAKE2s - the fast hash function used internally.
These are wired together with the Noise protocol framework, a well-studied design for secure handshakes. The tunnel is set up in a 1-RTT handshake (one round trip), and keys are rotated regularly for forward secrecy. Because the suite is fixed, there's no "cipher negotiation" step - the classic weak point that lets attackers downgrade older protocols.
Why did WireGuard replace OpenVPN?
- Speed. Less overhead than OpenVPN/IPsec, especially on mobile and on reconnect.
- Auditability. ~4,000 lines vs tens of thousands - small enough to actually review.
- Simplicity. A config file is a handful of lines; key management is just key pairs.
- Kernel integration. Merged into the Linux kernel (5.6+), so it runs efficiently and ships everywhere.
That combination is why providers and self-hosters alike standardised on it. If you're choosing a protocol, see our deep dive on WireGuard vs OpenVPN - which to choose.
Where can you run WireGuard?
The same protocol ships in a few forms, which is handy to know when something behaves differently across devices:
- In the Linux kernel - the native, fastest implementation, merged since kernel 5.6. This is what a VPS or Raspberry Pi server uses.
- wireguard-go - a userspace version in Go, used where there's no kernel module (older systems, some containers). Correct but slower.
- BoringTun - a userspace implementation in Rust (originally from Cloudflare), used by some apps and on platforms without kernel support.
- iOS, Android, Windows, macOS - the official apps wrap one of these so the same key-based config works everywhere.
For everyday use you don't pick one - the app or OS does - but it explains why a kernel-backed server outperforms a phone acting as a server.
What are WireGuard's limits?
The two limits that bite in practice are both measurable rather than theoretical. WireGuard has no built-in path-MTU discovery, so a link that carries small packets fine will stall on large transfers until you set the interface MTU by hand, mtu-probe measures what your path actually carries. And because every peer is identified by its key and its address, a second client copied from the first silently knocks it off the tunnel; wg-clients-audit catches duplicate addresses and reused keys across a folder of configs.
WireGuard isn't magic. Raw WireGuard uses UDP, which some restrictive networks (and a few countries) block or throttle - there, you need obfuscation or a TCP fallback. By default it also assigns each peer a static internal IP and can retain some connection state, which is why privacy-focused commercial providers add their own no-logging layer on top. None of this is a flaw so much as a design trade-off favouring speed and simplicity.
Can you run your own WireGuard server?
Because WireGuard is so lightweight, you don't need a commercial VPN to use it. A cheap VPS comfortably runs a personal WireGuard server, so your traffic passes through a machine you control and no company logs it. A Contabo VPS at €5.50/month is plenty for one. Beginner-friendly tools like PiVPN make it a 10-minute job - start with our best self-hosted VPN guide and WireGuard config templates.
The bottom line
WireGuard is the modern default for VPNs because it's fast, lean, secure and simple: a few thousand lines of code, fixed strong cryptography, and key-based config anyone can manage. Its trade-off is UDP visibility on hostile networks, solved with obfuscation or a TCP fallback. Best of all, its simplicity makes self-hosting your own VPN genuinely easy - the most private option, because then no third party sees your traffic at all.
★ Nuremberg GDPR datacenter · ✓ Dedicated IPv4 included · 200+ Mbps guaranteed
Self-host your VPN on your own VPS → ContaboFull root access · public IPv4 · pick your region→


