![]() | |
Original author(s) | Jason A. Donenfeld |
---|---|
Developer(s) | Jason A. Donenfeld |
Initial release | 2015; 10 years ago (2015)[1] |
Stable release | |
Repository | |
Written in | C (Linux,FreeBSD kernel modules,NetBSD,OpenBSD kernel drivers,Windows kernel drivers),Go (userspace implementation) |
Operating system | |
Type | Virtual private network |
License | variousfree and open-source |
Website | www![]() |
WireGuard is acommunication protocol andfree and open-source software that implements encryptedvirtual private networks (VPNs).[5] It aims to be lighter and better performing thanIPsec andOpenVPN, two commontunneling protocols.[6] The WireGuard protocol passes traffic overUDP.[7]
In March 2020, the Linux version of the software reached a stable production release and was incorporated into the Linux 5.6 kernel, andbackported to earlier Linux kernels in someLinux distributions.[4] The Linux kernel components are licensed under theGNU General Public License (GPL) version 2; other implementations are under GPLv2 or other free/open-source licenses.[5]
The WireGuard protocol is a variant of theNoise Protocol FrameworkIK
handshake pattern, as illustrated by the choice ofNoise_IKpsk2_25519_ChaChaPoly_BLAKE2s
for the value of theConstruction string listed onp10 of the Whitepaper.
WireGuard uses the following:[8]
In May 2019, researchers fromINRIA published a machine-checked proof of the WireGuard protocol, produced using theCryptoVerifproof assistant.[9]
WireGuard supportspre-shared symmetric key mode, which provides an additional layer ofsymmetric encryption to mitigate future advances in quantum computing. This addresses the risk that traffic may be stored until quantum computers are capable of breakingCurve25519, at which point traffic could be decrypted. Pre-shared keys are "usually troublesome from a key management perspective and might be more likely stolen", but in the shorter term, if the symmetric key is compromised, the Curve25519 keys still provide more than sufficient protection.[10]
WireGuard uses only[7]UDP,[5] due to the potential disadvantages of TCP-over-TCP.[7][11][12] TunnelingTCP over a TCP-based connection is known as "TCP-over-TCP", and doing so can induce a dramatic loss in transmission performance due to theTCP meltdown problem.
Its default server port is UDP 51820.
WireGuard fully supports IPv6, both inside and outside of tunnel. It supports onlylayer 3 for bothIPv4 andIPv6 and canencapsulate v4-in-v6 and vice versa.[13]
The overhead of WireGuard breaks down as follows:[14]
Assuming the underlay network transporting the WireGuard packets maintains a 1500 bytes MTU, configuring the WireGuard interface to 1420 bytes MTU for all involved peers is ideal for being transported over IPv6 + IPv4. However, when exclusively utilizing legacy IPv4 transport, a higher MTU of 1440 bytes for the WireGuard interface suffices.[14]
From an operational perspective and for network configuration uniformity, leaving the default 1420 MTU network-wide for the WireGuard interfaces would be advantageous. This approach ensures consistency and facilitates a smoother transition to enabling IPv6 for the WireGuard peers and interfaces in the future.
However, for mobile clients with varying forms of network connectivity and varying MTU across numerous network connections, an MTU of 1280 can be beneficial allowing for IPv6 transport inside the tunnel as that is it's minimum allowed MTU, and allow the wireguard tunnel to function over most forms of connectivity.
It should also be noted and reinforced that the MTU of the Wireguard interface does not change based on the IP family used inside the wireguard tunnel, the IP family being used on the outside of the tunnel is what determines the overhead and maximum MTU for the wireguard tunnel, it should also be noted that just because a Wireguard peer is only accessible via IPv4 does not mean that other wireguard peer/s connecting to it are not connecting over IPv6 and using translation mechanisms, which means you must account for the IPv6 overhead and assume 80 Bytes.
WireGuard is designed to be extended by third-party programs and scripts. This has been used to augment WireGuard with various features including more user-friendly management interfaces (including easier setting up of keys), logging, dynamic firewall updates, dynamic IP assignment,[15] andLDAP integration.[citation needed]
Excluding such complex features from the minimal core codebase improves its stability and security. For ensuring security, WireGuard restricts the options for implementing cryptographic controls, limits the choices forkey exchange processes, and maps algorithms[8] to a small subset of moderncryptographic primitives. If a flaw is found in any of the primitives, a new version can be released that resolves the issue.
A review byArs Technica found that WireGuard was easy to set up and use, used strong ciphers, and had a minimal codebase that provided for a small attack surface.[16]
WireGuard has received funding from theOpen Technology Fund[17] and donations fromJump Trading,Mullvad,Tailscale,Fly.io, and theNLnet Foundation.[18]
Oregon senatorRon Wyden has recommended to theNational Institute of Standards and Technology (NIST) that they evaluate WireGuard as a replacement for existing technologies.[19]
Implementations of the WireGuard protocol include:
Early snapshots of the code base exist from 30 June 2016.[28] The logo is inspired by a stone engraving of themythological Python that Jason Donenfeld saw while visiting a museum inDelphi.[29]
On 9 December 2019, David Miller – primary maintainer of the Linux networking stack – accepted the WireGuard patches into the "net-next" maintainer tree, for inclusion in an upcoming kernel.[30][31][32]
On 28 January 2020,Linus Torvalds merged David Miller's net-next tree, and WireGuard entered the mainline Linux kernel tree.[33]
On 20 March 2020,Debian developers enabled the module build options for WireGuard in their kernel config for the Debian 11 version (testing).[34]
On 29 March 2020 WireGuard was incorporated into the Linux 5.6 release tree. The Windows version of the software remains at beta.[4]
On 30 March 2020,Android developers added native kernel support for WireGuard in their Generic Kernel Image.[35]
On 22 April 2020,NetworkManager developer Beniamino Galvani mergedGUI support for WireGuard inGNOME.[36]
On 12 May 2020, Matt Dunwoodie proposed patches for native kernel support of WireGuard inOpenBSD.[37]
On 22 June 2020, after the work of Matt Dunwoodie and Jason A. Donenfeld, WireGuard support was imported into OpenBSD.[38]
On 23 November 2020, Jason A. Donenfeld released an update of theWindows package improving installation, stability,ARM support, andenterprise features.[39]
On 29 November 2020, WireGuard support was imported into theFreeBSD 13 kernel.[25]
On 19 January 2021, WireGuard support was added for preview inpfSense Community Edition (CE) 2.5.0 development snapshots.[40]
In March 2021, kernel-mode WireGuard support was removed from FreeBSD 13.0, still in testing, after an urgent code cleanup in FreeBSD WireGuard could not be completed quickly.[41] FreeBSD-based pfSense Community Edition (CE) 2.5.0 and pfSense Plus 21.02 removed kernel-based WireGuard as well.[42]
In May 2021, WireGuard support was re-introduced back into pfSense CE and pfSense Plus development snapshots as an experimental package written by a member of the pfSense community, Christian McDonald. The WireGuard package for pfSense incorporates the ongoing kernel-mode WireGuard development work by Jason A. Donenfeld that was originally sponsored by Netgate.[43][40][44]
In June 2021, the official package repositories for both pfSense CE 2.5.2 and pfSense Plus 21.05 included the WireGuard package.[45]
In 2023, WireGuard received over 200,000 Euros support from Germany'sSovereign Tech Fund.[46]