Ubuntu 22.04 安装 strongSwan 指南

Ubuntu 22.04 安装 strongSwan 实测指南:apt 在线(5.9.5)、源码编译上游 6.1.0、离线 deb 三方案逐步实装,含 systemd 服务托管、安装验证、版本锁定、多版本共存、10 条真实 FAQ 与卸载清理,全部回显逐条实测采集。

strongSwanVPN网络配置Ubuntu2026/10/20

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
  • 版本基准(双版本口径,详见第三节):
    • Ubuntu jammy 官方源:5.9.5-2ubuntu2.8(jammy-updates)
    • 上游最新稳定版:6.1.0(2026-09-07 发布,源码编译方案实测对象)

💡 口径互标:本系列《strongSwan 6.1.0 介绍与选型指南》以 6.1.0 为叙述基准;本篇及《strongSwan 5.9.5 配置参数详解》《strongSwan 5.9.5 常用 CLI 命令详解》以 jammy 实际可装的 5.9.5 为实测基准,涉及版本差异处逐条标注。

二、前置条件

  1. 具备 root 或 sudo 权限的账号;
  2. 服务器能访问软件仓库(在线/离线方案二选一,见后文);
  3. UDP 500 与 UDP 4500 端口空闲(IKE 协商与 NAT 穿越用),安装前核查:
ss -lunp | grep -E ':(500|4500)\b'

实测(端口空闲,无任何输出,echo $? 为 1):

(无输出,说明 UDP 500/4500 均未被占用)
  1. 内核 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.86.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

💡 技术拓展:版本选型的三个多义概念

  1. strongSwan 包 vs strongswan 包:Ubuntu 的 strongswan 是元包(meta package),只负责把 strongswan-charon(守护进程)、strongswan-starter(starter/ipsec 命令线)、strongswan-libcharon、libstrongswan*(基础库与插件)拉齐;swanctl 工具与 vici 插件在 strongswan-swanctl 包中,pki 证书工具在 strongswan-pki 包中——只装元包是拿不到 swanctl 的,这是最常见的"装完没命令"事故。
  2. IKEv1 vs IKEv2:5.9.5 两个都支持;6.1.0 起 IKEv1 默认禁用。新建连接一律按 IKEv2 设计(version = 2)。
  3. 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 的落位清单补删)。

十二、参考链接