|Original author(s)||Jason A. Donenfeld|
|Developer(s)||Jason A. Donenfeld|
|Written in||C (Linux kernel module, OpenBSD kernel driver), Go (userspace implementation)|
|Type||Virtual private network|
WireGuard is a free and open-source software application and communication protocol that implements virtual private network (VPN) techniques to create secure point-to-point connections in routed or bridged configurations. It is run as a module inside the Linux kernel, and aims for better performance and more power saving than the IPsec and OpenVPN tunneling protocols. It was written by Jason A. Donenfeld and is published under the GNU General Public License (GPL) version 2. The Linux version of the software has reached a stable production release and was incorporated into the Linux kernel release in late March 2020.
WireGuard aims to provide a VPN that is both simple and highly effective. A 2018 review by Ars Technica observed that popular VPN technologies such as OpenVPN and IPsec are often complex to set up, disconnect easily (in the absence of further configuration), take substantial time to negotiate reconnections, may use outdated ciphers, and have relatively massive code bases (over 400,000 and 600,000 lines of code, respectively, according to Ars Technica) which makes it harder to find bugs.
WireGuard's design seeks to reduce these issues, aiming to make the tunnel more secure and easier to manage by default. By using versioning of cryptography packages, it focuses on ciphers believed to be among the most secure current encryption methods, and at the time of the Ars Technica review had a codebase of around 4000 lines of pure kernel code, about 1% of either OpenVPN or IPsec, making security audits easier, and praised by the Linux kernel creator Linus Torvalds compared to OpenVPN and IPsec as a "work of art". Ars Technica reported that in testing, stable tunnels were easy to create with WireGuard, compared to alternatives, and commented that it would be "hard to go back" to long reconnection delays, compared to WireGuard's "no nonsense" instant reconnections.
WireGuard utilizes the following:
- Curve25519 for key exchange
- ChaCha20 for encryption
- Poly1305 for data authentication
- SipHash for hashtable keys
- BLAKE2s for hashing
- UDP-based only.
WireGuard only supports ChaCha20.
WireGuard supports Pre-shared Symmetric, which is included to mitigate any future advances in quantum computing. In the shorter term, if the pre-shared symmetric key is compromised, the Curve25519 keys still provide more than sufficient protection.
WireGuard only works over UDP.
WireGuard supports multiple topologies:
- Star (Server/client)
- A client endpoint does not have to be defined before the client start sending data
- Client endpoints can be statically predefined.
Since Point-to-point is supported, other topologies can be made, but not on the same tunnel.
WireGuard is designed to be extended by third-party programmes 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, and LDAP integration.
Excluding such complex features from the minimal core codebase improves its stability and security.
Earliest snapshots of the code base exist from June 30, 2016. Four early adopters of WireGuard were the VPN service providers Mullvad, AzireVPN, IVPN and cryptostorm. WireGuard has received donations from Mullvad, Private Internet Access, IVPN, the NLnet Foundation and now also from OVPN.
As of June 2018[update] the developers of WireGuard advise treating the code and protocol as experimental, and caution that they have not yet achieved a stable release compatible with CVE tracking of any security vulnerabilities that may be discovered.
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.
On 29 March 2020 WireGuard was incorporated into the Linux 5.6 release tree. The Windows version of the software remains at beta.
On 22 June 2020, After the work of Matt Dunwoodie and Jason A. Donenfeld, WireGuard support has been imported into OpenBSD.
Oregon senator Ron Wyden has recommended to the National Institute of Standards and Technology (NIST) that they evaluate WireGuard as a replacement for existing technologies like IPsec and OpenVPN.
Implementations of the WireGuard protocol include:
- Donenfeld's initial implementation, written in C and Go.
- Cloudflare's BoringTun, a user space implementation written in Rust.
- Matt Dunwoodie's implementation for OpenBSD, written in C.
User space programs supporting WireGuard
User space programs supporting WireGuard include:
- NetworkManager since version 1.16
- systemd since version 237
- Intel's ConnMan since version 1.38
- Mozilla VPN 
- NordVPN via Nordlynx
- PiVPN since 17 October 2019
- pfSense package.
- NOIA Network 
- Private Internet Access VPN since 10 April 2020
- Mistborn (software) VPN since March 2020
- Comparison of virtual private network services
- Secure Shell (SSH), a cryptographic network protocol used to secure services over an unsecured network.
- Not all platforms may have a currently released version and some may be at beta.
- "Installation". WireGuard. Retrieved 23 April 2020.
- Salter, Jim (30 March 2020). "WireGuard VPN makes it to 1.0.0—and into the next Linux kernel". Archived from the original on 31 March 2020. Retrieved 23 April 2020.
- Preneel, Bart; Vercauteren, Frederik, eds. (11 June 2018). Applied Cryptography and Network Security. Springer. ISBN 978-3-319-93387-0. Archived from the original on 18 February 2019. Retrieved 25 June 2018.
- "WireGuard: fast, modern, secure VPN tunnel". WireGuard. Archived from the original on 28 April 2018. Retrieved 28 April 2018.
- Salter, Jim (26 August 2018). "WireGuard VPN review: A new type of VPN offers serious advantages". Ars Technica. Archived from the original on 20 September 2018.
- "Linux-Kernel Archive: Re: [GIT] Networking".
- Donenfeld, Jason A. "Known Limitations - WireGuard". www.wireguard.com. Retrieved 1 June 2020.
- Lipp, Benjamin; Blanchet, Bruno; Bhargavan, Karthikeyan (2019), A Mechanised Cryptographic Proof of the WireGuard Virtual Private Network Protocol, Research Report RR-9269, Paris: Inria, p. 49, hal-02100345
- Donenfeld, Jason A. "Introduction & Motivation" (PDF). WireGuard: Next Generation Kernel Network Tunnel (PDF). Archived (PDF) from the original on 4 March 2018.
- "Index of /Monolithic-historical/".
- Mason, John (13 February 2019). "Mullvad Review". thebestwpn. 2. Strong Tunneling Protocols – OpenVPN & WireGuard. Archived from the original on 24 June 2019. Retrieved 8 April 2019.
- Mason, John (19 February 2019). "AzireVPN Review". thebestvpn. 2. Impressive Protocols and Encryption. Archived from the original on 8 May 2019. Retrieved 8 April 2019.
- Pestell, Nick (11 December 2018). "Introducing Wireguard". Retrieved 22 September 2019.
- "WireGuard support added!". cryptostorm blog. 5 April 2019. Archived from the original on 9 December 2019. Retrieved 9 December 2019.
- "Donations". WireGuard. Archived from the original on 28 April 2018. Retrieved 28 April 2018.
- "OVPN donates to support WireGuard". OVPN. 23 March 2020.
- "About The Project". WireGuard. Work in Progress. Archived from the original on 25 June 2018. Retrieved 25 June 2018.
- "Installation". WireGuard. Archived from the original on 26 June 2018. Retrieved 26 June 2018.
- "e7096c131e5161fa3b8e52a650d7719d2857adfd - pub/scm/linux/kernel/git/davem/net-next - Git at Google". kernel.googlesource.com.
- "LKML: David Miller: Re: [PATCH net-next v2] net: WireGuard secure network tunnel". lkml.org.
- "[ANNOUNCE] WireGuard merged to net-next, on its way to Linux 5.6". 9 January 2020. Archived from the original on 9 January 2020.
- Torvalds, Linus. "index : kernel/git/torvalds/linux.git". Linux kernel source tree. Kernel.org. Retrieved 2 February 2020.
- "drivers/net: Enable WIREGUARD as module".
- "ANDROID: GKI: enable CONFIG_WIREGUARD".
- "merge branch 'bg/wireguard' (d321d0df) · Commits · GNOME / network-manager-applet". gitlab.gnome.org. Retrieved 30 May 2020.
- "WireGuard for OpenBSD Kernel Patches Posted".
- "add wg(4), an in kernel driver for WireGuard vpn communication".
- "US Senator Recommends Open-Source WireGuard To NIST For Government VPN". Phoronix. 30 June 2018. Archived from the original on 5 August 2018. Retrieved 5 August 2018.
- Donenfeld, Jason (7 June 2019). "WireGuard: fast, modern, secure VPN tunnel". Retrieved 16 June 2019.
- Krasnov, Vlad (18 December 2018). "BoringTun, a userspace WireGuard implementation in Rust". Cloudflare Blog. Archived from the original on 4 April 2019. Retrieved 29 March 2019.
- "CloudFlare Launches "BoringTun" As Rust-Written WireGuard User-Space Implementation". phoronix.com. Retrieved 29 March 2019.
- Johansson, Janne (21 June 2020). "WireGuard imported into OpenBSD".
- Haller, Thomas (15 March 2019). "WireGuard in NetworkManager". GNOME Blogs.
- Poettering, Lennart (28 January 2018). "[ANNOUNCE] systemd v237". systemd-devel (Mailing list).
- Larabel, Michael (18 February 2020). "Intel ConnMan 1.38 Released With WireGuard Support". Phoronix.
- "Mozilla VPN: Protect Your Entire Device".
- "What is NordLynx? | NordVPN Customer Support". support.nordvpn.com. Retrieved 1 September 2020.
- "pivpn/pivpn". GitHub. Retrieved 30 May 2020.
- "Ascrod/pfSense-pkg-wireguard". github. 27 May 2020. Retrieved 1 June 2020.
- Radziukas, Augustas (16 July 2020). "Development Update 07.02–07.16". Medium. Retrieved 25 July 2020.
- "WireGuard® on PIA is out of beta and available to use on Windows, Mac, Linux, Android, and iOS". Retrieved 26 August 2020.
- "Mistborn bundles important Internet services on your home network and secures them with a WireGuard VPN tunnel, Pi-hole, iptables rules, and separate containers". Retrieved 16 October 2020.