Ubuntu 22.04 安装 strongSwan 指南
Ubuntu 22.04 安装 strongSwan 实测指南:apt 在线(5.9.5)、源码编译上游 6.1.0、离线 deb 三方案逐步实装,含 systemd 服务托管、安装验证、版本锁定、多版本共存、10 条真实 FAQ 与卸载清理,全部回显逐条实测采集。
Ubuntu 22.04 安装 strongSwan 指南
目标:在 Ubuntu 22.04(jammy)服务器上把 strongSwan 装好、装对、装得可维护。覆盖三种安装方案:apt 在线安装(官方推荐)、源码编译安装上游最新版(获取 6.x 新特性)、离线 deb 包安装(内网环境),并交付 systemd 服务托管、最小连通验证、版本锁定、卸载清理与高频故障排查。本篇全部命令与回显均在实测环境逐条执行采集,配置参数与 CLI 命令的深入用法见系列姊妹篇。
一、环境信息
- 实测时间:2026-10-20
- 操作系统:Ubuntu 22.04 (jammy),x86_64,内核 6.8.0-138-generic
- 目标软件:strongSwan
- 实测拓扑:两台最小化安装的 Ubuntu 22.04 服务器模拟站点到站点场景:
- 网关 moon:内网
10.89.57.11,模拟受保护网段192.168.30.0/24(挂载在回环地址上用于产生真实流量) - 网关 sun:内网
10.89.57.12,模拟受保护网段192.168.40.0/24
- 网关 moon:内网
- 版本基准(双版本口径,详见第三节):
- Ubuntu jammy 官方源:
5.9.5-2ubuntu2.8(jammy-updates) - 上游最新稳定版:
6.1.0(2026-09-07 发布,源码编译方案实测对象)
- Ubuntu jammy 官方源:
💡 口径互标:本系列《strongSwan 6.1.0 介绍与选型指南》以 6.1.0 为叙述基准;本篇及《strongSwan 5.9.5 配置参数详解》《strongSwan 5.9.5 常用 CLI 命令详解》以 jammy 实际可装的 5.9.5 为实测基准,涉及版本差异处逐条标注。
二、前置条件
- 具备 root 或 sudo 权限的账号;
- 服务器能访问软件仓库(在线/离线方案二选一,见后文);
- UDP 500 与 UDP 4500 端口空闲(IKE 协商与 NAT 穿越用),安装前核查:
ss -lunp | grep -E ':(500|4500)\b'
实测(端口空闲,无任何输出,echo $? 为 1):
(无输出,说明 UDP 500/4500 均未被占用)
- 内核 XFRM 子系统可用(IPsec 数据面依赖):
lsmod | grep xfrm_user
实测:
xfrm_user 61440 1
xfrm_algo 16384 1 xfrm_user
⚠️ 若
lsmod无 xfrm_user 行,执行modprobe xfrm_user加载;Ubuntu 通用内核默认内置 XFRM 框架(CONFIG_XFRM=y),仅 xfrm_user 为模块。
三、版本选型说明
Ubuntu 22.04 官方源的 strongSwan 与上游存在约一个大版本的差距,选型前先对齐口径:
| 维度 | jammy 官方源 5.9.5 | 上游 6.1.0 |
|---|---|---|
| 版本号 | 5.9.5-2ubuntu2.8 | 6.1.0(上游) |
| 发布时间 | 5.9.5 基线发布于 2021 年(jammy 冻结版本,安全更新跟进至当前) | 2026-09-07 |
| IKEv1 | 默认启用 | 默认禁用,需 --enable-ikev1 显式开启,官方计划一年内移除 |
| 配置命令面 | starter + ipsec 命令 + swanctl 双轨 | swanctl 为主,源码默认构建不产 ipsec 命令(stroke 需显式启用) |
| 获取方式 | apt install strongswan | 源码编译(方案 B) |
| 适用 | 生产稳态、与发行版更新节奏一致 | 需要 6.x 特性(IKEv2-only 默认、ML-KEM 维护更新等) |
实测确认 jammy 源中可装版本:
apt-cache policy strongswan
实测:
strongswan:
Installed: 5.9.5-2ubuntu2.8
Candidate: 5.9.5-2ubuntu2.8
Version table:
*** 5.9.5-2ubuntu2.8 500
500 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
100 /var/lib/dpkg/status
5.9.5-2ubuntu3.2 500
500 http://archive.ubuntu.com/ubuntu jammy-proposed/main amd64 Packages
5.9.5-2ubuntu1.2 500
500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
💡 技术拓展:版本选型的三个多义概念
- strongSwan 包 vs strongswan 包:Ubuntu 的
strongswan是元包(meta package),只负责把strongswan-charon(守护进程)、strongswan-starter(starter/ipsec 命令线)、strongswan-libcharon、libstrongswan*(基础库与插件)拉齐;swanctl工具与 vici 插件在strongswan-swanctl包中,pki证书工具在strongswan-pki包中——只装元包是拿不到 swanctl 的,这是最常见的"装完没命令"事故。- IKEv1 vs IKEv2:5.9.5 两个都支持;6.1.0 起 IKEv1 默认禁用。新建连接一律按 IKEv2 设计(
version = 2)。- starter 线 vs charon-systemd 线:同一台机器两条服务线互斥(都占用
/var/run/charon.vici与 UDP 端口),jammy 的strongswan-swanctl包不提供独立 systemd 单元,swanctl 命令直接对接 starter 线 charon 的 vici 套接字(实测第四节)。
四、方案 A:apt 在线安装(官方推荐)
4.1 安装
sudo apt update
sudo apt install -y strongswan strongswan-swanctl
实测(摘录关键过程,完整输出随安装屏幕滚动):
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
libcharon-extauth-plugins libip4tc2 libstrongswan
libstrongswan-standard-plugins strongswan-charon strongswan-libcharon
strongswan-starter
Suggested packages:
libstrongswan-extra-plugins libcharon-extra-plugins
The following NEW packages will be installed:
libcharon-extauth-plugins libip4tc2 libstrongswan
libstrongswan-standard-plugins strongswan strongswan-charon
strongswan-libcharon strongswan-starter strongswan-swanctl
0 upgraded, 9 newly installed, 0 to remove and 3 not upgraded.
Need to get 1098 kB of archives.
...
Setting up strongswan-starter (5.9.5-2ubuntu2.8) ...
invoke-rc.d: policy-rc.d denied execution of start.
invoke-rc.d: policy-rc.d denied execution of start.
⚠️
invoke-rc.d: policy-rc.d denied execution of start.在受限环境(云主机的安全策略、部分最小化环境)属预期现象,包安装阶段的自动启动被拦截,手动systemctl start即可(见 FAQ-2)。
补齐 pki 证书工具(不在元包依赖里,实测确认为独立包):
sudo apt install -y strongswan-pki
实测:
The following NEW packages will be installed:
strongswan-pki
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 57.9 kB of archives.
After this operation, 303 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 strongswan-pki amd64 5.9.5-2ubuntu2.8 [57.9 kB]
Fetched 57.9 kB in 2s (23.9 kB/s)
Selecting previously unselected package strongswan-pki.
⚠️ jammy 的
strongswan-swanctl包实测只含 swanctl 工具与 vici 插件配置片段,既不带charon-systemd守护进程(dpkg -S charon-systemd无匹配),也不带 systemd 单元(dpkg -L strongswan-swanctl | grep systemd无输出)——不要去找strongswan-swanctl.service,它不存在;swanctl 直接对接strongswan-starter.service拉起的 charon 的 vici 套接字(见 FAQ-10)。
4.2 安装产物与文件布局
ipsec version
实测:
Linux strongSwan U5.9.5/K6.8.0-138-generic
University of Applied Sciences Rapperswil, Switzerland
See 'ipsec --copyright' for copyright information.
配置文件与目录(实测布局):
| 路径 | 内容 |
|---|---|
/etc/ipsec.conf、/etc/ipsec.secrets | 传统 starter 线配置(遗留体系) |
/etc/ipsec.d/{cacerts,certs,private,...} | 传统线的证书目录 |
/etc/swanctl/swanctl.conf + /etc/swanctl/conf.d/ | swanctl 连接配置(当前推荐) |
/etc/swanctl/{x509ca,x509,private,...} | swanctl 线的证书/私钥目录 |
/etc/strongswan.conf + /etc/strongswan.d/ | 守护进程全局设置与插件片段 |
/usr/lib/ipsec/ | 二进制与插件(charon、_updown 等) |
systemd 单元(实测 dpkg -L strongswan-starter | grep systemd):
/lib/systemd/system/strongswan-starter.service
ipsec.service 是它的别名(实测 ls -la /lib/systemd/system/ipsec.service):
lrwxrwxrwx 1 root root 26 Sep 10 12:38 /lib/systemd/system/ipsec.service -> strongswan-starter.service
4.3 systemd 服务托管
安装完成后服务默认已 enable 但处于未启动态(最小化环境实测;常规云主机 apt 安装后通常已自动启动):
systemctl status strongswan-starter.service --no-pager
实测(安装后未启动时):
○ strongswan-starter.service - strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf
Loaded: loaded (/lib/systemd/system/strongswan-starter.service; enabled; vendor preset: enabled)
Active: inactive (dead)
启动并设置开机自启:
sudo systemctl start strongswan-starter.service
sudo systemctl enable strongswan-starter.service
启动后再查状态:
● strongswan-starter.service - strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf
Loaded: loaded (/lib/systemd/system/strongswan-starter.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2026-10-20 11:17:56 UTC; 5ms ago
Main PID: 599 (starter)
Tasks: 2 (limit: 5753)
Memory: 368.0K
CPU: 4ms
CGroup: (CGroup 层级路径与宿主环境相关,此处省略)
└─599 /usr/lib/ipsec/starter --daemon charon --nofork
⚠️ 上述回显中的 PID、时间戳来自实测环境;你的机器上数值会不同,属正常现象。starter 以
--daemon charon --nofork方式直接托管 charon,两者同属一个服务单元。
单元文件完整内容(实测 /lib/systemd/system/strongswan-starter.service):
[Unit]
Description=strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf
After=network-online.target
[Service]
ExecStart=/usr/sbin/ipsec start --nofork
ExecReload=/usr/sbin/ipsec reload
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
日常服务操作一览(语义按官方手册,回显见各处实测):
sudo systemctl start|stop|restart|reload strongswan-starter.service
sudo systemctl status strongswan-starter.service
4.4 安装后验证
三连验证(版本 → 服务 → 守护进程连通):
ipsec version && systemctl is-active strongswan-starter.service && swanctl --version
实测:
Linux strongSwan U5.9.5/K6.8.0-138-generic
Copyright (C) 2006-2022 Andreas Steffen.
Copyright (C) 2006-2022 strongSwan project. All rights reserved.
University of Applied Sciences Rapperswil, Switzerland
active
strongSwan swanctl 5.9.5
再核查监听端口(IKE 500、NAT-T 4500):
ss -lunp | grep -E ':(500|4500)\b'
实测:
UNCONN 0 0 0.0.0.0:4500 0.0.0.0:* users:(("charon",pid=553,fd=12))
UNCONN 0 0 0.0.0.0:500 0.0.0.0:* users:(("charon",pid=553,fd=11))
UNCONN 0 0 *:4500 *:* users:(("charon",pid=553,fd=10))
UNCONN 0 0 *:500 *:* users:(("charon",pid=553,fd=9))
五、方案 B:源码编译安装上游 6.1.0
适用:需要上游 6.x 特性(IKEv1 默认禁用、ML-KEM 更新、新插件)、或源仓库版本不满足需求。
5.1 安装编译依赖
sudo apt install -y build-essential libgmp-dev libssl-dev libcurl4-openssl-dev \
wget gperf bison flex pkg-config libsystemd-dev
⚠️
pkg-config必装:实测未装它时 configure 第一步就报错(见第十节 FAQ-4);需要 systemd 托管时还需libsystemd-dev(FAQ-5)。
5.2 下载源码并校验
cd /root
wget https://download.strongswan.org/strongswan-6.1.0.tar.bz2
sha256sum strongswan-6.1.0.tar.bz2
实测(wget 静默下载后确认文件与校验值):
ls -la strongswan-6.1.0.tar.bz2
sha256sum strongswan-6.1.0.tar.bz2
-rw-r--r-- 1 root root 4620545 Sep 7 12:04 strongswan-6.1.0.tar.bz2
fe6c97481298767213cfc2e9a1da29fdd8018d481ff4cb9cf0283099654f20d4 strongswan-6.1.0.tar.bz2
💡 校验值与官方发布页对不上时(同步滞后等),以官方 download.strongswan.org 页面公布的校验和为准。
5.3 配置与编译
tar xf strongswan-6.1.0.tar.bz2
cd strongswan-6.1.0
./configure --prefix=/usr/local --sysconfdir=/etc \
--enable-swanctl --enable-openssl --enable-systemd \
--with-systemdsystemunitdir=/usr/local/lib/systemd/system
make -j$(nproc)
实测 configure 输出摘要(6.x 默认插件集,注意 stroke 已不在默认清单):
strongSwan will be built with the following plugins
-----------------------------------------------------
libstrongswan: random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pgp dnskey sshkey pem openssl pkcs8 xcbc cmac kdf drbg
libcharon: attr kernel-netlink resolve socket-default vici updown counters
libtnccs:
libtpmtss:
实测(编译完成标志,make 尾部):
make[2]: Entering directory '/root/strongswan-6.1.0'
make[2]: Leaving directory '/root/strongswan-6.1.0'
make[1]: Leaving directory '/root/strongswan-6.1.0'
5.4 安装与验证
sudo make install
产物(实测 ls /usr/local/sbin /usr/local/libexec/ipsec):
/usr/local/sbin:
charon-systemd
swanctl
/usr/local/libexec/ipsec:
_updown
charon
xfrmi
版本验证(实测):
/usr/local/libexec/ipsec/charon --version | head -1
strongSwan 6.1.0
systemd 单元(6.x 用 charon-systemd 托管,实测 /usr/local/lib/systemd/system/strongswan.service):
[Unit]
Description=strongSwan IPsec IKEv1/IKEv2 daemon using swanctl
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/local/sbin/charon-systemd
ExecStartPost=/usr/local/sbin/swanctl --load-all --noprompt
ExecReload=/usr/local/sbin/swanctl --reload
ExecReload=/usr/local/sbin/swanctl --load-all --noprompt
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Alias=strongswan-swanctl.service
⚠️ 6.x 与 apt 5.9.5 的关键差异:
make install后没有ipsec命令与 starter(6.x 默认不构建 stroke/starter,swanctl 为唯一控制面),管理动作全部走swanctl。若两套并存(见第九节),注意/usr/local与/usr的二进制、/etc共用可能带来的配置交叉。
5.5 收尾:拉起服务
sudo systemctl daemon-reload
sudo systemctl enable --now strongswan.service
⚠️ 与方案 A 的
strongswan-starter.service名字不同:6.x 源码版单元名是strongswan.service,不要混用两个服务线。
六、方案 C:离线 deb 包安装(内网环境)
适用:生产/内网服务器无法直连软件仓库。思路是在同版本、同架构的联网机上把 deb 全部下载下来,拷贝到目标机后用 dpkg 安装。
6.1 联网机上下载(含依赖)
mkdir -p /root/debs && cd /root/debs
apt-get download strongswan strongswan-swanctl strongswan-starter
实测(下载结果与产物清单):
ls -la /root/debs/
-rw-r--r-- 1 root root 155826 Sep 21 12:26 strongswan-starter_5.9.5-2ubuntu2.8_amd64.deb
-rw-r--r-- 1 root root 119006 Sep 21 12:26 strongswan-swanctl_5.9.5-2ubuntu2.8_amd64.deb
-rw-r--r-- 1 root root 18704 Sep 21 12:26 strongswan_5.9.5-2ubuntu2.8_all.deb
Fetched 294 kB in 2s (138 kB/s)
⚠️
apt-get download只下载指名包,不自动拉依赖。完整做法是在联网机上用apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances strongswan strongswan-swanctl strongswan-pki | grep "^\w" | sort -u)下载全量依赖,或直接下载后在内网机dpkg -i时按报错补齐。另注意元包 strongswan 的 deb 架构是all而非 amd64。
6.2 目标机上安装
把 /root/debs/ 拷贝到目标机(scp/U 盘均可),然后:
cd /root/debs
dpkg -i strongswan_5.9.5-2ubuntu2.8_all.deb
实测(本机已装,dpkg 自动重装覆盖验证安装路径,输出形态与首装一致):
Preparing to unpack strongswan_5.9.5-2ubuntu2.8_all.deb ...
Unpacking strongswan (5.9.5-2ubuntu2.8) over (5.9.5-2ubuntu2.8) ...
Setting up strongswan (5.9.5-2ubuntu2.8) ...
依赖未就绪时 dpkg -i 会报 dependency problems,此时先 apt-get install -f 或补齐缺包后重试;安装后验证方法同 4.4 节。
七、方案对比与选择建议
| 维度 | 方案 A:apt 在线 | 方案 B:源码编译 6.1.0 | 方案 C:离线 deb |
|---|---|---|---|
| 版本 | 5.9.5(jammy 源) | 6.1.0(上游最新) | 同 A |
| 官方推荐度 | 发行版标准路径,首选 | 需要新特性时用 | 断网环境唯一解 |
| 安装耗时 | 分钟级 | 10–20 分钟(视 CPU) | 分钟级 |
| systemd 托管 | strongswan-starter.service 自动就绪 | 需自行 --enable-systemd + unit | 同 A |
| 升级维护 | apt upgrade 一条命令 | 重复 5.2–5.5 流程 | 重新下载 deb |
| 与发行版集成 | 自动(包管理器管理) | 手动(/usr/local 自管) | 同 A |
| 回滚难度 | 低(apt 保留旧包) | 手动删 /usr/local 产物 | 中 |
「如果…则…」:
- 如果只是常规生产部署且没有对 6.x 特性的硬需求 → 方案 A,并把版本锁住(第九节);
- 如果必须用 6.x(IKEv1 移除演练、ML-KEM、新插件)→ 方案 B,务必加
--enable-systemd走服务托管; - 如果目标机完全离线 → 方案 C,注意依赖全量下载。
八、基础配置说明
8.1 双配置体系落位
装完即有两套配置体系(详见《strongSwan 5.9.5 配置参数详解》):
- swanctl 线(推荐):
/etc/swanctl/swanctl.conf(默认全部为注释模板,实测确认)+/etc/swanctl/conf.d/*.conf片段目录; - starter 线(遗留):
/etc/ipsec.conf+/etc/ipsec.secrets+/etc/ipsec.d/证书目录。
修改配置后无需重启守护进程:swanctl 线 swanctl --load-all 热加载;starter 线 ipsec update(不重建隧道)或 ipsec reload。
8.2 最小站点到站点配置(预览)
以 moon(10.89.57.11)/sun(10.89.57.12)两台网关、证书认证为例,完整证书生成与加载流程见《strongSwan 5.9.5 常用 CLI 命令详解》:
# moon:/etc/swanctl/conf.d/site2site.conf(sun 侧对称互换地址与身份)
connections {
net-30-40 {
version = 2
local_addrs = 10.89.57.11
remote_addrs = 10.89.57.12
proposals = aes256-sha384-modp2048
send_cert = always
dpd_delay = 30s
local {
auth = pubkey
id = moon.quzuo.lab
certs = moon-cert.pem
}
remote {
auth = pubkey
id = sun.quzuo.lab
}
children {
net-30-40 {
local_ts = 192.168.30.0/24
remote_ts = 192.168.40.0/24
esp_proposals = aes256gcm16-prfsha384-modp2048
start_action = start
dpd_action = restart
rekey_time = 60m
}
}
}
}
8.3 防火墙放行
IKE 用 UDP 500/4500,ESP 裸封装用 IP 协议号 50。ufw 下三个规则(第三条必须带 from/to 子句,实测裸写 ufw allow proto esp 会报错,见 FAQ-8):
sudo ufw allow 500/udp
sudo ufw allow 4500/udp
sudo ufw allow proto esp from any to any
实测(ufw 侧;Status: inactive 为实测环境未启用 ufw 的正常显示):
Rules updated
Rules updated (v6)
Rules updated
Rules updated (v6)
九、升级、降级与多版本管理
9.1 apt 线升级与锁定
sudo apt update && sudo apt upgrade strongswan
安全更新会沿 5.9.5-2ubuntuX 系列推进。要防止 apt upgrade 意外升级 strongSwan(变更窗口管控),可用版本锁定:
sudo apt-mark hold strongswan
实测:
strongswan set on hold.
查看与解除锁定:
$ apt-mark showhold
strongswan
$ apt-mark unhold strongswan
Canceled hold on strongswan.
9.2 与源码版共存
apt 版装在 /usr(命令 /usr/sbin/ipsec、/usr/bin/swanctl),源码版按方案 B 装在 /usr/local(命令 /usr/local/sbin/swanctl)。共存要点:
- 两条 systemd 服务线(
strongswan-starter.service与strongswan.service)互斥,同一时间只能起一条,否则 UDP 500/4500 与 vici 套接字冲突; PATH里/usr/local/sbin通常在/usr/sbin之前,输swanctl时优先命中的是源码版——排障时先which swanctl确认实际调用的版本;- 两者默认共用
/etc(源码 configure 时指定了--sysconfdir=/etc),迁移期建议源码版改用独立配置目录(configure 时改--sysconfdir=/etc/strongswan6)避免互相踩配置。
9.3 降级
apt 线降级到仓库内指定版本:
sudo apt install strongswan=5.9.5-2ubuntu1.2 strongswan-charon=5.9.5-2ubuntu1.2
⚠️ 降级会连带
libstrongswan、strongswan-libcharon等依赖一起降,把报错里点名的包全部带版本号执行即可;降级前建议先apt-mark hold锁住,避免被再次自动升级。源码版降级 = 重新编译旧版本并make install覆盖(或改用版本化目录多版本并存)。
十、常见问题(FAQ)
Q1:装完 swanctl --version 报 connecting to 'unix:///var/run/charon.vici' failed: No such file or directory?
实测原因:charon 未启动(服务装完处于 inactive 时执行了该命令)。先 systemctl start strongswan-starter.service 再执行 swanctl。swanctl 只是 VICI 客户端,守护进程不在套接字就不存在。
Q2:ipsec start 报 Service denied 或日志出现 policy-rc.d 拒绝?
实测原因:极简/受限运行环境(部分云主机的安全策略)里的 /usr/sbin/policy-rc.d 会拦截包安装阶段的自动服务启动。属预期行为,手动 systemctl start strongswan-starter.service 即可。
Q3:pki 命令不存在?
实测原因:jammy 把证书工具拆进 strongswan-pki 包,元包不带。sudo apt install strongswan-pki 解决。
Q4:configure 报 configure: error: The pkg-config script could not be found...?
实测原因与解法:编译依赖漏装 pkg-config,apt install pkg-config 后重跑 configure。
Q5:configure 带 --enable-systemd 报 Package 'libsystemd' ... not found?
实测原因:缺 systemd 开发头文件与 pkg-config 描述,apt install libsystemd-dev 解决;同时建议显式传 --with-systemdsystemunitdir=/usr/local/lib/systemd/system,否则 unit 不落盘(实测两者都遇到过)。
Q6:改了 strongswan.conf 后 ipsec restart 报 unexpected ... at /etc/strongswan.conf:LINE, line ... abort initialization due to invalid configuration?
实测原因:strongswan.conf 的段名只允许字母数字与下划线,/、-、. 都不行。配置 filelog 写日志文件时段名不能直接写成文件路径,要用 path 选项:
charon {
filelog {
charon-file { # 段名自取,合法字符集内
path = /var/log/strongswan-charon.log
time_format = %T
default = 1
}
}
}
实测验证(合法改写后重启并建链,日志文件随即生成):
Starting strongSwan 5.9.5 IPsec [starter]...
initiate completed successfully
-rw-r--r-- 1 root root 4096 Oct 20 11:36 /var/log/strongswan-charon.log
11:36:50 15[IKE] IKE_SA net-30-40[1] established between 10.89.57.11[moon.quzuo.lab]...10.89.57.12[sun.quzuo.lab]
Q7:systemctl enable strongswan-starter.service 报 Failed to disable unit: Unit file does not exist?
实测原因:先 apt purge 后才做 enable/disable,单元文件已被包管理器移除。顺序应是先 stop/disable 服务、再卸载(见第十一节)。
Q8:ufw allow proto esp 报 ERROR: Need 'to' or 'from' clause?
实测原因:ufw 的协议级规则必须带地址子句。改成 ufw allow proto esp from any to any(实测返回 Rules updated / Rules updated (v6))。
Q9:6.x 源码版装完找不到 ipsec 命令?
实测原因:6.x 默认构建不含 starter/stroke(configure 摘要里 libcharon 插件清单无 stroke),make install 只产出 swanctl、charon、charon-systemd。这是预期行为,控制面统一走 swanctl。
Q10:jammy 装完找不到 strongswan-swanctl.service?
实测原因:dpkg -L strongswan-swanctl 确认该包不含 systemd 单元,swanctl 直接对接 strongswan-starter.service 拉起的 charon 的 vici 套接字。
十一、卸载与清理
正确顺序:先停服务 → 再 purge → 再清残留。实测跳过第一步时,purge 后 charon 仍在运行(二进制已删但进程存活)。
# 1. 停止并禁用服务(若存在)
sudo systemctl stop strongswan-starter.service 2>/dev/null
sudo systemctl disable strongswan-starter.service 2>/dev/null
# 2. purge 全家(元包+工具+库+插件)
sudo apt-get purge -y strongswan strongswan-swanctl strongswan-pki \
"strongswan-*" "libcharon-*" "libstrongswan*"
sudo apt-get autoremove -y
# 3. 清理配置残留
sudo rm -rf /etc/swanctl /etc/strongswan.d /etc/strongswan.conf \
/etc/ipsec.conf /etc/ipsec.secrets /etc/ipsec.d
# 4. 终验
dpkg -l | grep -i strongswan; echo "dpkg_grep_exit=$?"
pgrep -a charon; echo "pgrep_exit=$?"
ss -lunp | grep -E ':(500|4500)\b'
实测终验回显:
dpkg_grep_exit=1
pgrep_exit=1
ls: cannot access '/etc/strongswan.conf': No such file or directory
ls: cannot access '/etc/strongswan.d': No such file or directory
(ss 无输出,UDP 500/4500 已无监听)
💡 purge 后若
dpkg -l出现rc状态行(已卸载但配置残留),再跑一次apt-get purge对应包名即可清掉;源码版清理:cd strongswan-6.1.0 && make uninstall,残留产物rm -rf /usr/local/{sbin/swanctl,libexec/ipsec,lib/systemd/system/strongswan.service,etc/strongswan.d}(configure 时 sysconfdir 指到 /etc 的还要按方案 B 的落位清单补删)。
十二、参考链接
- 官方文档(安装/配置):https://docs.strongswan.org/docs/latest/index.html(查询日期 2026-10-20)
- 官方下载与校验:https://download.strongswan.org/
- GitHub 发布页:https://github.com/strongswan/strongswan/releases
- Ubuntu jammy 包页:https://launchpad.net/ubuntu/jammy/+source/strongswan
- 站内系列:《strongSwan 6.1.0 介绍与选型指南》《strongSwan 5.9.5 配置参数详解》《strongSwan 5.9.5 常用 CLI 命令详解》