Libreswan 是 IKE 实现,守护进程叫 pluto,用来协商 IPsec 安全关联;数据包由内核 IPsec 保护。截至 2026-10-12,首页同时公告 5.3.3 与 5.4.1。本文以 v5.4.1 为准(CHANGES 写 2026-10-05)。
Libreswan 是什么
一个可独立引用的定义句:Libreswan 是 Internet Key Exchange 的实现,包含 IKE 守护进程 pluto、用来操纵它的 ipsec 命令,以及策略文件 ipsec.conf;它协商安全关联,由内核实际收发 IPsec 包。
这句来自 2026-10-12 读取的 libreswan(7)。手册同时写明,它可以与 Linux 的 XFRM 以及 BSD 的 KAME IPsec 栈对话。认证材料放在 NSS 信任库里的证书和私钥,或放在预共享密钥文件里。预共享密钥和证书的差别见 预共享密钥与证书认证。IKE 与 WireGuard 的概念差别见 IKEv2 与 WireGuard 怎么比。
本站 strongSwan 是什么 写过 Libreswan 从 Openswan 分出,并明确把许可证、维护者和现行架构留在那篇文章之外。本文补的是 v5.4.1 和现行页面上能核对的部分。
沿革:1995、1996、1997 和 2011、2012、2013 不能收成各一个年份
历史页 的导语写:项目可以追溯到 John Gilmore 与 Hugh Daniel 在 1996 年创立的 FreeS/WAN,代码于 2003 年以 Openswan 的名字延续,2012 年因 “openswan” 商标诉讼被迫改名为 Libreswan。同一页的章节标题却是 “The FreeS/WAN days (1995 - 2003)” 和 “Libreswan (2011 - now)”。
官网首页 的句子又不同:积极开发超过 20 年,追溯到 1997 年由 John Gilmore 与 Hugh Daniel 创立的 FreeS/WAN。历史页导语用的是「超过 15 年」和 1996 年。两页互相链接,年份和「多少年」都没有对齐。本文不能另选一个「创立年」。
历史页对改名的叙述是:Openswan 的志愿者成立了 Xelerance 以提供商业支持;Paul Wouters 是最后离开该公司的创始人之一,句子停在 “in December”,HTML 在这里结束段落,没有年份。下一节写纠纷涉及 Openswan 这个名字归谁,并链接到他的博客。该博客文章题为 Resignation from Openswan,日期是 2012-12-15,文中写他于大约一年前离开 Xelerance,此后双方诉讼。历史页把改名说成离开诉讼、继续开发的结果。本文只转述这些页面,没有核对起诉书或判决。
能核对的发布物是另一组日期。下载目录 old-release 列出 libreswan-3.0.tar.gz,目录时间戳为 2013-01-02。GitHub 仓库 libreswan/libreswan 的 created_at 是 2013-02-20,晚于这个时间戳。本文没有打开 3.0 压缩包里的发布说明,也不把 GitHub 创建日当成项目起点。
v5.4.1 的 CREDITS 写的是 “continuation fork of the Openswan 2.6.38 codebase”,并写明 Openswan 从 FreeS/WAN 2.04 分出。README 的用词是 “forked from”。两句指向同一次分叉,用词不完全相同。
维护者:手册署名和提交计数是两份名单
v5.4.1 的 CREDITS 列出一批贡献者,其中有 Paul Wouters 与 Andrew Cagney。手册页的 AUTHOR 一节也是这两个人。同一份 CREDITS 里,若干地址使用 redhat.com。首页写明它随 Fedora、RHEL/EPEL 等发行版提供。邮箱域名和发行版打包不能单独证明「由 Red Hat 官方维护」。历史页对现状只有一句:由 The Libreswan Project 维护。
本次读取的贡献计数中,cagney 为 20544,letoams 为 10242。计数会变,不是职务名单。本文没有用账号资料把登录名对应到法律姓名。
源码树里有 programs/pluto 和 programs/whack。手册把 pluto 写成 IKE 守护进程,把 ipsec 写成操纵它的辅助命令。strongSwan 现行文档里的守护进程叫 charon,控制接口是 VICI / swanctl。两边都可以协商 IKE,进程和接口不是同一套。
许可证:GPLv2、GPLv2+ 和下载站上的旧文本
v5.4.1 里至少有三份互不完全相同的说法:
| 位置 | 写了什么 |
|---|---|
| 官网首页 | “GNU Public License (GPLv2)” |
| README | 主体是 GNU GPL 第 2 版;少数部分许可证不同。具体见 LICENSE 与 CREDIT.* |
仓库 LICENSE | “GNU General Public License (GPLv2+)”,并指向 COPYING |
programs/pluto/ikev2.c 的文件头 | 按 GPL 第 2 版,或(可选)任何更新版本再分发 |
COPYING | GPL 第 2 版的许可证全文 |
ikev2.c 的「或任何更新版本」只说明这个文件的文件头。本文没有统计全树有多少文件带这句、有多少文件只写第 2 版。
download.libreswan.org/LICENSE 仍是另一段文字:除 DES 库、MD5 和 linux/net/ipsec/radij.c 外适用 GPL,并提到带广告条款的 DES 和来自 RSA Data Security 的 MD5。v5.4.1 仓库根目录的 LICENSE 没有这些段落。本文没有在该标签的树里查找 radij.c,因此不把下载站这段例外写成现行源码结构。
GitHub 对整仓给出的 SPDX 是 NOASSERTION。引用许可时需要带上文件名:首页的 “GPLv2” 是简称,仓库 LICENSE 写的是 GPLv2+。
架构:pluto 协商,内核做 ESP
手册把运行位置写成:pluto 跑在 Linux、NetBSD、FreeBSD 或 OpenBSD 上。首页的平台句是 “Linux 2.4 to 5.x, FreeBSD and Apple OSX”,没有出现 NetBSD 和 OpenBSD,却出现了 Apple OSX。v5.4.1 的 README 列出的预编译包包括 Alpine、Arch、CentOS、Debian、Fedora、FreeBSD、Mint、Oracle Linux、RHEL 和 Ubuntu;NetBSD 写在 pkgsrc/wip,OpenBSD 需要从源码构建。三份名单不要合并。本文没有在这些系统上复测。
数据面的分工可以收成三层:
| 层 | 手册或首页中的角色 |
|---|---|
| IKE | pluto 实现 IKEv1(RFC 2409)和 IKEv2(RFC 7296),建立 IKE 安全关联,再协商子安全关联 |
| 内核 IPsec | 真正收发受保护的 IP 包。Linux 上是 XFRM,BSD 上手册写的是 KAME |
| NSS | 证书、私钥和随机数。首页也写明使用 NSS |
因此「Libreswan 加密了流量」的准确含义是:pluto 完成 IKE,内核的 ESP 保护数据包。这和 strongSwan 在 Linux 上把 ESP 交给内核的分工同类,见 strongSwan 是什么。基于策略和基于路由的差别见 基于策略与基于路由的 VPN。
手册写明 IKEv1 被视为已弃用(RFC 9395),并强烈建议迁到 IKEv2。默认不接受 IKEv1 报文。要启用,须同时满足该页列出的策略、连接关键字和编译选项;它还写明 USE_IKEv1=true 目前仍是默认编译值,但预期会变。IKEv1 代码处于维护状态,不再考虑新功能。这些是手册里的条件,不是本文抄写的配置,也没有在 v5.4.1 二进制上复测。这份在线手册没有和标签树里的手册逐段 diff,引用时要带上抓取日期 2026-10-12。
docs/README.rfcs 自己写明清单可能过时,并收入已被取代的 RFC 4306 和 RFC 5996。它适合当作书目,不适合当作支持矩阵。本文只把手册点名的 RFC 2409、RFC 7296,以及下面更新日志里的 RFC 9370,写成这个版本明确提到的规范。IPsec 架构与 ESP 的框架仍是 RFC 4301 和 RFC 4303。NAT 穿越协商与 UDP 封装是 RFC 3947 和 RFC 3948,概念见 VPN NAT 穿越与打洞。
v5.4 与 v5.4.1 的更新日志写了什么
v5.4.1 在 CHANGES 里的日期是 2026-10-05,GitHub Releases 的 published_at 是 2026-10-06。v5.4(CHANGES 中的日期为 2026-08-13)写明:把 IKE_INTERMEDIATE 更新到 RFC 9370,实现 IKE_ADDITIONAL_KE 与 IKE_FOLLOWUP_KE,并在 IKE_SA_INIT 和 IKE_INTERMEDIATE 中支持 ML-KEM-768,且需要 NSS 不低于 3.118.1。这是更新日志里的功能记录,不是对算法的评价。后量子交换作为更一般的话题,见 VPN 的未来。
v5.4.1 的安全条目写了 CVE-2026-77206、CVE-2026-77207 和 CVE-2026-94453 的修复,并把 CVE-2026-77205 写成添加测试。首页则把这四个编号都算进 5.3.3 与 5.4.1 所处理的 CVE,并写明请升级。本文没有对照漏洞数据库复核这些编号是否已分配、描述是否与公告一致。版本是否该升级,以项目的安全页为准。
文档中的典型用途
手册和历史页里的角色是描述,不是建议选它:
- 站点到站点或远程接入:两个 IKE 端点协商子安全关联,内核安装 IPsec 安全关联。站点到站点与远程接入的差别见 站点到站点与远程接入。
- 与标准 IPsec 对端互通:它实现的是 IETF 的 IKE 与 IPsec,不是一种私有隧道。L2TP/IPsec 是历史页提到的企业特性之一,不等于 pluto 的全部能力,见 L2TP/IPsec 是什么。
- 机会加密:历史页把它写成 FreeS/WAN 当年的目标。现行默认配置是否仍走这条路径,本文没有从 v5.4.1 的默认配置求证。
它不根据网站域名选择 HTTP 出口,也不实现 WireGuard。需要代理或按域名分流时,面对的是另一类软件。
和相近项目的边界
| 项目 | 关系 | 边界 |
|---|---|---|
| FreeS/WAN | 祖先 | 历史页、首页和 CREDITS 都把它当作源头;三处给出的起始年份并不相同 |
| Openswan | 直接的前身 | CREDITS 写明从 Openswan 2.6.38 延续分出 |
| strongSwan | 另一支 IKE 实现 | 守护进程是 charon,不是 pluto。见 strongSwan 是什么 |
| WireGuard | 另一种 VPN 协议 | 不使用 IKE,也不把 ESP 装进 XFRM。见 WireGuard 与 OpenVPN |
| 内核 IPsec | 数据面 | pluto 负责协商和安装安全关联;ESP 在 XFRM 或 KAME 里 |
读资料时先分开的四件事
- 年份以哪一页为准:首页的 1997,历史页导语的 1996,还是章节标题里的 1995;改名是标题中的 2011、导语中的 2012,还是 3.0 压缩包目录时间戳上的 2013-01-02。
- 许可以哪一段为准:首页的 “GPLv2”,仓库
LICENSE的 GPLv2+,某个文件头里的「或任何更新版本」,还是下载站上仍提到 DES/MD5/radij 的旧文本。 - 平台以哪一张表为准:首页的 Linux 2.4–5.x、FreeBSD 与 Apple OSX,手册的 Linux 与三种 BSD,还是 README 的发行版列表。
- CVE:首页把四个编号都算进这次发布;v5.4.1 的
CHANGES把 CVE-2026-77205 写成添加测试,而不是和另外三条并列的修复行。
本文只整理公开资料。部署 IPsec 网关还受当地电信管理和网络所有权约束;这里不提供规避管理的做法。
主要资料
- 项目首页:libreswan.org
- 历史:History of The Libreswan Project
- 手册:libreswan(7)(本文抓取于 2026-10-12)
- 源码与标签 v5.4.1:libreswan/libreswan,同标签的
README.md、LICENSE、COPYING、CREDITS、CHANGES - IKEv2:RFC 7296;IKEv1:RFC 2409;IKEv1 弃用说明:RFC 9395;IPsec 架构:RFC 4301;ESP:RFC 4303;多重密钥交换:RFC 9370