layout: page title: Comparison of VPNs permalink: /blog/comparison-of-vpns/ keywords: vpn,self-meshing,mesh,tinc,n2n,tailscale,zerotier,nebula description: In this blog post, I'll review various self-meshing VPN solutions such as Tinc, n2n, or Zerotier and take a look at which ones are ready for use on a Virtual Internet Exchange Point (VIXP). lang: en date: 2023-12-13 00:00:00 +0100 feed: false
Criteria | WireGuard | OpenVPN | fastd | Tinc | strongSwan with IPsec/IKEv2 |
---|---|---|---|---|---|
License | GPLv2 / MIT | GPLv2 | 2-Clause BSD | GPLv2 | GPLv2 |
Free software | Yes | Yes | Yes | Yes | Yes |
Android support | Yes | Yes | No | Yes | Yes |
- In F-Droid | Yes, Unofficial app | Yes, Semi-Official app | - | Yes | Yes |
- In IzzyOnDroid | Yes | No | - | No | No |
Windows support | Yes | Yes | No | Yes | No |
Linux support | Yes | Yes | Yes | Yes | Yes |
- In Arch Linux | Yes | Yes | Yes | Yes | Yes |
- In Debian packages | Yes | Yes | Yes | Yes | Yes |
- In Alpine Linux | Yes | Yes | Yes | Yes | Yes |
Peer-to-Peer / Site-to-Site | Yes | Yes | Yes | Yes | ? |
Client / Server | No | Yes | No | No | No |
Roadwarrior | Yes | Yes | Yes | Yes | Yes |
Authentication and encryption methods | |||||
- perfect forward secrecy (PFS) | Yes | Yes | Yes | as of 1.1 | Yes |
- authenticates peer via | Public key | Public key / X509 / Username+Password | Public key | Public key | Public key / X509 |
Tunnel | Layer 3 | Layer 2/3 | Layer 2/3 | Layer 2/3 | ? |
Tunnel over | UDP | UDP/TCP | UDP | UDP and TCP | ? |
Full IPv6-Support | Yes | Yes | Yes | Yes | ? |
Full IPv4-Support | Yes | Yes | Yes | Yes | ? |
Difficulty of configuration | |||||
- MTU documentated? | Partly | Partly | Yes | ? | ? |
- Certificate management required? | No | Yes | No | No | No? |
- Few configuration files? | Yes | Yes | Yes | No | ? |
- Cryptographic parameters are set by yourself? | No | Yes | No | No | Yes |
Cryptographic parameters are set by yourself?: (only a choice between old and new protocol)
Criteria | Tinc (There Is No Cabal) | n2n | Tailscale/Headscale | Zerotier | Nebula |
---|---|---|---|---|---|
License | GPL-2.0 | GPL-3.0 | BSD | BSL (proprietary) | MIT |
Free software | Yes | Yes | Yes | No | Partly |
Android support | Yes | Yes (uses proprietary component) | Yes | Yes | Yes (source-available, no free software) |
- In F-Droid | Yes | No | Yes | No | No |
- In IzzyOnDroid | No | No | No | Yes | No |
Windows support | Yes | Yes | Yes | Yes | Yes |
Linux support | Yes | Yes | Yes | Yes | Yes |
- In Arch Linux | Yes | Yes | Yes | Yes | Yes |
- In Debian packages | Yes | Yes | No | No | Yes |
- In Alpine Linux | Yes | Yes | Yes | No | Yes |
Centralized server | No | Yes | Yes | Yes | Yes |
Federated server | - | Yes | No | No | Yes |
Self hosting of the server | - | Yes | with headscale | Yes | Yes |
Dezentalized | Yes | Yes | No | No | Yes |
Authentication and encryption methods | RSA/Blowfish/SHA-1 (Legacy), TLS1.2-Like Ed25519/AES-256-CTR/SHA-256 (SPTPS) | Various, including AES-256-CTS or ChaCha20 | WireGuard | Curve25519/Ed25519, Salsa20/Poly1305 | Curve25519, AES-256-GCM |
- perfect forward secrecy (PFS) | Yes (SPTPS) | ? | Yes | No? | ? |
Tunnel | Layer 2/3 | Layer 2 | Layer 3 | Layer 2 | Layer 3 |
Tunnel over | TCP/UDP | TCP/UDP (IPv4-only) | UDP | UDP | UDP |
Full IPv6-Support | Yes | No | Yes | Yes | Yes |
Full IPv4-Support | Yes | Yes | Yes | Yes | Yes |
Since a table with a lot of entries quickly becomes ugly, here are a few remarks:
My criteria are actually quite simple:
Criteria | Tinc | n2n | Tailscale/Headscale | Zerotier | Nebula |
---|---|---|---|---|---|
Full IPv6-Support? | Yes | No | Yes | Yes | Yes |
Full IPv4-Support? | Yes | Yes | Yes | Yes | Yes |
Uses modern cryptography? | Yes | Yes | Yes | Yes | Yes |
PFS? | Yes | ? | Yes | ? | ? |
Is Free Software? | Yes | Yes | Yes | No | Yes |
Is Fully FLOSS? | Yes | Yes | No | No | No |
In Debian? | Yes | Yes | No | No | Yes |
In conclusion, it can be said that only Tinc in the pre-release version fully meets my criteria.