strongSwan 是开源的 IKE 实现,用来协商并维护 IPsec 安全关联。它不是代理平台,也没有一种名叫 strongSwan 的隧道协议。截至 2026-10-10,官网最新版本是 6.1.0(2026-09-07)。本文记录项目边界、许可证和文档中的结构,不比较产品高低。
strongSwan 是什么
一个可独立引用的定义句:strongSwan 是 Internet Key Exchange(IKE)协议的实现,用于在基于策略或基于路由的场景里建立 IPsec 安全关联。
IKE 负责认证对方、协商算法和密钥;IPsec 的 ESP 负责保护 IP 包。口语里的「IPsec VPN」通常把这两层合在一起说。拆开之后才能看懂 strongSwan 的位置:它的核心是用户态的 IKE 守护进程,数据面多半在操作系统的 IPsec 栈里。背景见 VPN 是什么 与 现代 VPN 技术架构。
官网用一句话概括适用范围:从简单到很复杂的策略型与路由型 IPsec。基于策略和基于路由的差别,见 基于策略与基于路由的 VPN。
沿革:两处官方年份并不相同
现行 About 页 写道:strongSwan 于 2005 年作为已停止的 FreeS/WAN 的分支启动,并纳入作者自 2000 年起贡献给 FreeS/WAN 的 X.509 补丁。随后用面向对象方式从头编写了新的 IKE 守护进程,About 页称当前代码库不再与祖先共享代码。最初新守护进程只做 IKEv2,IKEv1 仍由继承自 FreeS/WAN 的 pluto 处理。由于其他厂商采用 IKEv2 的速度慢于预期,**strongSwan 5.0(2012)**把 IKEv1 做进新守护进程,并移除 pluto 及一批旧组件。
同一位创始人 Andreas Steffen 在 2008 年 LinuxTag 讲稿里写的是另一句:项目于 2004 年 3 月从 FreeS/WAN 分出;FreeS/WAN 由其资助者 John Gilmore 停止,最后版本 freeswan-2.04 发布于 2004 年 4 月。2012 年他的博客《Bye Bye Pluto》也把分叉写在 FreeS/WAN 于 2004 年结束后。讲稿还写明,Openswan 是另一支,最初与 strongSwan 共享包括 X.509 补丁在内的代码基础。
本文不能把 2004 与 2005 收成一个年份。About 页是项目现在的自我介绍;2008 年讲稿是创始人当时的记述。引用时需要带上出处。
About 页对维护者的记载是:
- 有若干年由瑞士拉珀斯维尔应用科学大学的研究者维护,具名 Andreas Steffen、Martin Willi、Tobias Brunner。
- 2022 年 6 月,源代码的知识产权由 secunet Security Networks AG 从 OST(原 HSR)取得。项目博客 2022-06-30 的公告与此相符,并写明收购协议于 2022 年 5 月底签署。
- About 页列出的当前维护者是:Andreas Steffen(通信安全荣休教授、strongSec GmbH 负责人)、Tobias Brunner(codelabs GmbH 软件工程师)、secunet Security Networks AG。
Martin Willi 出现在「此前在高校时期的维护者」一句里,不在当前名单中。GitHub 仓库 strongswan/strongswan 创建于 2010-10-28;本次读取的贡献计数里,tobiasbrunner、martinwilli、strongX509 居前。计数只说明历史提交,不能单独证明某人今天的职务。
许可证:首页和 LICENSE 用词不同
仓库根目录 LICENSE 写明:除 des、md4、md5 等插件另有说明外,程序可以在 GPL 第 2 版,或(可选)任何更新版本 下再分发。文件同时给出一项特殊例外:允许与 GNU LGPL 的程序或库,以及 OpenSSL 项目标准发行中采用 OpenSSL 或 SSLeay 许可证的代码组合;修改版作者没有义务继续提供这项例外。des 插件中的 DES 与 blowfish 插件中的 Blowfish 为带有广告条款的 BSD 风格许可证。md4 与 md5 插件来自 RSA Data Security,发行时必须附带规定的 MD5 说明句。
官网首页的概括是 “licensed under the GPLv2”,并写明存在商业许可选项。首页没有把「或任何更新版本」和 OpenSSL 例外写进这句短话。本次访问 https://strongswan.org/licensing.html 得到 404,商业许可的合同文本没有核对。
GitHub 给出的 SPDX 标识是 NOASSERTION,与这份多段许可结构相符。开源部分以仓库 LICENSE 为准;首页的 “GPLv2” 是简称,不是完整的许可文本。
架构:charon、VICI,以及内核里的 ESP
现行文档把 IKE 守护进程称为 charon。它当初为 IKEv2 从零编写,大部分代码在 libcharon,因此还能被 charon-systemd、charon-svc、charon-cmd、NetworkManager 插件 charon-nm 和 Android 应用复用。
文档里的分工可以收成三层:
| 层 | 文档中的角色 |
|---|---|
| IKE_SA / CHILD_SA | IKE 安全关联管理密钥交换;一个 IKE_SA 下可以有多个 CHILD_SA,后者对应 IPsec 安全关联 |
| 内核接口 | 安装 IPsec 安全关联、策略、路由和虚拟地址,并感知下层接口变化 |
| 插件 | 提供算法、凭据、认证方法,以及配置和控制接口 |
控制面的现代接口是 VICI(Versatile IKE Configuration Interface),命令行工具是 swanctl。文档说明:旧的 ipsec.conf 与 stroke 接口不是为自动化设计的;VICI 是给外部程序使用的 IPC。协议本身没有认证,文档建议放在权限受控的 UNIX 套接字上。仓库 README 仍把 stroke / ipsec 标为遗留接口。
Linux 上的默认内核后端是 kernel-netlink,安全关联装进内核的 IPsec 栈(XFRM)。kernel-pfkey 是面向其他系统 IPsec 栈的接口。kernel-libipsec 则完全在用户态,用 TUN 和项目自己的 libipsec 处理数据包,并通常强制 UDP 封装。插件文档写明它一般比内核栈慢,处理大量安全关联或流量时更明显,并写明不建议在安全网关上使用。这是官方对一个插件的性能说明,不是对 VPN 产品的排名。
因此「strongSwan 加密了流量」在 Linux 默认安装里的准确含义是:charon 完成 IKE,内核 ESP 保护数据包。换到 libipsec 或非 Linux 移植时,数据面位置会变。官网写明它运行于 Linux 2.6 至 6.x,并已移植到 Android、FreeBSD、macOS、iOS 和 Windows。各移植是否使用内核栈,要以该平台文档为准,本文没有逐个平台复测。
它实现哪些协议
strongSwan 实现的是已经发表的 IKE 与 IPsec 规范,而不是一种私有隧道。官网特性列表点名的主要文献如下。
| 文献 | 官网或规范里的角色 |
|---|---|
| RFC 7296 | IKEv2。官网同时写明仍然支持 IKEv1 |
| RFC 4301 | IPsec 安全架构:策略、安全关联和隧道/传输模式的框架 |
| RFC 4303 | ESP,实际保护 IP 包的数据平面 |
| RFC 4555 | MOBIKE,地址或接口变化时更新 IKE 安全关联 |
| RFC 3947 | IKE 里的 NAT 穿越协商。官网 NAT-T 条目引用的是这一份 |
| RFC 3948 | UDP 封装 ESP 的报文格式。官网短列表没有单独写出编号 |
| RFC 7383 | IKEv2 消息分片,用来避开 IP 分片问题 |
| RFC 7427 | IKEv2 签名认证 |
| RFC 9370 | IKEv2 多重密钥交换。官网写明包含 ML-KEM(FIPS 203)在内的经典与后量子交换 |
预共享密钥和证书认证的差别,见 预共享密钥与证书认证。IKEv2 与 WireGuard 在移动切换上的概念差别,见 IKEv2 与 WireGuard 怎么比。L2TP/IPsec 是把 L2TP 放进 IPsec 的组合,不等于 charon 的全部能力,见 L2TP/IPsec 是什么。
6.1.0 的 NEWS 列出多条与 PKCS#7、EAP-AKA 和 libcharon 相关的 CVE 修复。本文没有对照漏洞数据库逐条复核,版本是否该升级应以项目公告为准。
文档中的典型用途
About 页强调四件事:配置相对直接、认证与加密手段强、策略能覆盖大型网络、插件式的可移植结构。对应到常见部署角色,而不是建议选它:
- 站点到站点:两个网关为各自子网协商 CHILD_SA。站点到站点与远程接入的差别见 站点到站点与远程接入。
- 远程接入:为客户端分配虚拟地址,地址池可以由 IKE 守护进程、DHCP、RADIUS 或 SQL 提供。这是官网特性列表中的能力,不是某一种客户端的操作说明。
- 桌面集成:NetworkManager 通过 D-Bus 使用独立的
charon-nm,文档写明该集成只支持 IKEv2。
它不负责应用层代理,也不根据域名选择出口。需要 SOCKS、HTTP 或按域名分流时,面对的是另一类软件。
和相近项目的边界
| 项目 | 关系 | 边界 |
|---|---|---|
| FreeS/WAN | 祖先项目 | About 页与 2008 年讲稿都把它当作分叉来源;About 页称现行代码已不再共享祖先代码 |
| Openswan | 另一支早期分叉 | 2008 年讲稿写明二者最初同源,之后侧重点不同 |
| Libreswan | 更晚的 IKE 实现 | 其 README 写明:从 Openswan 2.6.38 分出,而 Openswan 从 FreeS/WAN 2.04 分出。它是独立项目,不是 strongSwan 的发行版 |
| WireGuard | 另一种 VPN 协议 | 不使用 IKE,也不把 ESP 装进内核 XFRM。见 WireGuard 与 OpenVPN |
| sing-box 等代理平台 | 多协议转发核心 | 可以把某些 VPN 协议当作一种出口;strongSwan 的工作是 IKE 与 IPsec 安全关联 |
Libreswan 的许可证、维护者和现行架构不在本文范围内。
读资料时先分开的三件事
- 年份以哪一页为准:About 页的 2005,还是 2008 年讲稿的 2004 年 3 月。
- 许可以哪一段为准:仓库
LICENSE的「第 2 版或更新版本」加例外,还是首页的 “GPLv2” 简称。 - 数据包在哪里被 ESP 保护:默认 kernel-netlink,还是用户态 libipsec,或某个非 Linux 移植。
本文只整理公开资料。部署 IPsec 网关还受当地电信管理和网络所有权约束;这里不提供规避管理的做法。
主要资料
- 项目首页与 About:strongswan.org、About
- 知识产权转移公告:secunet Acquires Rights
- 创始人记述:Bye Bye Pluto;2008 年 LinuxTag 讲稿见文档站附件
- 现行文档:charon、VICI、kernel-libipsec(docs.strongswan.org)
- 源码:strongswan/strongswan
- IKEv2:RFC 7296;IPsec 架构:RFC 4301;ESP:RFC 4303