6.14. IPsec 配置故障排除


诊断 IPsec 配置失败可能具有挑战性,因为问题可能是由不匹配的设置、防火墙规则和内核级错误造成的。以下信息提供了解决 IPsec VPN 连接常见问题的系统方法。

6.14.1. 基本连接问题

VPN 连接的问题通常是因为端点之间不匹配的配置而发生。

要确认已建立 IPsec 连接,请输入:

# ipsec trafficstatus
006 #8: "vpn.example.com"[1] 192.0.2.1, type=ESP, add_time=1595296930, inBytes=5999, outBytes=3231, id='@vpn.example.com', lease=198.51.100.1/32
Copy to Clipboard Toggle word wrap

对于成功连接,命令会显示带有连接名称和详情的条目。如果输出为空,则不会建立隧道。

6.14.3. 不匹配的配置

如果端点没有配置匹配的互联网密钥交换(IKE)版本、算法、IP 地址范围或预共享密钥(PSK),则 VPN 连接会失败。如果识别不匹配,您必须匹配两个端点上的设置来解决这个问题。

远程 Peer Not Running IKE/IPsec

如果连接被拒绝,则会显示 ICMP 错误:

# ipsec up vpn.example.com
...
000 "vpn.example.com"[1] 192.0.2.2 #16: ERROR: asynchronous network error report on wlp2s0 (192.0.2.2:500), complainant 198.51.100.1: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)]
Copy to Clipboard Toggle word wrap
不匹配的 IKE 算法

在初始设置过程中,连接会失败并显示 NO_PROPOSAL_CHOSEN 通知:

# ipsec up vpn.example.com
...
003 "vpn.example.com"[1] 193.110.157.148 #3: dropping unexpected IKE_SA_INIT message containing NO_PROPOSAL_CHOSEN notification; message payloads: N; missing payloads: SA,KE,Ni
Copy to Clipboard Toggle word wrap
Mismatched IPsec Algorithms

在初始交换后,连接会失败并显示 NO_PROPOSAL_CHOSEN 错误:

# ipsec up vpn.example.com
...
182 "vpn.example.com"[1] 193.110.157.148 #5: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_256 group=MODP2048}
002 "vpn.example.com"[1] 193.110.157.148 #6: IKE_AUTH response contained the error notification NO_PROPOSAL_CHOSEN
Copy to Clipboard Toggle word wrap
不匹配的 IP 地址范围(IKEv2)

远程对等点响应 TS_UNACCEPTABLE 错误:

# ipsec up vpn.example.com
...
1v2 "vpn.example.com" #1: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=MODP2048}
002 "vpn.example.com" #2: IKE_AUTH response contained the error notification TS_UNACCEPTABLE
Copy to Clipboard Toggle word wrap
不匹配的 IP 地址范围(IKEv1)

在快速模式下连接超时,并显示代表 peer 不接受提议的消息:

# ipsec up vpn.example.com
...
031 "vpn.example.com" #2: STATE_QUICK_I1: 60 second timeout exceeded after 0 retransmits.  No acceptable response to our first Quick Mode message: perhaps peer likes no proposal
Copy to Clipboard Toggle word wrap
Mismatched PSK (IKEv2)

peer 拒绝与 AUTHENTICATION_FAILED 错误的连接:

# ipsec up vpn.example.com
...
003 "vpn.example.com" #1: received Hash Payload does not match computed value
223 "vpn.example.com" #1: sending notification INVALID_HASH_INFORMATION to 192.0.2.23:500
Copy to Clipboard Toggle word wrap
Mismatched PSK (IKEv1)

哈希有效负载不匹配,使 IKE 消息不可读取,并导致 INVALID_HASH_INFORMATION 错误:

# ipsec up vpn.example.com
...
002 "vpn.example.com" #1: IKE SA authentication request rejected by peer: AUTHENTICATION_FAILED
Copy to Clipboard Toggle word wrap

6.14.4. MTU 问题

加密和封装过程会增加数据包的大小。如果数据包超过网络的最大传输单元(MTU),这通常是 1500 字节,则数据包会被碎片化。这可能会导致在丢失片段时导致连接失败,且无法重新编译原始数据包。一个常见的症状是,小数据包(例如 ping)可以正常工作,但大型数据包(如 SSH 会话)在登录后冻结。

