6.14. IPsec 配置故障排除
诊断 IPsec 配置失败可能具有挑战性,因为问题可能是由不匹配的设置、防火墙规则和内核级错误造成的。以下信息提供了解决 IPsec VPN 连接常见问题的系统方法。
6.14.1. 基本连接问题 复制链接链接已复制到粘贴板!
VPN 连接的问题通常是因为端点之间不匹配的配置而发生。
要确认已建立 IPsec 连接,请输入:
ipsec trafficstatus
# 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
对于成功连接,命令会显示带有连接名称和详情的条目。如果输出为空,则不会建立隧道。
6.14.3. 不匹配的配置 复制链接链接已复制到粘贴板!
如果端点没有配置匹配的互联网密钥交换(IKE)版本、算法、IP 地址范围或预共享密钥(PSK),则 VPN 连接会失败。如果识别不匹配,您必须匹配两个端点上的设置来解决这个问题。
- 远程 Peer Not Running IKE/IPsec
 如果连接被拒绝,则会显示 ICMP 错误:
ipsec up vpn.example.com
# 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 Copied! Toggle word wrap Toggle overflow - 不匹配的 IKE 算法
 在初始设置过程中,连接会失败并显示
NO_PROPOSAL_CHOSEN通知:ipsec up vpn.example.com
# 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,NiCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Mismatched IPsec Algorithms
 在初始交换后,连接会失败并显示
NO_PROPOSAL_CHOSEN错误:ipsec up vpn.example.com
# 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_CHOSENCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 不匹配的 IP 地址范围(IKEv2)
 远程对等点响应
TS_UNACCEPTABLE错误:ipsec up vpn.example.com
# 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_UNACCEPTABLECopy to Clipboard Copied! Toggle word wrap Toggle overflow - 不匹配的 IP 地址范围(IKEv1)
 在快速模式下连接超时,并显示代表 peer 不接受提议的消息:
ipsec up vpn.example.com
# 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 proposalCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Mismatched PSK (IKEv2)
 peer 拒绝与
AUTHENTICATION_FAILED错误的连接:ipsec up vpn.example.com
# 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:500Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Mismatched PSK (IKEv1)
 哈希有效负载不匹配,使 IKE 消息不可读取,并导致
INVALID_HASH_INFORMATION错误:ipsec up vpn.example.com
# ipsec up vpn.example.com ... 002 "vpn.example.com" #1: IKE SA authentication request rejected by peer: AUTHENTICATION_FAILEDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
6.14.4. MTU 问题 复制链接链接已复制到粘贴板!
诊断由最大传输单元(MTU)问题导致的间歇性 IPsec 连接失败。加密会增加数据包大小,从而导致数据包超过网络的 MTU 时碎片和丢失数据,通常会看到更大的数据传输。
					一个常见的症状是,小数据包(例如 ping)可以正常工作,但大型数据包(如 SSH 会话)在登录后冻结。要解决这个问题,请通过将 mtu=1400 选项添加到配置文件来降低隧道的 MTU。
				
6.14.5. NAT 冲突 复制链接链接已复制到粘贴板!
解决 IPsec 主机也充当 NAT 路由器时出现的 NAT 冲突。不正确的 NAT 应用程序可以在加密前转换源 IP 地址,从而导致数据包通过网络进行未加密的发送。
例如,如果在应用 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
# 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
6.14.6. 内核级 IPsec 问题 复制链接链接已复制到粘贴板!
当 VPN 隧道建立但没有流量流时,对内核级别的 IPsec 问题进行故障排除。在这种情况下,检查内核的 IPsec 状态,以检查隧道策略和加密密钥是否已正确安装。
这个过程涉及检查两个组件:
- 安全策略数据库(SPD):指示内核要加密的流量的规则。
 - 安全关联数据库(SAD):指示内核如何加密该流量的密钥。
 
首先,检查 SPD 中是否存在正确的策略:
ip xfrm policy
# 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
					输出应包含与您的 leftsubnet 和 rightsubnet 参数匹配的策略,以及 in 和 out 方向。如果没有为流量看到策略,Libreswan 无法创建内核规则,并且不会加密流量。
				
如果策略存在,检查它是否在 SAD 中有对应的键集合:
ip xfrm state
# 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...
这个命令显示私钥。不要共享此输出,因为攻击者可以使用它来解密您的 VPN 流量。
					如果策略存在,但没有具有相同 reqid 的对应状态,这通常意味着互联网密钥交换(IKE)协商失败。这两个 VPN 端点无法同意一组密钥。
				
					如需更详细的诊断,请将 -s 选项与其中一个命令一起使用。这个选项添加流量计数器,这有助于识别内核是否按特定规则处理数据包。
				
6.14.7. 内核 IPsec 子系统错误 复制链接链接已复制到粘贴板!
内核 IPsec 子系统中的一个缺陷可能会导致它丢失与 IKE 守护进程的同步。这可能会导致协商安全关联和实际 IPsec 策略强制之间的差异,从而破坏安全的网络通信。
要检查内核级别的错误,显示转换(XFRM)统计信息:
cat /proc/net/xfrm_stat
# cat /proc/net/xfrm_stat
					如果输出中的任何计数器(如 XfrmInError )显示非零值,这表示内核子系统存在问题。在这种情况下,创建一个支持问题单,并将命令的输出与对应的 IKE 日志附加。
				
6.14.8. 显示 Libreswan 日志 复制链接链接已复制到粘贴板!
					显示 Libreswan 日志来诊断和排除 IPsec 服务事件和问题。访问 ipsec 服务的日志,以深入了解连接状态和潜在问题。
				
要显示日志,请输入:
journalctl -xeu ipsec
# journalctl -xeu ipsec
					如果默认日志记录级别没有提供足够详情,请通过在 /etc/ipsec.conf 文件中的 config setup 部分中添加以下设置来启用全面的调试日志:
				
plutodebug=all logfile=/var/log/pluto.log
plutodebug=all
logfile=/var/log/pluto.log
					由于调试日志记录可以生成许多条目,因此将消息重定向到专用日志文件可防止 journald 和 systemd 服务对消息进行速率限制。