
Part 1 (2023): Noise, HKDF, CryptoKey routing, UDP-only, ~4k lines, kernel path. This sequel covers what the protocol left open — and what is contested in 2026.
By 2026 the core argument from Part 1 is settled: WireGuard is the default encrypted underlay on Linux, in most current VPN products, and in the mesh overlays that replaced a large share of corporate remote-access stacks. Jason Donenfeld’s design — a small, formally reasoned cryptographic core and a kernel-resident fast path — prevailed over OpenVPN’s userspace size and IPsec’s configuration surface.
What remains open sits around the packet: how DPI classifies it, how post-quantum key exchange can be added without breaking the one-datagram handshake, and who operates the coordination plane that issues keys and ACLs. This article is that layer. It is not a second tour of ChaCha20.

Source: YouTube - WireGuard with Jason Donenfeld (kernel work, formal verification, post-quantum)
A stable grammar is easy to classify
WireGuard’s stability is also its operational weakness: the on-wire format is fixed, and therefore easy to fingerprint.
A Handshake Initiation is 148 bytes. The type field’s first octet is 0x01, followed by reserved zeros. A Handshake Response is 92 bytes. Those sizes are the same in a homelab, at a commercial exit, and on a Tailscale peer. Breaking Curve25519 is unnecessary; a firewall rule on length and type is enough. Deep packet inspection classifies shape, not plaintext.
Part 1 already noted that WireGuard is UDP-only and cannot present itself as TCP/443. In 2023 that was a side remark. In 2026 it is the main constraint on any network that treats unknown UDP as hostile: hotel captive portals, corporate TLS inspection, and national filters (Russia’s TSPU is why AmneziaWG was built).
Work since then has split three ways:
- Keep standard WireGuard and accept the fingerprint (labs, ordinary ISPs, meshes that can hole-punch).
- Fork or encapsulate the transport so the cryptography stays and the visible protocol changes (AmneziaWG, userspace camouflage, QUIC/MASQUE-related tunnels).
- Wrap or replace the handshake for post-quantum security (Rosenpass, PQ-WireGuard papers) without replacing the data plane.
There will not be a single WireGuard release that absorbs obfuscation, identity, and post-quantum KEMs. The active work is adjacent to the protocol.
Kernel, userspace, netstack
“WireGuard” is not one binary. In 2026 you choose an implementation class:
| Class | Where it runs | Typical use | Cost |
|---|---|---|---|
In-kernel (wireguard, Linux ≥5.6; routine in 6.1x LTS) |
Kernel | Linux servers, routers, high packet rates | Fast; privileged; hard to ship on locked-down hosts |
Userspace Go (wireguard-go) |
Process | macOS, Windows, mobile, containers without CAP_NET_ADMIN |
Portable; easier to fork (Amnezia started here) |
| Userspace netstack (gVisor-style TCP/IP) | Process, often without TUN | Tailscale/Headscale clients under strict OS policy | NAT and ACLs in userspace; not kernel throughput |
Multi-gigabit figures assume kernel path + AES-NI or NEON + a competent NIC. Phones and locked corporate laptops run userspace. Do not apply a kernel benchmark to a Go process on Windows.
Windows still uses Wintun (Donenfeld’s kernel TUN). Apple uses Network Extension. Those shims — not Noise — account for most client bugs.
Network namespaces remain the right test: two netns, two wg0, iperf3, no VPN application in the path. If a number cannot be reproduced there, the problem is not the protocol.
DPI and AmneziaWG
Classification without decryption uses:
- Fixed handshake sizes (148 / 92)
- Fixed message types (initiation, response, cookie, transport)
- Keepalive timing (
PersistentKeepalive) - Payload entropy after a short header
Encapsulation (wstunnel, shadowsocks, udp2raw, TLS on 443) hides the fingerprint behind another protocol. The cost is latency, another codebase, and TCP-over-TCP if the wrapper is chosen badly.
AmneziaWG (2024–2026) forks the implementation instead of wrapping it. Cryptography remains Noise_IK, ChaCha20-Poly1305, and BLAKE2s. What changes is what an observer sees: randomised type headers (H1–H4), junk padding (S1–S4), junk packets (Jc / Jmin / Jmax), and in 1.5/2.0 protocol mimicry (I1–I5, Custom Protocol Signature). Both ends must share the same obfuscation parameters. It does not interoperate with stock wg.
That is the trade: interoperability versus invisibility. Mainline WireGuard will not take this on. Donenfeld’s project is built to be auditable; camouflage works against audit.
A homelab overlay on a residential ISP does not need AmneziaWG. Against a state DPI system, unmodified WireGuard is easy to detect.
Post-quantum: the handshake that does not fit
Part 1 mentioned an optional pre-shared key as a hedge against quantum attacks on Diffie–Hellman. That PSK is still the official mitigation: a high-entropy secret mixed into the handshake so a later break of Curve25519 does not recover old sessions. In practice it is rarely rotated.
Research in 2025–2026 is more ambitious and more constrained.
Constraint: WireGuard keeps the handshake in one UDP datagram (path MTU; no handshake fragmentation). Classical Noise_IK fits. A Kyber/ML-KEM ciphertext does not, unless packetisation changes or the PQ exchange runs beside WireGuard.
Rosenpass takes the second path: a post-quantum key exchange (Classic McEliece and Kyber/ML-KEM) that supplies a WireGuard PSK. Two daemons run; WireGuard still encrypts the data plane. Releases continued in 2026 (including v0.2.3). European sovereign-tech and NGI-style funding treat it as infrastructure. Distro-wide defaults are not there yet.
PQ-WireGuard papers (Hülsing et al., IEEE S&P 2021; later analyses including 2025 ePrint) replace DH with KEMs inside a Noise-like handshake. The remaining problems are ciphertext size, DoS cookies, and the one-packet rule. More proofs and prototypes are likely before a merge into mainline Linux.
NIST’s ML-KEM is the KEM most deployments will name. McEliece remains the conservative second algorithm in the Rosenpass design.
Overlays and the coordination plane
wg does not implement NAT traversal, overlay DNS, or “who may reach the Kubernetes API.” That is why Tailscale and similar products own the product in 2026, while WireGuard owns the cipher.
Tailscale consists of:
- a coordination server — identity, peer public keys, ACL policy, MagicDNS
- DERP relays — HTTPS relays when UDP hole-punching fails (encrypted, not peer-to-peer)
- NAT traversal so two CGNAT endpoints can still attempt a direct WireGuard path
- a userspace netstack when a privileged TUN is unavailable
- control-plane identity — SSO, device posture, related features — above WireGuard
When the path is direct, WireGuard still encrypts node to node. Metadata (which nodes exist, who may speak, which DERP was used) lives on the coordination server.
| Requirement | Approach |
|---|---|
| Few nodes, full custody | Plain wg + Git + Ansible |
| Tailscale clients, self-hosted coordination | Headscale (optional self-hosted DERP) |
| Minimal operations, SaaS coordination | Tailscale or similar |
| Mesh without Tailscale clients | NetBird, innernet, or wg plus your own controller |
Headscale provides MagicDNS, subnet routers, and exit nodes with a coordination plane you operate. Peers still speak WireGuard.
Encrypted packets do not imply that nobody holds a roster of your nodes. The coordination plane is that roster.
Identity: keys are not people
WireGuard authenticates Curve25519 keys. It does not represent employees, laptops, or CI runners. Organisations that “standardise on WireGuard” and then look for SSO inside the protocol have skipped Part 1.
What actually ships:
- Identity provider (OIDC)
- Overlay controller (Tailscale, Headscale, NetBird) issues or attests device keys
- WireGuard carries packets
- Application RBAC remains (
kubectl, SSH CA, overlay ACLs)
A public key in a chat log is not an access-control process. One keypair per device. Rotate on loss. Do not share a single laptop key across people.
Constraints that have not moved
| Constraint | Current practice |
|---|---|
| UDP classification | Unchanged; AmneziaWG or a wrapper if concealment is required |
| CGNAT / no port forward | Overlay + DERP, or a VPS bounce with standard WireGuard |
| Captive portals | Authenticate in a browser first; WireGuard cannot complete a splash page |
| IPv6 leaks | Half-configured IPv6 bypasses the tunnel; disable it or route it |
| DNS | Bringing wg-quick up does not put the resolver inside the tunnel; pin DoH/DoT or overlay DNS |
| Userspace vs kernel | Same protocol, different packet rates |
| Compliance checklists | IPsec still appears on some auditor lists; terminate WireGuard on a platform they already accept |
| Multi-hop | Two hops if required; a third hop is usually a design error |
What is already under way
- Where states filter UDP, DPI and camouflage continue to escalate. AmneziaWG 2.x and commercial “stealth WireGuard” products will spread. Mainline WireGuard will not follow.
- Headscale and self-hosted DERP are the usual next step after
wg-quickfor operators who refuse a SaaS node list. - Rosenpass-class PSK sidecars are being packaged (Nix, Debian, possibly Kubernetes) without becoming a default.
- MASQUE and CONNECT-UDP (HTTP/3 tunnels) continue to absorb consumer “VPN-like” privacy. They will not replace kernel WireGuard on an admin path to a cluster, but they will reduce demand for a traditional VPN client on phones and browsers.
Choosing a plane
- Few nodes, trusted path, hardware you control — kernel
wg, public keys in Git, split tunnel, DNS inside the overlay. Pair with Talos: management APIs only on overlay prefixes. - Many devices, CGNAT, several operators — Headscale, or Tailscale if the node list may live with a vendor. Self-host DERP if metadata matters.
- Hostile DPI — AmneziaWG or a wrapper you understand; do not expect peers with stock
wg. - Store-now, decrypt-later — PSK now; Rosenpass when you can run a second daemon.
- Do not stack three WireGuard hops “for privacy.” Change the exit jurisdiction or use a tool built for anonymity.
Privacy is still a stack. WireGuard is still the underlay. The 2026 error is to treat the underlay as the whole problem.
Final thoughts
Part 1 described the cryptographic engine. Part 2 states what that engine is not: invisible on the wire, post-quantum by default, or an identity system.
The next years will not replace WireGuard. They will add camouflage forks, post-quantum sidecars, coordination planes, and HTTP/3 tunnels around it. Own the path, own the coordination list, and decide which fingerprint you are willing to present.
The website and the information contained therein are not intended to be a source of advice. Networking and cryptography choices have operational and legal consequences; verify configurations and threat models independently.
Addendum: AmneziaWG 2.x, Rosenpass 2026 releases, Tailscale/Headscale behaviour, and PQ-WireGuard literature reflect mid-2026 public docs and papers; re-check upstream before deployment. Editorial assembly from a Markdown vault with AI assistance.


