strongswan IKE 的维护方式有两种:
- ipsec (ipsec.conf)
- vici (swanctl.conf)
在 ipsec.conf 的使用场景中,所有 ipsec connection 都在一个配置文件中,每当有 connection 变更,都需要重启一次服务。这在云服务场景,是无法维护的。不可能用户为一个新的站点,添加了一个新的 ipsec conn,服务都需要重启一下,这样所有连接都需要重连一次。
比如我有一个中心 IPSec vpn 网关, 那这个网关是不能重启的,所以中心网关上,不能用一个 ipsec.conf 来提供服务。所以中心网关必须使用一种面向每一个 ipsec connection 能够用逐个处理的架构。
strongswan 实现了这个新的架构,叫做 vici
那么我们来详细了解一下 StrongSwan Vici 的全称、架构设计,以及它在整个 StrongSwan 系统中的作用。
1. Vici 的全称:
Vici 的全称是 Versatile IKE Configuration Interface,中文可以翻译为"通用 IKE 配置接口"。
2. 架构设计:
Vici 的架构设计基于客户端-服务器模型,主要包含以下几个组件:
-
Vici Server (Charon): Vici Server 是 StrongSwan 的 IKE 守护进程 (Charon) 的一部分。 它监听 Unix 域套接字 (Unix domain socket),等待客户端连接,并处理来自客户端的配置和控制请求。 无论是
strongswan-charon
还是charon-systemd
,都包含了 Vici Server 的功能。 -
Vici Client (swanctl): Vici Client 是一个独立的命令行工具,用于通过 Vici 接口与 Vici Server 进行通信。 它允许用户加载配置、启动/停止连接、查看状态等。
swanctl
是 StrongSwan 提供的官方 Vici Client。 -
Vici 协议: Vici 协议定义了客户端和服务器之间通信的消息格式和交互流程。 它基于简单的文本格式,易于解析和实现。
Vici 的工作流程:
-
客户端发起连接: Vici Client (例如
swanctl
) 通过 Unix 域套接字连接到 Vici Server (Charon)。 -
客户端发送请求: 客户端使用 Vici 协议将配置或控制请求发送到服务器。 例如,客户端可以发送一个
load-conn
请求来加载一个新的 VPN 连接配置。 -
服务器处理请求: Vici Server 接收到请求后,会对请求进行解析和处理。 如果请求是合法的,服务器会执行相应的操作,例如加载配置、启动连接、停止连接等。
-
服务器发送响应: 服务器将处理结果以 Vici 协议格式发送回客户端。 响应可以包含成功或失败的状态码,以及其他相关信息。
-
客户端接收响应: 客户端接收到响应后,会对响应进行解析,并根据结果采取相应的行动。 例如,如果连接加载成功,客户端可能会显示一条成功消息。
Vici 架构图:
lua
+---------------------+ +---------------------+
| Vici Client | | Vici Server |
| (e.g., swanctl) | | (Charon Daemon) |
+---------------------+ +---------------------+
| |
| Unix Domain Socket |
---------------------->|
| |
| Vici Protocol |
<----------------------|
| |
+---------------------+ +---------------------+
3. Vici 在 StrongSwan 系统中的作用:
Vici 在 StrongSwan 系统中扮演着关键的角色,它实现了以下功能:
-
动态配置: Vici 允许在 StrongSwan 运行时动态地加载、修改和删除 VPN 连接配置,而无需重启 StrongSwan 服务。 这对于需要频繁更改配置的场景非常有用。
-
细粒度控制: Vici 允许对每个 VPN 连接进行精细化控制,例如启动、停止、重新协商连接,查看连接状态等。
-
远程管理: Vici 可以通过 Unix 域套接字进行远程管理,这意味着你可以通过网络连接到 StrongSwan 服务器,并使用
swanctl
命令来管理 VPN 连接。 -
可编程性: Vici 协议是基于文本的,易于解析和实现。 这使得你可以使用任何编程语言编写自定义的 Vici 客户端,从而实现 StrongSwan 的自动化管理。
总结:
Vici (Versatile IKE Configuration Interface) 是 StrongSwan 的通用 IKE 配置接口。 它基于客户端-服务器模型,通过 Unix 域套接字和 Vici 协议实现动态配置、细粒度控制、远程管理和可编程性。 Vici 在 StrongSwan 系统中扮演着关键的角色,使得 StrongSwan 能够适应各种复杂的 VPN 部署场景。