Head-to-head
| Feature | WireGuard | IKEv2 (with IPsec) |
|---|---|---|
| First released | 2016; in the Linux kernel since 5.6 (March 2020) | 2005 (RFC 4306); current standard RFC 7296, 2014 |
| Code | Under 4,000 lines for Linux, excluding crypto | IKE plus the IPsec stack: many times larger |
| Ciphers | One fixed set: ChaCha20-Poly1305, Curve25519, BLAKE2s | Negotiated; AES-GCM typical |
| Built into the OS | Linux, FreeBSD and OpenBSD kernels; an app elsewhere | Windows, macOS, iOS, iPadOS, Android 11 and later |
| Changing networks | Built in: peers are identified by key, not address | MOBIKE (RFC 4555) |
| Transport | UDP, any port | UDP ports 500 and 4500 |
| Obfuscation | None by design | None |
| Formal verification | Yes: Tamarin and CryptoVerif proofs, verified Curve25519 code | Long standards review; no equivalent published proof of a complete implementation that we could cite |
| Throughput (whitepaper test) | 1,011 Mbps | 825 Mbps (ChaCha20-Poly1305), 881 Mbps (AES-256-GCM) |
| Ping (same test) | 0.403 ms | 0.501 ms and 0.508 ms |
Speed rows from the benchmark in the WireGuard whitepaper: iperf3 between two laptops on gigabit Ethernet, averaged over 30 minutes. IKEv2 sets up IPsec, so IPsec's numbers are its numbers. WireGuard's site says the test is old and both have gotten faster since.
Speed: close, with WireGuard ahead
Unlike OpenVPN, both of these run their data path inside the kernel, so the big user-space penalty does not apply. The gap that remains comes from WireGuard's design: a single round-trip handshake, no cipher negotiation, and a stream cipher, ChaCha20, that is fast in plain software. On a laptop with AES hardware acceleration the two are close; on a phone or a router without it, ChaCha20 pulls ahead, and WireGuard can also spread its work over several cores.
Convenience: IKEv2 needs no app
IKEv2 is part of the VPN client in Windows, macOS, iOS, iPadOS and Android 11 and later. You can type in a server, a certificate and a username, and connect, with nothing to install. WireGuard is in the Linux and BSD kernels and otherwise needs an app, either the official WireGuard app or your VPN provider's. In practice the app is what you use with a VPN service anyway, and it is the app that picks the protocol.
Security: simple versus flexible
WireGuard's whole Linux implementation is under 4,000 lines of code, which is why it could be read in full and proven with formal tools. It offers no cipher choice: if a primitive were ever broken, the protocol version changes and every peer updates, with no fallback to a weak setting. IKEv2 negotiates its ciphers, which lets administrators choose and lets them choose badly; a VPN provider makes that choice for you, and the good ones pick AES-GCM. Both are secure when deployed well. Neither hides that you are using a VPN, and neither runs over TCP, so a network that blocks UDP stops both.
Privacy: the same question for both
Any tunnel protocol has to know where to send your packets, so the server holds your current address while the session is up: WireGuard pairs it with your public key in memory, IPsec with the security association. What matters is what the provider does with it. GhostShield VPN runs WireGuard as a no-logs VPN: nothing from the tunnel, your real IP address included, is stored on our servers. That is the question to ask any provider, whichever protocol it uses.
Which should you use?
- WireGuard for speed, battery life on phones, and a codebase small enough to audit. This covers most people most of the time.
- IKEv2 when you cannot install apps, or you run your own server and want the client that ships with the operating system.
- OpenVPN over TCP 443 when the network blocks UDP entirely; see OpenVPN vs IKEv2 and WireGuard vs OpenVPN.
Try WireGuard with GhostShield VPN
GhostShield VPN runs WireGuard with ChaCha20-Poly1305 on Windows, Mac, iPhone, iPad, Android and Google TV, with a 7-day free trial of every feature. See how the free trial works.
Questions people ask
Should I use IKEv2 or WireGuard?
WireGuard, when your VPN offers it: it is faster, its code is small enough to have been audited in full, and it keeps the connection when you move between Wi-Fi and mobile data. Pick IKEv2 when you want the VPN client built into your operating system with no app to install, or when your VPN service does not offer WireGuard.
Is IKEv2 faster than WireGuard?
Not in the published measurements. In the WireGuard whitepaper benchmark on a gigabit link, WireGuard reached 1,011 Mbps with a 0.403 ms ping, and IPsec, the data path IKEv2 sets up, reached 825 Mbps with ChaCha20-Poly1305 and 881 Mbps with AES-256-GCM, with pings around 0.5 ms. The test is old, and WireGuard’s site notes that both have gotten faster since, with WireGuard still ahead in some cases thanks to multi-threading.
Is WireGuard a good VPN?
WireGuard is a protocol, not a VPN service, and it is a very good one: in the Linux kernel since version 5.6 (March 2020), under 4,000 lines of code, one fixed set of modern ciphers, and formally verified. Whether a VPN built on it is good depends on the provider: how it handles the IP addresses WireGuard keeps in memory, whether it keeps logs, and how its servers are run.
What are the disadvantages of WireGuard?
It only runs over UDP, so a network that blocks UDP stops it. It has no obfuscation, so deep packet inspection can recognise it. The server keeps each connected user’s latest address in memory while the session is active, which the provider has to handle with care. And it is not built into Windows, macOS, iOS or Android the way IKEv2 is, so it always needs an app.
What is the difference between WireGuard and WireGuard TCP?
WireGuard itself uses only UDP. “WireGuard over TCP” means a provider wraps the WireGuard packets in a TCP connection with an extra layer, which the WireGuard project describes as the job of a separate obfuscation layer. It helps on networks that block UDP but costs some speed.
Does IKEv2 roam between networks like WireGuard?
Yes. IKEv2 does it through MOBIKE (RFC 4555), an extension that lets the addresses of the session change while it stays up. WireGuard does it by identifying each peer by its public key rather than its address, so a packet arriving from a new address is simply accepted. The effect for you is the same: the tunnel survives the switch from Wi-Fi to mobile data.
Which protocol does GhostShield VPN use?
WireGuard with ChaCha20-Poly1305, in every app, on Windows, Mac, iPhone, iPad, Android and Google TV.
Sources
- WireGuard whitepaper by Jason A. Donenfeld: code size and the benchmark against IPsec and OpenVPN
- WireGuard performance page: the note that the benchmarks are old
- WireGuard known limitations: UDP only, no obfuscation
- WireGuard formal verification: Tamarin, CryptoVerif, HACL* and Fiat-Crypto
- RFC 7296, Internet Key Exchange Protocol Version 2 (IKEv2)
- RFC 4555, IKEv2 Mobility and Multihoming Protocol (MOBIKE)
- Microsoft Learn: VPN connection types in Windows
- Apple Platform Deployment: VPN overview
- Android developers: Ikev2VpnProfile, added in API level 30
- Wikipedia: WireGuard, merged into Linux 5.6 in March 2020