CentOS 7.4 部署 IPSec VPN:构建安全通信通道的实用指南
在分布式办公和混合云架构日益普及的今天,确保不同网络节点间通信的机密性与完整性至关重要,CentOS 7.4 作为广泛应用的稳定服务器操作系统,其内置的 StrongSwan 套件为部署 IPSec VPN 提供了强大且可靠的支持,本文将引导您一步步完成 CentOS 7.4 上 IPSec VPN 的配置过程,建立安全的网络隧道。
IPSec 核心价值与协议基础

IPSec(Internet Protocol Security)并非单一协议,而是一个协议套件,工作在网络层(OSI 第三层),它通过两大核心机制保障 IP 数据包的安全:
- 认证头(AH):提供数据源认证和完整性校验,确保数据包未被篡改,但不加密内容。
- 封装安全载荷(ESP):提供数据源认证、完整性校验以及数据加密,是保障机密性的首选,现代 IPSec VPN 实现通常优先或仅使用 ESP。
IPSec 的运行依赖两个主要协议:
- IKE(Internet Key Exchange):负责在通信双方之间协商安全参数(如加密算法、散列算法)、进行身份验证(如预共享密钥、数字证书),并最终生成用于加密实际数据传输的会话密钥,IKE 通常运行在 UDP 500 端口。
- IPSec 本身(AH/ESP):使用 IKE 协商好的密钥和参数,对实际的 IP 数据包进行认证和/或加密处理,ESP 协议通常使用 IP 协议号 50。
CentOS 7.4 部署 StrongSwan
环境准备与软件安装
- 确保系统是最新状态:
sudo yum update -y - 安装 EPEL 仓库(提供额外软件包):
sudo yum install epel-release -y - 安装 StrongSwan 及相关组件:
sudo yum install strongswan -y
- 确保系统是最新状态:
核心配置文件:
/etc/strongswan/ipsec.conf此文件定义全局设置、连接(Connection)配置,一个典型站点到站点(Site-to-Site)配置如下:# /etc/strongswan/ipsec.conf - 核心配置文件 config setup charondebug="ike 2, knl 2, cfg 2, net 2, enc 2" # 调试级别,生产环境可调整或降低 uniqueids=no # 处理某些 NAT 场景可能需要关闭 conn %default keyexchange=ikev2 # 推荐使用更安全现代的 IKEv2 ike=aes256-sha256-modp2048! # IKE 阶段 1 加密/完整性/DH 组 esp=aes256-sha256! # ESP 阶段 2 加密/完整性算法 aggressive=no # 禁用不安全的主动模式 rekey=yes # 启用密钥重协商 dpdaction=restart # 死亡对等体检测失败后重启连接 closeaction=restart # 连接关闭后自动重启 conn my-vpn-tunnel # 自定义连接名称 left=203.0.113.10 # 本机公网 IP 地址 leftsubnet=192.168.1.0/24 # 本机需要保护的子网 leftid=@vpn-gateway-1.example.com # 本机标识(FQDN 或 IP) leftfirewall=yes # 告知 StrongSwan 自动管理本机防火墙规则 right=198.51.100.20 # 对端公网 IP 地址 rightsubnet=10.10.0.0/16 # 对端需要保护的子网 rightid=@vpn-gateway-2.example.com # 对端标识(必须与对端配置匹配!) auto=start # 启动时自动尝试建立连接 authby=secret # 使用预共享密钥认证 (PSK)- 关键参数说明:
left/right: 本端和对端的公网 IP。leftsubnet/rightsubnet: 需要 IPSec 隧道保护的本端和对端子网。leftid/rightid: 用于 IKE 身份认证的标识符,通常使用 FQDN 或 IP 地址,两端必须匹配且与密钥配置一致。ike/esp: 指定加密、完整性算法和 DH 组,示例中使用的是现代强算法(AES256, SHA256, MODP2048)。务必禁用已知弱算法(如 3DES, MD5, MODP1024)。authby=secret: 指定使用预共享密钥认证(PSK),更安全的替代方案是证书认证(authby=pubkey)。
- 关键参数说明:
预共享密钥配置:
/etc/strongswan/ipsec.secrets此文件存储认证密钥,权限必须严格限制 (chmod 600)。
# /etc/strongswan/ipsec.secrets # 格式:<本端标识符> <对端标识符> : PSK "<预共享密钥>" vpn-gateway-1.example.com vpn-gateway-2.example.com : PSK "Your$tr0ngP@ssw0rd!ComplexEnough"- 安全警告:PSK 应足够长(>20字符)、随机且复杂,在可能的情况下,强烈推荐使用基于证书的认证,安全性更高,可管理性更好。
配置系统内核与防火墙
- 启用内核转发:编辑
/etc/sysctl.conf,确保包含:net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0应用:
sudo sysctl -p - 配置防火墙 (firewalld):
sudo firewall-cmd --permanent --add-service="ipsec" # 允许 IKE (UDP 500) 和 NAT-T (UDP 4500) sudo firewall-cmd --permanent --add-rich-rule='rule protocol value="esp" accept' # 允许 ESP (IP 协议 50) sudo firewall-cmd --permanent --add-rich-rule='rule protocol value="ah" accept' # 允许 AH (IP 协议 51),如果使用 sudo firewall-cmd --permanent --add-masquerade # 启用 IP 伪装,用于本地子网访问外部或特定 NAT 场景 sudo firewall-cmd --reload注意:
leftfirewall=yes在ipsec.conf中会尝试自动添加规则,但显式配置防火墙更可靠。
- 启用内核转发:编辑
高级主题与安全强化
证书认证(优于 PSK)
- 建立私有 PKI 或使用公共 CA 为 VPN 网关签发证书。
- 在
ipsec.conf中将authby=secret改为authby=pubkey。 - 配置
leftcert和rightcert指向证书文件路径。 - 在
ipsec.secrets中加载私钥(: RSA /path/to/private.key),证书认证消除了共享密钥风险,支持更精细的访问控制。
NAT 穿越 (NAT-T) 当 VPN 网关位于 NAT 设备后时,需启用 NAT-T,StrongSwan 通常能自动处理,确保:

