深信服设备主动触发,与MSR3640建立IPSEC失败

关键词:
问题现象

MSR3640与深信服设备进行IPSEC对接。

当MSR3640主动触发,与深信服设备建立IPSEC时,可以成功建立。

但,当深信服设备主动触发,与MSR3640建立IPSEC时,IPSEC无法建立。

告警信息

通过在MSR3640上抓取深信服设备主动触发、建立IPSEC失败时的debug ike all调试信息,发现有如下提示。


*Oct 15 01:17:22:272 2015 LYLib-MSR3640 IKE/7/PACKET:
  I-Cookie: fb24895dc48813d6
  R-Cookie: a0a5ceb1620e7704
  next payload: ID
  version: ISAKMP Version 1.0
  exchange mode: Main
  flags: ENCRYPT
  message ID: 0
  length: 60
*Oct 15 01:17:22:272 2015 LYLib-MSR3640 IKE/7/EVENT: IKE thread 1099131478688 processes a job.
*Oct 15 01:17:22:272 2015 LYLib-MSR3640 IKE/7/PACKET: Decrypt the packet.
*Oct 15 01:17:22:272 2015 LYLib-MSR3640 IKE/7/PACKET: Received ISAKMP Identification Payload.
*Oct 15 01:17:22:272 2015 LYLib-MSR3640 IKE/7/ERROR: 2th byte of the structure ISAKMP Identification Payload must be 0.
*Oct 15 01:17:22:272 2015 LYLib-MSR3640 IKE/7/ERROR: Failed to parse phase 1 packet. Reason INVALID_PAYLOAD_TYPE.
*Oct 15 01:17:22:272 2015 LYLib-MSR3640 IKE/7/PACKET: Encrypt the packet.
*Oct 15 01:17:22:273 2015 LYLib-MSR3640 IKE/7/PACKET: Construct notification packet: INVALID_PAYLOAD_TYPE.
*Oct 15 01:17:22:273 2015 LYLib-MSR3640 IKE/7/PACKET: Sending packet to 125.40.157.54 remote port 500, local port 500.
*Oct 15 01:17:22:273 2015 LYLib-MSR3640 IKE/7/PACKET:
  I-Cookie: fb24895dc48813d6
  R-Cookie: a0a5ceb1620e7704
  next payload: HASH
  version: ISAKMP Version 1.0
  exchange mode: Info
  flags: ENCRYPT
  message ID: e5a6ad18
  length: 76
*Oct 15 01:17:22:273 2015 LYLib-MSR3640 IKE/7/PACKET: Sending an IPv4 packet.
*Oct 15 01:17:22:273 2015 LYLib-MSR3640 IKE/7/ERROR: Failed to negotiate IKE SA.

MSR3640上debug提示对端深信服发送的ike协商中的第五个报文中Identification字段的第二字节是非零的,进而导致IKE协商失败。

通过查询IPSEC的RFC文档,RFC中明确要求第五个报文中Identification字段的第二字节必须为0 。

 

由于MSR3640的debug中没有打印ike报文的详细信息,因此,重新收集了一次IKE协商过程,将MSR3640与深信服设备互联的物理接口的报文进行镜像。

通过分析镜像报文发现,对端发送的第五个报文中Identification字段的第二字节已经置为0 ,如下图所示

解密后的报文:

至此,问题陷入僵局,MSR3640提示对端发送的报文错误,但是通过抓包看到的报文确实是正确的。

 

后来,再次分析镜像报文的时候,发现解密前的报文,加密字段的第二字节是非0的。

结合MSR3640上debug ike all的提示,怀疑是MSR3640对深信服设备发送的ike第五个报文的加密部分进行解密时,解密失败。

因此,怀疑是MSR3640对这部分数据进行解密时,使用的秘钥不对,导致解密失败。

由于ike加密解密的秘钥,与使用的ike proposal相关,查看设备当前配置,发现有两个加密算法、验证算法相同的ike proposal 。

配置如下
#
ike proposal 1
 encryption-algorithm 3des-cbc
 dh group2
 authentication-algorithm md5
#
ike proposal 2
 encryption-algorithm 3des-cbc
 dh group2
 authentication-algorithm md5
 sa duration 28800
#

而MSR3640与深信服设备建立IPSEC时使用的ike profile引用的是ike proposal 2
#
ike profile ******
 keychain ******
 proposal 2
#

尝试将ike profile中引用的proposal 2 修改为proposal 1 ,再次尝试深信服主动触发、与MSR3640建立IPSEC,建立成功。

原因分析

IKE第一阶段主模式预共享秘钥方式协商分为三次交换,每次交换包含两个报文。

第一次交换,协商IKE SA的主要参数,包括IKE的散列类型、加密算法、认证方法等等,并生成DH值Xa、Xb和临时值Ni、Nr ;

第二次交换,交换DH值Xa、Xb和临时值Ni、Nr ;

第三次交换,进行身份认证,ike的载荷通过前两次交换获取的信息生成秘钥进行加密。

 

通过上述过程,可以发现,第一次交换是没有身份信息的,因此,MSR3640收到报文后,会全局匹配ike proposal(在本问题中,匹配到了ike proposal 1);当到了第五个报文时,进行协商的时候,由于ike profile引用的是ike proposal 2 ,MSR3640就使用ike proposal 2中配置的参数进行解密,由于秘钥不相同,因此解密失败。进而,IPSEC也就无法建立成功。

 

 

 

解决办法

修改MSR3640的ike proposal的配置,保证全局的ike proposal中的加密算法、验证算法等等配置各不相同。

建议与总结

在配置MSR系列路由器IPSEC功能时,需要保证全局的ike proposal中的加密算法、验证算法等等配置各不相同。

 

另,配置IPSEC时,需要注意如下几点。

1.非模板方式时ipsec策略下必须配置remote-address

2.当系统配置了多个ike keychain时,ike keychainpre-shared-key address配置地址范围不能有交集。

3.当系统配置了多个ike profile时,ike profilematch remote identity address配置地址范围不能有交集。

4.当系统配置了多个ike profile时,并在profile下引用了ike keychain,那么需要保证在全局通过pre-shared-key address匹配的ike keychainike profile下引用的ike keychain是一致的。

5.ike协商第一阶段中,ike profileike keychain均是在全局下匹配的,需要保证ike协商第二阶段中找到的ipsec policy中引用的ike profile和第一阶段匹配的ike profile是一致的。

6.如果在ipsec policy下面配置了local-address,那么这个地址需要与收到的协商报文的目的地址是一样的。

案例信息

案例类型:经验案例
案例号:201510240003
创建时间:2015年10月24日
更新时间:2016年4月28日
发布时间:2016/4/28 0:42:01
文章密级:游客可见
有效期:长期有效
发布者:孙培浩 [s09859]
点击次数:2684
评论平均得分:0
关键词:IPSec
产品线:中低端路由器
产品系列:MSR36系列
产品版本:version 7.1.049, Release 0106
故障类型:

常用操作
收藏