下面我将从最常用和最主流的角度,为您详细介绍 Linux 系统下使用 strongSwan 的配置命令,因为 strongSwan 是目前功能最强大、应用最广泛的 IPsec 实现之一,也是许多云平台(如 AWS, Google Cloud)推荐的方案,我也会简要介绍其他实现方式的关键命令。

核心概念:IPsec 是什么?
在配置之前,理解 IPsec 的工作模式至关重要,IPsec 主要由两部分组成:
-
IKE (Internet Key Exchange / Internet 密钥交换):负责在两个对等体之间安全地协商和建立安全联盟,它分为两个阶段:
- IKEv1 Phase 1: 建立一个安全的、经过身份验证的通道,用于保护后续的通信。
- IKEv1 Phase 2 (或 IKEv2 Child SA):使用已建立的通道来协商保护具体数据流量的密钥和参数(即 ESP/AH 协商)。
- IKEv2: 将上述两个阶段合并,简化了流程,是现代推荐的方式。
-
ESP (Encapsulating Security Payload / 封装安全载荷):负责对实际的数据包进行加密和完整性校验。
IKE 负责“谈判”和“建立安全通道”,ESP 负责在通道里“加密数据包”。

Linux 系统使用 strongSwan
strongSwan 使用配置文件 /etc/ipsec.conf 和 /etc/ipsec.secrets,并通过 ipsec 命令行工具进行管理。
安装 strongSwan
# 对于 Debian/Ubuntu sudo apt update sudo apt install strongswan strongswan-pki # 对于 CentOS/RHEL/Fedora sudo yum install strongswan # 或者使用 dnf sudo dnf install strongswan
核心配置文件
A. /etc/ipsec.conf (主配置文件)
这个文件定义了连接、策略等。
# 基本配置
config setup
# charon 是 strongSwan 的守护进程
charondebug="ike 2, knl 2, cfg 2"
# 在接口启动时自动加载 IPsec 策略
uniqueids=no
# 定义一个名为 "my-site-to-site" 的连接
conn my-site-to-site
# 自动建立连接,当有流量匹配时
auto=start
# 两端标识,可以是 IP 地址或 FQDN
left=192.168.1.100 # 本地(网关)公网 IP
leftid=vpn.mydomain.com # 本地标识
leftsubnet=10.0.0.0/24 # 本地需要保护的子网
right=203.0.113.10 # 远端(网关)公网 IP
rightid=vpn.remote.com # 远端标识
rightsubnet=192.168.2.0/24 # 远端需要保护的子网
# 加密算法
ike=aes256-sha256-modp2048!
esp=aes256-sha256-modp2048!
# 身份验证方式,预共享密钥
authby=secret
# 使用 IKEv2 协议
keyexchange=ikev2
# 强制使用隧道模式,而不是传输模式
type=tunnel
B. /etc/ipsec.secrets (密钥文件)