要解决这个问题,请通过将 mtu=1400 选项添加到配置文件来降低隧道的 MTU。

6.14.5. NAT 冲突

如果 IPsec 主机也作为 NAT 路由器运行,则可能会错误地将 NAT 应用到用于 IPsec 隧道的数据包。例如,如果在应用 IPsec 加密前,如果数据包的源 IP 地址被伪装规则转换,则数据包的源不再与 IPsec 策略匹配,并且 Libreswan 通过网络发送未加密的。

要解决这个问题,请添加一条防火墙规则,该规则不包括 NAT 中 IPsec 子网之间的流量。应在 POSTROUTING 链的开头插入此规则,以确保它在常规 NAT 规则之前进行处理。

例 6.1. 使用 nftables 框架的解决方案

以下示例使用 nftables 设置一个基本 NAT 环境,该环境将 192.0.2.0/24 和 198.51.100.0/24 子网之间的流量从地址转换中排除:

# nft add table ip nat
# nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
# nft add rule ip nat postrouting ip saddr 192.0.2.0/24 ip daddr 198.51.100.0/24 return
Copy to Clipboard Toggle word wrap

6.14.6. 内核级 IPsec 问题

一个常见问题是 VPN 隧道被成功建立,但没有流量通过它。在这种情况下,您可以检查内核的 IPsec 状态,以检查隧道策略和加密密钥是否已正确安装。

这个过程涉及检查两个组件:

  • 安全策略数据库(SPD):指示内核要加密的流量的规则。
  • 安全关联数据库(SAD):指示内核如何加密该流量的密钥。

首先,检查 SPD 中是否存在正确的策略:

# ip xfrm policy
src 192.0.2.1/32 dst 10.0.0.0/8
	dir out priority 666 ptype main
	tmpl src 198.51.100.13 dst 203.0.113.22
		proto esp reqid 16417 mode tunnel
Copy to Clipboard Toggle word wrap

输出应包含与您的 leftsubnetrightsubnet 参数匹配的策略,以及 in 和 out 方向。如果没有为流量看到策略,Libreswan 无法创建内核规则,并且不会加密流量。

如果策略存在,检查它是否在 SAD 中有对应的键集合:

# ip xfrm state
src 203.0.113.22 dst 198.51.100.13
	proto esp spi 0xa78b3fdb reqid 16417 mode tunnel
	auth-trunc hmac(sha1) 0x3763cd3b... 96
	enc cbc(aes) 0xd9dba399...
Copy to Clipboard Toggle word wrap
警告

这个命令显示私钥。不要共享此输出,因为攻击者可以使用它来解密您的 VPN 流量。

如果策略存在,但没有具有相同 reqid 的对应状态,这通常意味着互联网密钥交换(IKE)协商失败。这两个 VPN 端点无法同意一组密钥。

如需更详细的诊断,请将 -s 选项与其中一个命令一起使用。这个选项添加流量计数器,这有助于识别内核是否按特定规则处理数据包。

6.14.7. 内核 IPsec 子系统错误

在个别情况下,内核的 IPsec 子系统中的漏洞可能会导致它丢失与互联网密钥交换(IKE)用户空间守护进程的同步。这种不同步可能会导致在协商的安全关联和内核中 IPsec 策略的实际强制间出现差异,从而可能会破坏安全网络通信。要检查内核级别的错误,显示转换(XFRM)统计信息:

# cat /proc/net/xfrm_stat
Copy to Clipboard Toggle word wrap

如果输出中的任何计数器(如 XfrmInError )显示非零值,这表示内核子系统存在问题。在这种情况下,创建一个支持问题单,并将命令的输出与对应的 IKE 日志附加。

6.14.8. 显示 Libreswan 日志

Libreswan 将事件记录到日志中。要显示 ipsec 服务的日志,请输入:

# journalctl -xeu ipsec
Copy to Clipboard Toggle word wrap

如果默认日志记录级别没有提供足够详情,请通过在 /etc/ipsec.conf 文件中的 config setup 部分中添加以下设置来启用全面的调试日志:

plutodebug=all
logfile=/var/log/pluto.log
Copy to Clipboard Toggle word wrap

由于调试日志记录可以生成许多条目,因此将消息重定向到专用日志文件可防止 journaldsystemd 服务对消息进行速率限制。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat