{{Infobox software
| name = WireGuard
| logo = Logo of WireGuard.svg
| screenshot =
| caption = The WireGuard logo
| author = Jason A. Donenfeld
| developer = Edge Security LLC.
| released =
| programming language = C语言(Linux、FreeBSD内核模块、NetBSD、OpenBSD内核模块、Windows内核驱动)
Go(用户空间实现)
| operating system = {{Plainlist|
- Linux
- macOS
- Android
- iOS
- Windows
- 其他旨在获得比IPsec和OpenVPN更好的性能,后两者都是常见的隧道协议。WireGuard协议的流量经由UDP传输。
- Curve25519用于密钥交换
- ChaCha20用于对称加密
- Poly1305用于消息认证码
- 用于哈希表键
- BLAKE2s用于加密哈希函数
- 用于密钥派生函数
- 仅基于UDP用于传输
- Base64编码的私钥、公钥和预共享密钥
2019年5月,INRIA的研究人员使用发布了WireGuard协议的机器验证证明。
可选的预共享对称密钥模式
WireGuard支持预共享对称密钥()模式,该模式提供了一层额外的对称加密,以减轻未来量子计算的进步带来的风险。这消除了流量被存储后,未来可能被量子计算机解密的风险,因为量子计算机最终可能破解Curve25519(Wireguard中必选的基于非对称密钥的密钥交换方法)。预共享密钥“从密钥管理的角度来看通常很麻烦,而且可能更容易被盗”,但在短期内,如果对称密钥被泄露,Curve25519密钥仍能提供足够的保护。
网络
WireGuard仅使用UDP,在基于TCP的连接上隧道化TCP被称为“TCP-over-TCP”,这样做会导致传输性能急剧下降(该问题被称为“TCP熔断”,):基础层遇到问题的时候会尝试进行补偿,而(被基础层承载着的)上层TCP报文则会因此过度补偿(),这种过度补偿会导致延迟增加并使传输性能下降。
其默认服务器端口为UDP之51820。
WireGuard完全支持IPv6,无论是在隧道内部还是外部。它仅支持第3层的IPv4和IPv6,并且可以封装v4-in-v6,反之亦然。
MTU开销
WireGuard的开销细分如下:
- 20字节的IPv4报头或40字节的IPv6报头
- 8字节的UDP报头
- 4字节的类型
- 4字节的密钥索引
- 8字节的随机数
- N字节的加密数据
- 16字节的身份验证标签
MTU操作注意事项
假设传输WireGuard数据包的底层网络保持1500字节的MTU,则将所有相关对等方的WireGuard接口配置为1420字节的MTU是传输IPv6+IPv4流量的理想选择。但是,当仅承载传统的IPv4流量时,WireGuard接口的MTU可以设置为更高的1440字节。以及LDAP集成。
从最小的核心代码库中排除此类复杂功能可以提高其稳定性和安全性。为了确保安全性,WireGuard限制了实现加密控件的选项,限制了密钥交换过程的选择,并将算法并接受了Mullvad、Private Internet Access、IVPN、NLnet基金会和OVPN的捐赠。
俄勒冈州参议员Ron Wyden已建议美国国家标准与技术研究院评估WireGuard作为现有技术的替代方案。
可用性
实现
WireGuard协议的实现包括:
- Donenfeld使用C语言和Go语言编写的初始实现。
- Cloudflare的BoringTun,一个使用Rust语言编写的用户空间实现。
- Matt Dunwoodie为OpenBSD编写的使用C语言的实现。
- Ryota Ozaki为NetBSD编写的使用C语言的wg(4)实现。
- FreeBSD的实现是用C语言编写的,并且与OpenBSD的实现共享大部分数据路径。
- 支持Fritz!OS 7.39及更高版本的AVMFritz!Box调制解调-路由器。从7.50版本开始允许站点到站点的WireGuard连接。
历史
代码库的早期快照存在于2016年6月30日。WireGuard的四个早期采用者是VPN服务提供商Mullvad,和cryptostorm。
2019年12月9日,Linux网络堆栈的主要维护者DavidMiller接受了WireGuard补丁到“net-next”维护者树中,以便包含在即将发布的内核中。
2020年1月28日,Linus Torvalds合并了David Miller的net-next树,WireGuard进入了mainline Linux内核树。
2020年3月20日,Debian开发人员在其Debian 11版本(测试版)的内核配置中启用了WireGuard的模块构建选项。
2020年3月29日,WireGuard被纳入Linux 5.6版本树。Windows版本的软件仍处于测试阶段。
2020年4月22日,NetworkManager开发人员BeniaminoGalvani在GNOME中合并了对WireGuard的GUI支持。
2020年5月12日,Matt Dunwoodie提出了在OpenBSD中对WireGuard的原生内核支持的补丁。
2020年6月22日,在MattDunwoodie和Jason A. Donenfeld的努力下,WireGuard支持被导入OpenBSD。
2020年11月23日,Jason A. Donenfeld发布了Windows软件包的更新,改进了安装、稳定性、ARM支持和企业功能。
2020年11月29日,WireGuard支持被导入FreeBSD13内核。
2021年1月19日,在pfSense社区版 (CE)2.5.0开发快照中添加了对WireGuard的预览支持。
2021年3月,在FreeBSDWireGuard中紧急代码清理无法快速完成之后,内核模式WireGuard支持从仍在测试中的FreeBSD13.0中删除。 基于FreeBSD的pfSense社区版 (CE)2.5.0和pfSense Plus 21.02也删除了基于内核的WireGuard。
2021年5月,WireGuard支持作为pfSense社区成员Christian McDonald编写的实验包重新引入pfSense CE和pfSense Plus开发快照中。pfSense的WireGuard软件包包含了最初由Netgate赞助的Jason A. Donenfeld正在进行的内核模式WireGuard开发工作。
2021年6月,pfSense CE 2.5.2和pfSense Plus 21.05的官方软件包存储库都包含了WireGuard软件包。
2023年,WireGuard从德国的获得了超过200,000欧元的支持。
参见
- 虚拟私人网络
- OpenSSH
注释
參考來源
外部链接
- [https://www.wireguard.com/ WireGuard官网]
- [https://web.archive.org/web/20180826214649/https://git.zx2c4.com/WireGuard WireGuard源代码]
- [https://github.com/WireGuard WireGuard源代码GitHub镜像]
- [https://play.google.com/store/apps/details?id=com.wireguard.android WireGuard Android客户端]
- [https://web.archive.org/web/20190824125031/https://apps.apple.com/app/wireguard/id1441195209 WireGuard iOS客户端]
- [https://web.archive.org/web/20190824125035/https://apps.apple.com/app/wireguard/id1451685025 WireGuard macOS客户端]
评论 (0)