Mastering IPSec: Deep Dive into Protocols, NAT‑Traversal, and StrongSwan Configuration

This comprehensive guide explains the IPSec security suite—including AH, ESP, and SA protocols—covers encapsulation modes, NAT‑Traversal, MTU fragmentation issues, VPN deployment scenarios, Virtual Tunnel Interfaces, and provides step‑by‑step StrongSwan configuration and testing procedures.

AI Cyberspace
AI Cyberspace
AI Cyberspace
Mastering IPSec: Deep Dive into Protocols, NAT‑Traversal, and StrongSwan Configuration

前文列表

《未来互联网技术发展编年史,从阿帕网到完全可编程网络》

《以太网技术发展编年史》

目录

IPSec安全隧道协议族

封装协议

Authentication Header 协议

Encapsulating Security Payload 协议

封装模式

Transport(传输模式)

Tunnel(隧道模式)

安全偶联协商

Security Association 协议

Internet Key Exchange 协议

IPSec NAT‑Tranversal

IPSec的MTU分片和加密问题

IPSec Virtual Private Network

Strongswan的应用实践

IPSec安全隧道协议族

IPSec(Internet Protocol Security)是基于IP网络的安全隧道协议族,包含认证、加密和隧道封装协议,主要有:

Authentication Header(AH)

Encapsulating Security Payload(ESP)

Security Association(SA)

Internet Key Exchange(IKE)

这些协议共同构建了IPSec的安全框架:

加密算法 :对称加密(AES、DES、3DES 等)和非对称加密(RSA、DH 等)。

验证算法 :MD5、SHA‑1、SHA‑2 等。

封装协议 :AH 与 ESP 两种封装协议,各自具有不同的安全特性。

封装协议

AH 和 ESP 可以单独使用或组合使用:

AH 确保数据完整性和源身份认证,但不加密数据。

ESP 提供数据加密和可选的身份认证。

AH‑ESP 组合提供最完整的安全保障,但开销最高。

具体选择取决于安全需求和网络环境。

Authentication Header 协议

AH 通常与 Transport 模式一起使用,仅提供身份认证,不加密数据。其封装格式包括 Next Header、Payload Length、Reserved、SPI、Sequence Number、Authentication Data 等字段。

Encapsulating Security Payload 协议

ESP 可在 Transport 或 Tunnel 模式下使用,提供身份认证和加密。其封装格式包括 SPI、Sequence Number、Payload Data、Padding、Pad Length、Authentication Data 等。

封装模式

IPSec 支持 Transport(仅加密 Payload)和 Tunnel(加密整个原始 IP 包)两种模式,适用于不同的安全需求。

安全偶联协商

Security Association 协议

SA 通过 3‑tuple(SPI、目的 IP、协议号)唯一标识,用于协商加密算法、密钥等。

Internet Key Exchange 协议

IKE 基于 ISAKMP,负责安全密钥交换和 SA 自动建立,支持 IKEv1、IKEv2、主模式和野蛮模式。

第一阶段:建立 ISAKMP SA(协商加密算法、DH、随机数)。

第二阶段:使用 ISAKMP SA 为 IPSec 协商安全服务。

IKE 支持基于时间或流量的 SA 生命周期,并可在 SA 失效前自动重新协商。

IPSec NAT‑Tranversal

IPSec 与 NAT 存在冲突,解决方案是使用 ESP‑UDP‑Encapsulate(UDP‑Encapsulated‑Transport 或 UDP‑Encapsulated‑Tunnel),在 ESP Header 前加上 UDP Header(端口 4500),兼容 NAT 和 PAT。

IPSec的MTU分片和加密问题

AH/ESP 增加额外头部,可能导致 IPSec 报文超过 L2 MTU,引发分片,增加延迟和丢包风险。常用解决办法:

调整 IPSec 设备的 IP MTU,确保封装后不超过 L2 MTU。

启用 PMTUD(Path MTU Discovery)并在设备上配置相应策略。

IPSec Virtual Private Network

IPSec VPN 主要有三种场景:

Site‑to‑Site:两个 IPSec VPN 网关之间的互联。

End‑to‑End:两个 IPSec 客户端之间的互联。

End‑to‑Site:客户端与网关之间的互联,常使用 L2TP over IPSec。

IPSec Virtual Tunnel Interface