这个文件存储预共享密钥或证书。权限必须设置为 600。
# 格式: <leftid> <rightid> : PSK "your_pre_shared_key" # 使用 * 可以匹配任何 ID vpn.mydomain.com vpn.remote.com : PSK "a_very_strong_and_long_password_here"
核心管理命令
A. 启动、停止、重启服务
# 启动 strongSwan 服务 sudo systemctl start strongswan # 停止 strongSwan 服务 sudo systemctl stop strongswan # 重启 strongSwan 服务 sudo systemctl restart strongswan # 设置开机自启 sudo systemctl enable strongswan # 查看服务状态 sudo systemctl status strongswan
B. 加载/重载配置
# 加载配置文件,但不建立连接 sudo ipsec reload # 强制重新加载所有配置,并尝试重新建立连接 sudo ipsec restart
C. 手动触发连接
# 手动建立名为 "my-site-to-site" 的连接 sudo ipsec up my-site-to-site # 手动断开连接 sudo ipsec down my-site-to-site
D. 查看连接和日志状态 (最重要的命令)
# 查看所有连接状态 sudo ipsec statusall # 查看特定连接的状态 sudo ipsec status my-site-to-site # 查看 IKE 和 ESP 的 SA (Security Association) 详细信息 sudo ipsec status # 查看 strongSwan 守护进程的实时日志 (非常有用!) # 按 Ctrl+C 退出 sudo journalctl -u strongswan -f
E. 调试和故障排查
# 启用详细调试模式 (level 2 是详细,5 是极其详细) sudo ipsec stroke stroke "loglevel 2" # 查看内核中的 IPsec 策略 (XFRM) sudo ip xfrm policy # 查看内核中的 IPsec 安全联盟 sudo ip xfrm state
使用 ip xfrm 命令 (Linux 内核原生)
这是 strongSwan 等工具在底层实际调用的接口,通常不直接用于生产环境,但对于理解 IPsec 原理和进行底层调试非常有用。
# 1. 添加安全联盟
# ESP 协议, 32位 SPI, 加密算法 AES-CBC-256, 密钥, 认证算法 SHA1-96, 密钥
sudo ip xfrm state add src 192.168.1.100 dst 203.0.113.10 proto esp spi 0x12345 mode tunnel \
auth sha1 0x0123456789abcdef0123456789abcdef01234567 \
enc aes 0x0123456789abcdef0123456789abcdef0123456789abcdef01234567
# 2. 添加策略
# 对 10.0.0.0/24 -> 192.168.2.0/24 的流量,使用上面的 SA
sudo ip xfrm policy add src 10.0.0.0/24 dst 192.168.2.0/24 dir out tmpl src 192.168.1.100 dst 203.0.113.10 proto esp
# 3. 查看状态和策略 (与 strongSwan 的命令相同)
sudo ip xfrm state
sudo ip xfrm policy
# 4. 删除策略和 SA
sudo ip xfrm policy del src 10.0.0.0/24 dst 192.168.2.0/24 dir out
sudo ip xfrm state del src 192.168.1.100 dst 203.0.113.10 proto esp spi 0x12345
思科设备
思科 IOS 的命令与 Linux 完全不同,是交互式的 CLI。
# 进入全局配置模式 configure terminal # 1. 定义 IKE 策略 (Phase 1) crypto isakmp policy 10 encr aes 256 hash sha authentication pre-share group 14 lifetime 86400 # 2. 定义预共享密钥 crypto isakmp key <your_pre_shared_key> address <remote_peer_ip> # 3. 定义 IPsec 转换集 (Phase 2) crypto ipsec transform-set my-set esp-aes 256 esp-sha-hmac mode tunnel # 4. 定义加密图 (将上述策略应用到特定流量) crypto map MY_MAP 10 ipsec-isakmp set peer <remote_peer_ip> set transform-set my-set match address 101 # ACL 号,定义需要加密的流量 # 5. 定义访问控制列表 access-list 101 permit ip <local_subnet> <wildcard_mask> <remote_subnet> <wildcard_mask> # 6. 将加密图应用到外部接口 interface GigabitEthernet0/1 crypto map MY_MAP # 保存配置 end write memory
Windows 系统
Windows 使用 PowerShell 进行管理。
# 1. 创建 IKEv2 主模式规则
New-NetIPsecMainModeRule -Name "MyRule" -LocalAddress Any -RemoteAddress <Remote_IP_or_Subnet> -Enabled True -AuthenticationMethod PreShared -MaxSecurityAssociationLifetime 3600 -Profile Any -MMProfile Any -PolicyStore ActiveStore
# 2. 创建快速模式规则 (用于 ESP)
New-NetIPsecQuickModeRule -Name "MyRule" -LocalAddress Any -RemoteAddress <Remote_IP_or_Subnet> -Enabled True -PrimaryProfile Any -SecondaryProfile Any -QuickModeProposalSet @{Encryption=GCMAES256; Integrity=GCMAES256; DHGroup=ECP384} -PolicyStore ActiveStore
# 3. 设置预共享密钥 (需要单独的步骤,通常通过 GUI 或组策略)
# 在 Windows 中,PSK 通常通过组策略或直接在连接属性中设置。
# 4. 查看现有规则
Get-NetIPsecMainModeRule
Get-NetIPsecQuickModeRule
总结与建议
| 特性 | strongSwan (Linux) |
ip xfrm (Linux) |
Cisco IOS | Windows |
|---|---|---|---|---|
| 适用场景 | 服务器、网关、云平台 | 调试、底层操作 | 硬件防火墙、路由器 | 客户端、服务器 |
| 配置方式 | /etc/ipsec.conf, /etc/ipsec.secrets + ipsec 命令 |
直接 ip xfrm 命令 |
交互式 CLI | PowerShell |
| 优点 | 灵活、强大、文档丰富、跨平台 | 接近内核、高效 | 成熟稳定、集成度高 | 原生支持、易于部署 |
| 关键命令 | ipsec up/down, ipsec statusall, journalctl -f |
ip xfrm state/policy add/del/list |
crypto isakmp, crypto ipsec, crypto map |
New-NetIPsec...Rule |
给初学者的建议:
- 从
strongSwan开始:它是学习 IPsec 的最佳起点,因为它清晰地分离了 IKE 和 ESP 的配置,并且有非常强大的日志系统。 - 理解
ipsec statusall的输出:这是你排查问题的“金钥匙”,学会看懂它,你就知道连接是否建立、SA 是否协商成功、流量是否匹配策略。 - 从简单到复杂:先搭建一个最简单的点对点 VPN,再扩展到站点到站点 VPN。
- 确保网络连通性:在配置 IPsec 之前,确保两端的公网 IP 可以互相
ping通,防火墙没有阻止 UDP 500/4500 (IKE) 和 ESP (协议号 50) 流量。
