strongSwan 5.9.5 配置参数详解
strongSwan 5.9.5 双配置体系参数详解:swanctl.conf 连接/children/认证/流量选择器/pools 与 strongswan.conf 守护进程参数逐项讲解,默认值取自发行包官方模板,两台网关真实站点到站点隧道逐项实测验证,含内核 XFRM 证据面与 FAQ 排障。
strongSwan 5.9.5 配置参数详解
目标:把 strongSwan 的两套配置文件——
swanctl.conf(连接/凭据/地址池)与strongswan.conf(守护进程全局设置)——的常用参数逐一讲透:每个参数的语义、默认值、实测验证方式与踩坑点。所有默认值摘自 Ubuntu 22.04 发行包自带的官方注释模板,所有验证回显均在两台 5.9.5 网关的真实站点到站点隧道上实测采集。安装过程见《Ubuntu 22.04 安装 strongSwan 指南》,命令全集见《strongSwan 5.9.5 常用 CLI 命令详解》。
一、环境信息
- 实测时间:2026-10-20;软件版本:strongSwan 5.9.5-2ubuntu2.8(Ubuntu 22.04 jammy 官方源)
- 实测拓扑(站点到站点,证书认证主线 + PSK 扩展线):
- 网关 moon:
10.89.57.11,受保护网段192.168.30.0/24,身份moon.quzuo.lab - 网关 sun:
10.89.57.12,受保护网段192.168.40.0/24,身份sun.quzuo.lab - CA:
C=CN, O=quzuo Lab, CN=quzuo Lab Root CA(自签,RSA 2048,有效期 3650 天) - 节点证书:RSA 2048,有效期 1200 天,SAN 含身份与地址
- 网关 moon:
- 配置落位:
/etc/swanctl/conf.d/site2site.conf(主线连接)、/etc/swanctl/conf.d/psk.conf(PSK 扩展)、/etc/swanctl/{x509ca,x509,private}(凭据)、/etc/strongswan.conf(日志) - 双版本口径:本篇以 5.9.5 实测为准;6.1.0 的差异点(
version默认值、IKEv1 默认禁用等)在涉及处标注,总体差异见《strongSwan 6.1.0 介绍与选型指南》。
二、配置体系总览
2.1 双配置体系分工
| 文件 | 管什么 | 生效方式 |
|---|---|---|
/etc/swanctl/swanctl.conf + conf.d/*.conf | 连接(connections)、认证轮(local/remote)、子 SA(children)、凭据(secrets)、地址池(pools)、CA(authorities) | swanctl --load-all 热加载,不断链 |
/etc/strongswan.conf + /etc/strongswan.d/*.conf | 守护进程全局:线程数、插件开关、日志、VICI 套接字 | swanctl --reload-settings(支持热更的键)或重启服务 |
/etc/ipsec.conf + /etc/ipsec.secrets | 遗留 starter 线的等价物 | ipsec update / ipsec reload |
两套体系可共存(starter 线的 charon 同时装了 stroke 与 vici 插件,swanctl --stats 实测插件清单含 stroke vici),但同一连接不要双写,避免策略冲突。
2.2 发行包默认模板实况
/etc/swanctl/swanctl.conf 出厂即完整注释模板(实测全文 220+ 行),是最权威的参数默认值清单。模板开头(实测):
# Section defining IKE connection configurations.
# connections {
# Section for an IKE connection named <conn>.
# <conn> {
# IKE major version to use for connection.
# version = 0
# Local address(es) to use for IKE communication, comma separated.
# local_addrs = %any
...
💡 实操建议:把这个模板当字典用。本篇第三、四节的参数表默认值全部摘自该模板(5.9.5 包内原文),非官方模板来源的取值不在此列。
配置片段目录 conf.d/ 的加载规则:swanctl --load-all 按字典序读取该目录下所有 .conf,与主文件合并(同名段落合并、同名连接覆盖警告)。实测本环境主文件保持注释态,连接全放片段:
# /etc/swanctl/conf.d/site2site.conf(moon 侧,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 = none
dpd_action = restart
rekey_time = 60m
}
}
}
}
三、connections 连接参数详解
3.1 协议与寻址
| 参数 | 默认值(模板) | 作用 | 实测要点 |
|---|---|---|---|
version | 0(5.9.5:IKEv2 优先、可回退 IKEv1;6.1.0 起默认 2 且 IKEv1 需编译启用) | IKE 主版本 | 显式写 version = 2 后,建链日志即 IKEv2 消息序列(实测回显见 3.5) |
local_addrs / remote_addrs | %any / %any | 本端/对端 IKE 地址,逗号分隔可多值 | 指定单地址后,charon 只在该地址上发起/应答;实测日志 sending packet: from 10.89.57.11[500] to 10.89.57.12[500] |
local_port / remote_port | 500 / 500 | IKE 端口 | NAT 穿越后自动浮动到 4500,无需手改 |
encap | no | 强制 UDP 封装 | 网络中间设备丢弃 ESP(协议号 50)时设 yes,代价是吞吐下降 |
mobike | yes | MOBIKE 动态地址更新 | 实测建链日志有 peer supports MOBIKE;移动场景保留默认 |
3.2 算法套件
| 参数 | 默认值 | 作用 | 实测要点 |
|---|---|---|---|
proposals | default | IKE_SA 算法提案 | 写 aes256-sha384-modp2048 后,实测协商结果 selected proposal: IKE:AES_CBC_256/HMAC_SHA2_384_192/PRF_HMAC_SHA2_384/MODP_2048 |
esp_proposals(children 内) | default | 子 SA 算法提案 | 写 aes256gcm16-prfsha384-modp2048 后实测 ESP:AES_GCM_16_256/NO_EXT_SEQ |
可用算法底座以 swanctl --list-algs 实测输出为准(含 aead: 段的 AES-GCM/GMAC、CHACHA20POLY1305,dh: 段的 MODP_2048/3072、CURVE_25519 等)。写法上用 - 连接加密-完整性-PRF-DH 组,AEAD 算法(GCM)自带完整性,PRF 仍需单列。
3.3 生命周期与可靠性
| 参数 | 默认值 | 作用 | 实测要点 |
|---|---|---|---|
dpd_delay | 0s(禁用) | 死端探测间隔 | 实测设 30s 后,对端失联约 30–90 秒内触发探测与重建 |
dpd_timeout | 0s | DPD 超时(仅 IKEv1) | IKEv2 下不需要,靠消息重传机制 |
rekey_time(连接级) | 4h | IKE_SA 重协商周期 | 实测日志 scheduling rekeying in 13499s(= 4h 减去随机扰动 10% 窗口) |
reauth_time | 0s | IKE 重认证周期 | 0 表示不重认证(只 rekey) |
over_time / rand_time | 10% of rekey_time / = over_time | 硬超时与随机抖动窗 | 与上面对应:maximum IKE_SA lifetime 14939s |
unique | no | 连接唯一性策略(never/no/keep/replace) | 多线接入同一身份重复登录时用 replace |
keyingtries | 1 | 初始建链重试次数 | 建链失败即放弃(远端暂不可达的站点到站点建议配合 start_action = trap) |
fragmentation | yes | IKE 消息分片 | 实测建链时 1416 字节的 IKE_AUTH 被拆成 EF(1/2)、EF(2/2) 两个分片发出,说明分片在 net 大包场景自动生效 |
3.4 证书交互
| 参数 | 默认值 | 作用 | 实测要点 |
|---|---|---|---|
send_cert | ifasked | 发送本端证书的策略(always/never/ifasked) | 证书认证的站点到站点建议显式 always,实测双方交换证书成功 |
send_certreq | yes | 是否发送证书请求 | 默认保留;对端多 CA 时用于收敛选择 |
childless | allow | Childless IKE_SA(RFC 6023) | allow 表示支持但默认不强制 |
3.5 建链全过程实测(参数联动证据)
swanctl --initiate --child net-30-40 的完整回显(节选关键路径,逐行与实测日志核对):
[IKE] initiating IKE_SA net-30-40[1] to 10.89.57.12
[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]
[NET] sending packet: from 10.89.57.11[500] to 10.89.57.12[500] (464 bytes)
...
[CFG] selected proposal: IKE:AES_CBC_256/HMAC_SHA2_384_192/PRF_HMAC_SHA2_384/MODP_2048
[IKE] received cert request for "C=CN, O=quzuo Lab, CN=quzuo Lab Root CA"
[IKE] authentication of 'moon.quzuo.lab' (myself) with RSA_EMSA_PKCS1_SHA2_256 successful
[IKE] sending end entity cert "C=CN, O=quzuo Lab, CN=moon.quzuo.lab"
[IKE] establishing CHILD_SA net-30-40{1}
[ENC] splitting IKE message (1416 bytes) into 2 fragments
...
[IKE] IKE_SA net-30-40[1] established between 10.89.57.11[moon.quzuo.lab]...10.89.57.12[sun.quzuo.lab]
[IKE] scheduling rekeying in 13499s
[IKE] maximum IKE_SA lifetime 14939s
[CFG] selected proposal: ESP:AES_GCM_16_256/NO_EXT_SEQ
[IKE] CHILD_SA net-30-40{1} established with SPIs cc4a9223_i c2b63dc2_o and TS 192.168.30.0/24 === 192.168.40.0/24
[IKE] peer supports MOBIKE
initiate completed successfully
💡 技术拓展:IKE_SA 与 CHILD_SA 是两层对象
对象 内容 生命周期参数 IKE_SA(父) 认证通道与密钥材料(UDP 500/4500) rekey_time(4h)/reauth_time(0)/over_timeCHILD_SA(子) 一对 ESP SPI 与流量选择器( TS 192.168.30.0/24 === 192.168.40.0/24)rekey_time(1h)/life_time/rekey_bytes/rekey_packets一个 IKE_SA 可以承载多个 CHILD_SA(同一对网关的多个网段组合不必重复认证);父 SA rekey 不影响流量,子 SA rekey 才是"隧道换钥匙"。实测日志中 IKE 侧
13499s与 CHILD 侧3481s(1h 抖动后)就是两套周期的体现。
四、children 子 SA 与流量选择器
| 参数 | 默认值(模板) | 作用 | 实测要点 |
|---|---|---|---|
local_ts / remote_ts | dynamic | 流量选择器,决定"什么流量进隧道" | 站点到站点写网段(192.168.30.0/24),远程访问本端写 dynamic;多网段逗号分隔 |
mode | tunnel | 隧道模式;transport 为主机到主机加密 | 实测隧道 INSTALLED, TUNNEL |
start_action | none | 加载后动作:none/start(立即建链)/trap(装陷阱策略等流量触发)/`trap | start` |
dpd_action | clear | 死端动作:clear/trap/restart | 实测教训见第九节 FAQ-3:restart 会在对端 terminate 后自动重建隧道 |
close_action | none | 本端关闭子 SA 后的动作 | 通常保持 none |
rekey_time | 1h | 子 SA 重协商周期 | 配合 life_time = rekey_time + 10%(模板默认) |
rekey_bytes / rekey_packets | 0 / 0 | 按流量触发 rekey | 高吞吐链路可设阈值,按量换钥 |
updown | (空) | 建链/拆链时执行的外部脚本(防火墙联动) | 传统 _updown iptables 入口在 /usr/lib/ipsec/_updown |
inactivity | 0s | 空闲多久自动拆除 | 按需,0 表示不因空闲拆除 |
tfc_padding | 0 | 流量填充抗流量分析 | 0 关闭 |
hw_offload | no | 硬件卸载 | 有网卡 ESP 卸载能力时开启 |
流量选择器的内核落点用 ip xfrm policy 直接验证(swanctl --install --child net-30-40 返回 install completed successfully 后):
src 192.168.30.0/24 dst 192.168.40.0/24
dir out priority 375423
tmpl src 10.89.57.11 dst 10.89.57.12
proto esp spi 0xceedd596 reqid 1 mode tunnel
src 192.168.40.0/24 dst 192.168.30.0/24
dir fwd priority 375423
tmpl src 10.89.57.12 dst 10.89.57.11
proto esp reqid 1 mode tunnel
src 192.168.40.0/24 dst 192.168.30.0/24
dir in priority 375423
tmpl src 10.89.57.12 dst 10.89.57.11
proto esp reqid 1 mode tunnel
(out/fwd/in 三条方向各就各位,再往后是系统自带的 socket 策略占位,与隧道无关。)
💡 技术拓展:流量选择器的三种典型写法
写法 值示例 触发场景 全流量 local_ts = 0.0.0.0/0, ::/0远程访问客户端把全部流量拉进隧道 指定网段 192.168.30.0/24站点到站点,语义最清晰 动态 dynamic本端地址运行时确定(客户端拨入) 两侧选择器必须对称一致(本端 local_ts = 对端 remote_ts),否则 IKE_AUTH 的 TSi/TSr 校验不通过,表现为
NO_PROPOSAL_CHOSEN或 TS 不匹配断链。
五、认证与凭据
5.1 证书认证线(pubkey)
证书落位(实测目录,文件名任意、内容为准):
/etc/swanctl/x509ca/ca-cert.pem # CA 证书(信任锚)
/etc/swanctl/x509/moon-cert.pem # 本端实体证书
/etc/swanctl/private/moon-key.pem # 本端私钥
认证轮参数(实测主线):
| 参数 | 值 | 说明 |
|---|---|---|
local.auth / remote.auth | pubkey | 证书认证;远程访问服务端常见 eap-mschapv2 等 |
local.id / remote.id | moon.quzuo.lab / sun.quzuo.lab | 身份,必须与证书的 SAN/DN 可匹配(本系列证书以 SAN 写入) |
local.certs | moon-cert.pem | 使用哪个实体证书(文件在 /etc/swanctl/x509/) |
local.round | 0 | 多认证轮次排序(IKEv2 RFC 4739),单轮不用写 |
swanctl --load-all 实测回显(moon 侧):
loaded certificate from '/etc/swanctl/x509/moon-cert.pem'
loaded certificate from '/etc/swanctl/x509ca/ca-cert.pem'
loaded RSA key from '/etc/swanctl/private/moon-key.pem'
no authorities found, 0 unloaded
no pools found, 0 unloaded
loaded connection 'net-30-40'
successfully loaded 1 connections, 0 unloaded
对端证书链校验过程在建链日志中完整可见(实测节选):
[IKE] received end entity cert "C=CN, O=quzuo Lab, CN=sun.quzuo.lab"
[CFG] using certificate "C=CN, O=quzuo Lab, CN=sun.quzuo.lab"
[CFG] using trusted ca certificate "C=CN, O=quzuo Lab, CN=quzuo Lab Root CA"
[CFG] reached self-signed root ca with a path length of 0
[CFG] checking certificate status of "C=CN, O=quzuo Lab, CN=sun.quzuo.lab"
[CFG] certificate status is not available
[IKE] authentication of 'sun.quzuo.lab' with RSA_EMSA_PKCS1_SHA2_256 successful
5.2 PSK 认证线(secrets)
secrets 段定义预共享密钥,用 id 把密钥与对端身份绑定(moon 侧实测配置;连接定义落在 conf.d/psk.conf,secrets 段落在 conf.d/site2site.conf 的追加段,sun 侧对称):
connections {
net-psk {
version = 2
local_addrs = 10.89.57.11
remote_addrs = 10.89.57.12
local {
auth = psk
id = moon.quzuo.lab
}
remote {
auth = psk
id = sun.quzuo.lab
}
children {
net-psk {
local_ts = 192.168.30.0/24
remote_ts = 192.168.40.0/24
start_action = none
}
}
}
}
secrets {
ike-quzuo {
id = sun.quzuo.lab
secret = q1w2e3r4
}
}
加载与建链实测(swanctl --load-creds + swanctl --initiate --child net-psk):
loaded ike secret 'ike-quzuo'
[IKE] peer supports MOBIKE
initiate completed successfully
密钥不匹配的失败形态(实测:把 moon 侧 secret 改错后发起):
[NET] received packet: from 10.89.57.12[4500] to 10.89.57.11[4500] (80 bytes)
[ENC] parsed IKE_AUTH response 1 [ N(AUTH_FAILED) ]
[IKE] received AUTHENTICATION_FAILED notify error
⚠️ PSK 排障三板斧:
swanctl --load-creds确认loaded ike secret有输出 → 核对两侧id与secrets.<n>.id完全一致 → 检查 secret 字符串无行尾空格/引号。AUTH_FAILED 只说明"认证失败",不区分密钥错还是身份错,必须两侧比对。💡 技术拓展:认证方式的取舍
方式 参数值 适用 注意 证书 pubkey站点到站点、设备级互信 身份必须能匹配证书 SAN/DN;吊销校验另配 CRL/OCSP 预共享密钥 psk少量对端、快速打通 密钥与身份绑定;不适合大规模 EAP 用户认证 eap-mschapv2等远程访问,配合 RADIUS 服务端 remote.auth通常先 pubkey 后 EAP 双轮生产站点到站点优先
pubkey:轮换凭据只换证书、支持吊销、可审计,PSK 轮换需要两侧同步改密。
六、地址池(pools)与虚拟 IP
pools 段为远程访问客户端分配虚拟 IP,并可挂属性(如 DNS)。实测(moon 侧,客户端暂未接入,池已注册):
pools {
rw-pool {
addrs = 10.3.0.0/24
dns = 10.89.57.11
}
}
$ swanctl --load-all
loaded ike secret 'ike-quzuo'
loaded pool 'rw-pool'
successfully loaded 1 pools, 0 unloaded
$ swanctl --list-pools
rw-pool 10.3.0.0 0 / 0 / 254
--list-pools 输出三段数字为 在线 / 正使用 / 容量。connections.<conn>.pools = rw-pool 引用后,客户端虚拟 IP 从池分配并自动生成对应的主机路由与策略。
七、strongswan.conf 守护进程参数
7.1 结构与内置默认
/etc/strongswan.conf 出厂内容(实测全文):
# strongswan.conf - strongSwan configuration file
charon {
load_modular = yes
plugins {
include strongswan.d/charon/*.conf
}
}
include strongswan.d/*.conf
要点:load_modular = yes + plugins.include 片段目录机制——每个插件的开关在 /etc/strongswan.d/charon/<插件>.conf,一行 load = yes/no 即可启停插件,不要在主文件堆插件名。swanctl --stats 实测当前加载插件清单(含 stroke vici、kernel-netlink、eap-mschapv2 等)。
线程池默认 16(swanctl --stats 实测 worker threads: 16 total, 11 idle, working: 4/0/1/0),一般无需调整。
7.2 filelog 日志实测
给 charon 配置文件日志(追加到 /etc/strongswan.conf 的 charon 段内):
charon {
load_modular = yes
plugins {
include strongswan.d/charon/*.conf
}
filelog {
charon-file {
path = /var/log/strongswan-charon.log
time_format = %T
default = 1
}
}
}
重启后验证(实测):
$ ipsec restart
Starting strongSwan 5.9.5 IPsec [starter]...
$ swanctl --initiate --child net-30-40
initiate completed successfully
$ ls -la /var/log/strongswan-charon.log
-rw-r--r-- 1 root root 4096 Oct 20 11:36 /var/log/strongswan-charon.log
$ tail -2 /var/log/strongswan-charon.log
11:36:50 15[IKE] authentication of 'sun.quzuo.lab' with RSA_EMSA_PKCS1_SHA2_256 successful
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]
关键规则(实测踩坑,详见 FAQ-1):filelog 的段名不允许 /、-、. 等字符,文件路径必须写进 path 选项;default = 1 为全局日志级别,调试时临时调到 2(IKE 细节)并记得改回。
7.3 其他常用键
| 键 | 说明 | 实测备注 |
|---|---|---|
charon.dns1 / charon.dns2 | 解析器供 %any 身份解析等场景使用 | 按需 |
charon.make_before_break | IKE 重认证时先建新 SA 再拆旧 | 移动/双活场景建议 yes |
charon.install_routes | 是否自动安装子 SA 路由 | 路由式 VPN 与自定义路由联动时注意 |
charon.retransmit_timeout / _jitter / _base | IKE 重传参数 | 跨公网高时延链路调大 |
swanctl.socket | swanctl 客户端连接的 VICI URI | 默认 unix:///var/run/charon.vici,与 vici 插件的 socket 对应 |
swanctl.load_warning | 加载时对未识别键的告警 | 排查配置笔误时打开 |
改完 strongswan.conf 后:支持热更的键用 swanctl --reload-settings;日志等结构性改动直接 systemctl restart strongswan-starter(或 ipsec restart)。
八、内核证据面(ip xfrm)
strongSwan 把协商结果写进内核 XFRM,ip xfrm state 是最硬核的验证面(实测建链后 moon 侧,AES-GCM 为 AEAD 算法,故只有一条 aead 密钥行):
src 10.89.57.11 dst 10.89.57.12
proto esp spi 0xc2b63dc2 reqid 1 mode tunnel
replay-window 0 flag af-unspec
aead rfc4106(gcm(aes)) 0x1f710a2d9c0e5d1807a88f199943b9ae35f009996ea3cdce5c87faf68814b7ebe097552e 128
anti-replay context: seq 0x0, oseq 0x0, bitmap 0x00000000
src 10.89.57.12 dst 10.89.57.11
proto esp spi 0xcc4a9223 reqid 1 mode tunnel
replay-window 32 flag af-unspec
aead rfc4106(gcm(aes)) 0xa7f22c841f3318086f7e10dcb74a039db24b861ebad9b560cb39a741c090d1a5bafcf091 128
anti-replay context: seq 0x0, oseq 0x0, bitmap 0x00000000
(密钥为一次性实验 CA 环境生成的会话密钥,隧道拆除即失效,此处完整保留回显以呈现真实格式。)
要点:reqid 1 与 swanctl --list-sas 中 reqid 1 对应(children 的内核关联号);两条方向相反的 SPI(cc4a9223_i 进向、c2b63dc2_o 出向)与 swanctl 视图完全一致。内核有 SA、隧道不通,去查路由/防火墙;内核没 SA,去查 IKE 日志——这是 IPsec 排障的分水岭。
陷阱策略(trap)实测:swanctl --install --child net-30-40 后 ip xfrm policy 出现 dir out 策略与 proto esp reqid 1 mode tunnel 模板(回显见第四节),swanctl --uninstall --child net-30-40 撤除。start_action = trap 的意义就是把这一步自动化:有流量命中策略才发起协商,适合"平时静默、用时秒起"的分支场景。
九、参数速查表
连接级(connections.<conn>)高频默认值(摘自 5.9.5 包内模板):
| 参数 | 默认值 | 本篇实测取值 |
|---|---|---|
| version | 0(6.1.0 起:2) | 2 |
| local_addrs / remote_addrs | %any / %any | 10.89.57.11 / 10.89.57.12 |
| proposals | default | aes256-sha384-modp2048 |
| send_cert | ifasked | always |
| dpd_delay | 0s | 30s |
| rekey_time | 4h | 4h(默认) |
| unique | no | no |
| fragmentation | yes | yes |
子 SA 级(children.<child>):
| 参数 | 默认值 | 本篇实测取值 |
|---|---|---|
| local_ts / remote_ts | dynamic | 192.168.30.0/24 / 192.168.40.0/24 |
| esp_proposals | default | aes256gcm16-prfsha384-modp2048 |
| start_action | none | none(trap 用法见第八节) |
| dpd_action | clear | restart |
| rekey_time | 1h | 60m |
| mode | tunnel | tunnel |
| updown | (空) | (空) |
十、常见问题(FAQ)
Q1:filelog 段名写成文件路径,ipsec restart 报 unexpected ... at /etc/strongswan.conf:LINE ... abort initialization due to invalid configuration?
实测原因:段名字符集不含 /、-、.。路径改用 path 选项(第七节 7.2 正确写法),段名用纯字母数字(如 charon-file)。
Q2:连接加载报 key 'xxx' is not a valid config key 类告警?
逐字核对 swanctl.conf 键名(官方模板为准);swanctl.load_warning = yes 可让未识别键显式告警,避免静默忽略导致"配置了但没生效"。
Q3:明明 swanctl --terminate --child xxx 拆了隧道,几秒后又自动重建?
实测原因:对端(或本端)dpd_action = restart 在检测到隧道消失后按策略自动重建。这是配置行为不是故障;要真正下线,两侧都改配置再 --load-conns,或临时把 dpd_action 改 clear。
Q4:PSK 认证失败,日志 received AUTHENTICATION_FAILED notify error?
实测排查顺序:swanctl --load-creds 看是否 loaded ike secret → 两侧 local.id/remote.id 与 secrets.<n>.id 逐字比对 → secret 值两侧一致(注意引号与空格)。实测复现案例见第五节 5.2。
Q5:证书认证失败,怎么从日志定位?
按日志链条走:received end entity cert → using trusted ca certificate → reached self-signed root ca → authentication of '...' successful。哪一步断,问题在哪一层(没收到证书 → send_cert;CA 不信 → x509ca 落位;身份不匹配 → id 与 SAN)。
Q6:version 到底写不写?
5.9.5 默认 0(IKEv2 优先、允许回退 IKEv1),显式写 version = 2 可杜绝回退并让排障语义确定;6.1.0 起默认已是 2 且 IKEv1 默认禁用,新连接一律显式 version = 2。
Q7:改了 swanctl.conf 不生效?
swanctl --load-all(或 --load-conns)只是"重新读取配置进守护进程",从未建立过的连接立即生效;已建立的 CHILD_SA 不受影响(按 dpd_action/rekey_time 走),需要立即应用就 --terminate 后再 --initiate。
十一、参考链接
- swanctl.conf 官方手册:https://docs.strongswan.org/docs/latest/config/swanctl/swanctlConf.html(查询日期 2026-10-20)
- strongswan.conf 官方手册:https://docs.strongswan.org/docs/latest/config/strongswanConf.html
- 本机权威默认值:
/etc/swanctl/swanctl.conf注释模板、/etc/strongswan.d/charon/片段(5.9.5-2ubuntu2.8 包内文件) - 站内系列:《strongSwan 6.1.0 介绍与选型指南》《Ubuntu 22.04 安装 strongSwan 指南》《strongSwan 5.9.5 常用 CLI 命令详解》