- 防火墙允许 UDP 4500 端口 (
--add-port=4500/udp)。 - 在
ipsec.conf的config setup部分或连接配置中添加forceencaps=yes(如果需要强制封装)。
- 防火墙允许 UDP 4500 端口 (
日志监控与排错
- 查看实时日志:
sudo tail -f /var/log/messages(或journalctl -f -u strongswan对于使用 systemd journal 的系统)。 - 查看连接状态:
sudo ipsec status或sudo ipsec statusall。 - 重启服务:
sudo systemctl restart strongswan。 - 详细诊断:临时增加
charondebug="all 3"在ipsec.conf的config setup部分,重启服务后查看日志。
- 查看实时日志:
安全加固建议
- 算法选择:始终使用强加密算法(如 AES-GCM, AES-CBC-256)、强完整性算法(如 SHA2-256, SHA2-384)和足够强度的 DH 组(如 modp2048, modp3072, ecp384),禁用 DES, 3DES, MD5, SHA1, MODP1024。
- 身份认证:优先使用基于证书的认证,如必须使用 PSK,确保其极其复杂且定期轮换。
- 最小化暴露:在防火墙上严格限制访问 VPN 端口的源 IP(如果可能)。
- 及时更新:定期运行
yum update更新 StrongSwan 和系统,修复已知漏洞。 - 禁用 IKEv1:如果仅需 IKEv2,在配置中明确使用
keyexchange=ikev2并避免兼容 IKEv1 的配置,减少潜在攻击面。
验证连接与流量测试
- 启动/重启 StrongSwan:
sudo systemctl start strongswan/sudo systemctl restart strongswan - 检查状态:
sudo ipsec status,成功连接应显示INSTALLED, TUNNEL状态。 - 从本端子网(
leftsubnet)内的主机尝试 Ping 对端子网(rightsubnet)内的主机。 - 使用
tcpdump在物理接口(如 eth0)抓包,应看到加密的 ESP 数据包,而非原始 ICMP 流量:sudo tcpdump -i eth0 -n esp。
在 CentOS 7.4 上成功部署 IPSec VPN 为您的网络基础设施增添了关键的安全层,StrongSwan 的灵活性支持从简单的站点间连接到复杂的远程接入场景,实际部署中,证书认证带来的安全提升远超过其初始配置成本,值得投入,保持配置的简洁清晰并持续关注安全更新,是确保 VPN 网关长期稳定运行的核心,网络工程师的严谨配置与持续维护,是抵御潜在威胁的真正防线。