VTI 是一种虚拟网络接口,支持 Tunnel 和 Transport 两种模式,简化 IPSec 配置并降低开销。

在 Tunnel 模式下,原始 IP 包被封装在新的 IP 包中。

在 Transport 模式下,仅加密 Payload,不修改 IP Header。

IPSec VTI 的工作原理

发包流程:入接口接收明文 → 路由 → VTI 加封装 → 发送加密报文 → 出接口转发。

收包流程:入接口接收密文 → VTI 解封装 → 路由转发明文。

Linux iptables 与 VTI 的结合

VTI 在 Linux 中可通过 iptables 为流量打标签,实现基于标签的 IPSec 转发。

GRE over IPSec VPN

GRE 用于封装组播流量,随后由 IPSec 加密,实现组播业务的安全传输。

L2TP over IPSec VPN

L2TP 在 IPSec 隧道中传输 PPP 帧,补足 IPSec 只能加密第 3 层的限制。

Strongswan 的应用实践

StrongSwan 是 IPSec 的开源实现,支持 AH、ESP、VTI、IKEv2 等。

net2net‑psk 网络拓扑

基础配置

# 使用 EPEL 源安装 strongSwan
yum -y install epel-release
yum install strongswan -y
systemctl list-unit-files | grep swan
# 开启路由转发
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
sysctl -p
# 修改 hosts
192.168.0.75 moon.strongswan.org
192.168.0.137 sun.strongswan.org
# 关闭 SELinux
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
# 启动 StrongSwan
systemctl start strongswan && systemctl enable strongswan && systemctl status strongswan

moon Site 配置

# /etc/ipsec.conf
config setup
conn %default
  ikelifetime=60m
  keylife=20m
  rekeymargin=3m
  keyingtries=1
  authby=secret
  keyexchange=ikev2
  mobike=no
conn net-net
  leftfirewall=yes
  [email protected]
  leftauth=psk
  left=192.168.0.10
  leftsubnet=10.1.0.0/24
  [email protected]
  rightauth=psk
  right=192.168.0.20
  rightsubnet=10.2.0.0/24
  auto=add
# /etc/ipsec.secrets
@moon.strongswan.org @sun.strongswan.org : PSK 0sv+NkxY9LLZvwj4qCC2o/gGrWDF2d21jL

sun Site 配置

# /etc/ipsec.conf (similar to moon, with left/right swapped)
# /etc/ipsec.secrets
@moon.strongswan.org @sun.strongswan.org : PSK 0sv+NkxY9LLZvwj4qCC2o/gGrWDF2d21jL

测试

# 在 moon 上启动并建立连接
strongswan up net-net
# 检查状态
strongswan status

Ping 测试表明两端客户端可以相互通信,说明 IPSec 配置成功。

运维

重启 StrongSwan: systemctl restart strongswan 查看 SA 状态: strongswan status 查看日志:

tail -f /var/log/strangswan.log

常用配置说明

# ipsec.conf 示例片段
config setup
  cachecrls = yes
  strictcrlpolicy = yes
  uniqueids = no

ca %default
  crluri = <uri>

conn %default
  compress = yes
  dpdaction = hold
  dpddelay = 30s
  dpdtimeout = 60s
  inactivity = 300s
  esp = aes256-sha256,aes256-sha1,3des-sha1!
  ike = aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
  keyexchange = ike
  left = %any
  right = %any
  leftdns = 8.8.8.8,8.8.4.4
  rightdns = 8.8.8.8,8.8.4.4
  leftikeport = 500
  leftsourceip = %config
  rightsourceip = 10.0.0.0/24
  leftsubnet = 0.0.0.0/0

conn IKEv2-BASE
  leftca = "C=CN, O=123si, CN=123si StrongSwan CA"
  leftcert = server.cert.pem
  leftsigkey = server.pub.pem
  leftsendcert = always
  rightsendcert = never
  leftauth = pubkey
  rightauth = eap-mschapv2
  leftid = vpn.itnmg.net
  rightid = %any

conn IKEv2-EAP
  also = IKEv2-BASE
  eap_identity = %any
  rekey = no
  fragmentation = yes
  auto = add
network securityVPNnat traversalIPSecStrongSwanVirtual Tunnel Interface
AI Cyberspace
Written by

AI Cyberspace

AI, big data, cloud computing, and networking.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.