摘要
strongSwan 是一个跨平台的 IPsec 开源项目,提供了一套完整的 IPsec 实现方案以保证服务端和客户端之间的加密和认证。本文分别介绍了 strongswan 在 Linux 和 Windows 平台的安装方法以及常见问题,并参考官方文档,尝试建立不同机器间的 IPsec 连接。
编译安装
Linux
Linux 系统下编译安装 strongswan 较为简单,本文选择 Debian 系统作为测试系统,首先安装依赖:
|
|
strongswan 的很多密码学算法依赖 OpenSSL 库中的实现,尽管 Linux 平台下通常自带 OpenSSL ,但通常自带的因缺乏一些库而使 strongswan 会编译失败,所以这里还是建议重新编译安装 OpenSSL 最新版本。可以在 openssl 官方项目地址下载对应的源码包,本文选择 openssl-3.2.0-alpha2.tar.gz 版本。在 MSYS2 安装目录下创建 SourceCode 目录,将 openssl-3.2.0-alpha2.tar.gz 解压至 SourceCode 目录下,之后便可以在 MSYS2 命令行中通过 /SourceCode/openssl-3.2.0-alpha2 来访问该目录。 然后进入到 MSYS2 的 UCRT64 命令行环境中的解压目录对 OpenSSL 进行编译安装,整体过程非常简单,只需要按顺序执行以下命令:
|
|
安装完成后即可在 /usr/local/openssl
目录下看见对应程序:
其次,从 strongswan 官网下载源码包并解压,本文选择 strongswan-5.9.11.tar.gz 版本:
|
|
然后,根据所需模板编译源码包并安装至本机:
|
|
在 /etc/bash.bashrc
中加入环境变量:
|
|
最后,更新环境变量并启动 strongswan 守护进程并查看状态:
|
|
可自行将/usr/local/strongswan/sbin
加入环境变量,如果启动成功则可以看到如下信息:
Windows
编译 Windows 版的 strongswan 软件主要有两种方法:在 Linux 系统跨平台编译 Windows 版本、在 Windows 系统集成 Linux 开发环境编译 Windows 版本。经过两天实践发现,前者除了需要跨平台配置 strongswan 本身编译参数外,还需要编译其依赖库 OpenSSL 等的 Windows 版本(**编译为 Linux 软件需要依赖 .so ,编译为 Windows 软件需要依赖 .dll),相比之下后者更容易实现且稳定。
安装 MSYS2
MSYS2 是集成了 pacman 和 Mingw-w64 的 Cygwin 升级版,提供了在 Windows 下使用 bash shell、configure、make、make install 等 Linux 开发工具链的渠道,是 MSYS 的一个升级版,准确的说与MSYS最大的区别是移植了 Arch Linux 的软件包管理系统 Pacman(其实是与Cygwin的区别)。
在 MSYS2 官网下载对应的可执行安装包并安装,本文选择 msys2-x86_64-20230718.exe 版本。MSYS2 安装完成后,你可以看到同时安装了六个子程序:
上述不同的子程序相当于 Anaconda 中不同的 Python 环境,它们之间的差异主要是环境变量、默认编译器/链接器、体系结构、使用的系统库等,通常使用 UCRT64 即可。MSYS2 使用 pacman 作为包管理工具,安装完成后建议先升级和更新本地包:
|
|
其次,建议安装 MinGW 相关工具链以减少构建故障:
|
|
安装 OpenSSL
strongswan 的很多密码学算法依赖 OpenSSL 库中的实现,在 Linux 平台下通常自带 OpenSSL 因而不需要额外操作,但在 Windows 平台下则需要手动编译安装(OpenSSL 官方不提供 Windows)。
可以在 openssl 官方项目地址下载对应的源码包,本文选择 openssl-3.2.0-alpha2.tar.gz 版本。在 MSYS2 安装目录下创建 SourceCode 目录,将 openssl-3.2.0-alpha2.tar.gz 解压至 SourceCode 目录下,之后便可以在 MSYS2 命令行中通过 /SourceCode/openssl-3.2.0-alpha2 来访问该目录。
然后进入到 MSYS2 的 UCRT64 命令行环境中的解压目录对 OpenSSL 进行编译安装,整体过程非常简单,只需要按顺序执行以下命令:
|
|
安装完成后即可在 /usr/local/openssl
目录下看见对应程序:
安装 strongswan
在官网中 strongSwan on Windows 可见,strongswan 本身对 Windows 只提供有限的支持,这也导致了并没有方便的 Windows 程序,只能自己编译安装。本文选择与 Linux 平台一致的 strongswan-5.9.11.tar.gz 版本源码包,将其解压至 MSYS2 安装目录的 SourceCode 目录下。
然后进入到 MSYS2 的 UCRT64 命令行环境中的解压目录对 strongswan 进行编译安装,按顺序执行以下命令:
|
|
其中,CFLAGS
和 LDFLAGS
必须指向 OpenSSL 的对应目录,不出意外的话即安装成功:
出意外的话就是出意外了,一个可能的原因是 --enable
了不支持的模块,Windows 下所有 strongswan 可用组件在 strongSwan on Windows 下都有说明,非必要不建议额外添加其它未说明可用的组件。
连接测试
未完待续
Q&A
-
Q: No package ’libsystemd-daemon’ found
A: sudo apt-get install libsystemd-dev -
Q:checking for systemd system unit directory… configure: error: not found (try –with-systemdsystemunitdir) A:configure 添加参数 –with-systemdsystemunitdir=/lib/systemd/system
-
Q: charon.vici: connect: no such file or directory A: 检查 strongswan 安装,并启动守护进程 sudo systemctl enable strongswan sudo systemctl start strongswan swanctl –stat
-
Q: configure: error: OpenSSL libcrypto not found
A: 究极大坑,windows 下需要编译 openssl 为对应系统的 dll ,并通过 CFLAGS 和 LDFLAGS 指定对应位置。Linux 重新手动编译按照 OpenSSL -
Q:configure: error: Python is required to resolve plugin constructors statically A:pacman -S python
-
Q:The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. A:apt install pkg-config
-
Q:fatal error: netinet/in.h: No such file or directory A:去掉 configure 中 –enable-dhcp
-
Q:kernel_libipsec_router.c:323:45: error: ‘F_SETFL’ undeclared (first use in this function) A:去掉 configure 中 –enable-kernel-libipsec
-
Q:.refptr.kernel_libipsec_plugin_create]+0x0): undefined reference to `kernel_libipsec_plugin_create’ A: