IPSec 失败,带有“IKE 消息未通过完整性检查或格式错误”

网络工程 思科 网络安全
2021-07-19 08:42:38

几天来我一直在与我的 IPSec 配置作斗争(愚蠢的最后期限迫在眉睫)并且想寻求帮助以解决初始连接失败的问题。

它被设计为客户端到路由器的辐条,以 Cisco 路由器为中心,各种设备(最终)作为辐条。

  • 密钥交换似乎有效
  • 连接失败 %CRYPTO-4-IKMP_BAD_MESSAGE: IKE message from 1.2.3.22 failed its sanity check or is malformed
  • 重传和此后的厄运
  • UDP 端口 500 和 4500 已知可遍历网络

目标是让客户端在 R3 下通过 IP 流量连接到服务器。

              172.30.20/24      
      ==+=========+=======
        |         |
        R3       server 
        |           
        |172.29.20.128...
      client

传输网络如下所示:

                 isp----------isp
                  |1.2.3.22    |2.3.4.30
                  R1(nat)      R2(nat)          
    192.168.0/24  |            |    172.30.20/24          
      ==+====+====+===       ==+====+====+====+==
        |    |                      |    |    |
        AP   U1                     R3   U2   server
        |
      client
  • client是在非常传统的酒店/办公室式 NAT 网络下的 wifi 上的 iphone R1(已消毒到 1.2.3.22)
  • R2 (清理到 2.3.4.30)正在做 NAT,端口转发到 R3
  • R3 调试和监控捕获
  • U1U2方便的 Unix 主机,用于验证数据包传输等

R2 配置

R2 正在运行 Cisco 867VAE-K9 c860vae-advsecurityk9-mz.153-2.T.bin

接口Vlan1
 IP 地址 172.30.20.254 255.255.255.0
 ip nat 里面
接口Vlan87
 IP 地址 2.3.4.30 255.255.255.252
 ip nat 外面
ip nat inside source list NAT 接口 Vlan87 过载
ip nat inside source static esp 172.30.20.252 interface Vlan87
ip nat inside source static udp 172.30.20.252 500 interface Vlan87 500
ip nat inside source static udp 172.30.20.252 4500 interface Vlan87 4500
ip 访问列表标准 NAT
 许可 172.30.20.0 0.0.0.255
ip 路由 0.0.0.0 0.0.0.0 2.3.4.29

R3 配置

R3 正在运行 Cisco 867VAE-K9 c860vae-advsecurityk9-mz.152-4.M3.bin

aaa 认证登录 VPN_CLIENT_LOGIN 本地
aaa 授权网络 VPN_CLIENT_GROUP 本地 
用户名 vpnuser 密码 0 *secret1*
加密 isakmp 策略 10
 编码 256
 哈希 sha512
 认证预共享
 第 14 组
加密 isakmp 密钥 *secret2* 地址 0.0.0.0        
加密 isakmp 客户端配置组 VPN_CLIENTS
 关键 *secret3*
 DNS 8.8.8.8
 域示例.local
 池 VPN_CLIENT_POOL
 ACL 110
加密 ipsec 转换集 TS esp-aes 256 esp-sha512-hmac 
 模式隧道
加密动态映射 VPNDYNAMIC 10
 设置转换集 TS 
加密映射 DYNMAP 客户端身份验证列表 VPN_CLIENT_LOGIN
加密映射 DYNMAP isakmp 授权列表 VPN_CLIENT_GROUP
加密映射 DYNMAP 客户端配置地址响应
加密映射 DYNMAP 10 ipsec-isakmp 动态 VPNDYNAMIC 
接口千兆以太网1
 IP 地址 172.30.20.252 255.255.255.0
 加密映射 DYNMAP
ip 本地池 VPN_CLIENT_POOL 172.29.20.128 172.29.20.254
ip 路由 0.0.0.0 0.0.0.0 172.30.20.254
访问列表 110 允许 ip 172.30.20.0 0.0.0.255 172.29.20.0 0.0.0.255

客户端配置

client 是运行 IOS 10.3 的 Apple iphone 5.2。

  • VPN 配置
  • 类型 IPSec
  • 服务器 2.3.4.30
  • 帐户 vpnuser
  • 密码 secret1
  • 使用证书 No
  • 组名空白
  • 秘密 secret2

带注释的调试

以下是 的R3输出debug crypto isakmp,其中散布着monitor capture将所有 UDP 匹配到 1.2.3.22 的输出(导出为 pcap 并用 显示tcpdump

7 月 14 日 12:10:47.776:%BUFCAP-6-ENABLE:启用捕获点 POINT1。
       12:10:58.312750 IP 1.2.3.22.500 > 172.30.20.252.500: isakmp: 阶段 1 I ident
7 月 14 日 12:10:58.315:ISAKMP (0):收到来自 1.2.3.22 dport 500 Sport 500 Global (N) NEW SA 的数据包
7 月 14 日 12:10:58.315:ISAKMP:为 1.2.3.22 创建了一个对等结构,对等端口 500
7 月 14 日 12:10:58.315:ISAKMP:新创建的对等节点 = 0x86E4DCB0 peer_handle = 0x8000000D
7 月 14 日 12:10:58.315:ISAKMP:锁定对等结构 0x86E4DCB0,crypto_isakmp_process_block 的引用计数 1
7 月 14 日 12:10:58.315:ISAKMP:(0):设置客户端配置设置 86C03770
Jul 14 12:10:58.315: ISAKMP:(0):(Re)Setting client xauth list and state
7 月 14 日 12:10:58.315:ISAKMP/xauth:初始化 AAA 请求
7 月 14 日 12:10:58.319:ISAKMP:本地端口 500,远程端口 500
7 月 14 日 12:10:58.319: ISAKMP:(0): 成功插入 sa = 84C4E0E0
7 月 14 日 12:10:58.319:ISAKMP:(0):Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH
7 月 14 日 12:10:58.319:ISAKMP:(0):旧状态 = IKE_READY 新状态 = IKE_R_MM1 

7 月 14 日 12:10:58.319:ISAKMP:(0):处理 SA 负载。消息 ID = 0
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 69 不匹配
7 月 14 日 12:10:58.319:ISAKMP (0):供应商 ID 为 NAT-T RFC 3947
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 198 不匹配
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 29 不匹配
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 245 不匹配
7 月 14 日 12:10:58.319:ISAKMP (0):供应商 ID 为 NAT-T v7
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 114 不匹配
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 227 不匹配
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 250 不匹配
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 157 不匹配
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 为 NAT-T v3
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 164 不匹配
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 123 不匹配
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 为 NAT-T v2
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 似乎是 Unity/DPD,但主要 242 不匹配
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 为 XAUTH
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 为 Unity
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):处理 IKE 片段供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):未启用对 IKE 分段的支持
7 月 14 日 12:10:58.319:ISAKMP:(0):处理供应商 ID 有效负载
7 月 14 日 12:10:58.319:ISAKMP:(0):供应商 ID 为 DPD
Jul 14 12:10:58.319: ISAKMP:(0):found peer pre-shared key matching 1.2.3.22
7 月 14 日 12:10:58.319:ISAKMP:(0):找到本地预共享密钥
7 月 14 日 12:10:58.319:ISAKMP:(0):xauth 预共享身份验证
7 月 14 日 12:10:58.319:ISAKMP:(0):根据优先级 10 策略检查 ISAKMP 转换 1
mismatches 删除 ISAKMP:(0): 提供的哈希算法与策略不匹配!
7 月 14 日 12:10:58.323:ISAKMP:(0):根据优先级 10 策略检查 ISAKMP 转换 4
7 月 14 日 12:10:58.323:ISAKMP:以秒为单位的生命类型
7 月 14 日 12:10:58.323:ISAKMP:生命周期(基本)为 3600
7 月 14 日 12:10:58.323:ISAKMP:加密 AES-CBC
7 月 14 日 12:10:58.323:ISAKMP:密钥长度为 256
7 月 14 日 12:10:58.323:ISAKMP:auth XAUTHInitPreShared
7 月 14 日 12:10:58.323:ISAKMP:哈希 SHA512
7 月 14 日 12:10:58.323:ISAKMP:默认组 14
7 月 14 日 12:10:58.323:ISAKMP:(0):atts 是可以接受的。下一个有效载荷是 3
7 月 14 日 12:10:58.323:ISAKMP:(0):可接受的 atts:实际寿命:86400
7 月 14 日 12:10:58.323:ISAKMP:(0):可接受的 atts:life: 0
7 月 14 日 12:10:58.323:ISAKMP:(0):Basic life_in_seconds:3600
7 月 14 日 12:10:58.323:ISAKMP:(0):Returning 实际生命周期:3600
7 月 14 日 12:10:58.323:ISAKMP:(0)::Started Lifetime timer: 3600。

       12:10:58.536748 IP 172.30.20.252.500 > 1.2.3.22.500:isakmp:阶段 1 R ident
7 月 14 日 12:10:58.539:ISAKMP (0):供应商 ID 为 NAT-T RFC 3947
7 月 14 日 12:10:58.539:ISAKMP (0):供应商 ID 为 NAT-T v7
7 月 14 日 12:10:58.539:ISAKMP:(0):供应商 ID 为 NAT-T v3
7 月 14 日 12:10:58.539:ISAKMP:(0):供应商 ID 为 NAT-T v2
7 月 14 日 12:10:58.539:ISAKMP:(0):Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE
7 月 14 日 12:10:58.539:ISAKMP:(0):旧状态 = IKE_R_MM1 新状态 = IKE_R_MM1 

7 月 14 日 12:10:58.539:ISAKMP:(0):构建的 NAT-T 供应商-rfc3947 ID
Jul 14 12:10:58.539: ISAKMP:(0): 发送数据包到 1.2.3.22 my_port 500 peer_port 500 (R) MM_SA_SETUP
7 月 14 日 12:10:58.539:ISAKMP:(0):发送 IKE IPv4 数据包。
7 月 14 日 12:10:58.539:ISAKMP:(0):Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE
7 月 14 日 12:10:58.539:ISAKMP:(0):旧状态 = IKE_R_MM1 新状态 = IKE_R_MM2 

       12:10:58.932745 IP 1.2.3.22.500 > 172.30.20.252.500: isakmp: 阶段 1 I ident
Jul 14 12:10:58.935: ISAKMP (0): 从 1.2.3.22 dport 500 Sport 500 Global (R) MM_SA_SETUP 收到数据包
7 月 14 日 12:10:58.935:ISAKMP:(0):Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH
7 月 14 日 12:10:58.935:ISAKMP:(0):旧状态 = IKE_R_MM2 新状态 = IKE_R_MM3 

7 月 14 日 12:10:58.935:ISAKMP:(0):处理 KE 负载。消息 ID = 0
       12:10:59.216750 IP 172.30.20.252.500 > 1.2.3.22.500: isakmp: 阶段 1 R ident
7 月 14 日 12:10:59.219:ISAKMP:(0):处理 NONCE 负载。消息 ID = 0
Jul 14 12:10:59.219: ISAKMP:(0):found peer pre-shared key matching 1.2.3.22
7 月 14 日 12:10:59.219:ISAKMP:收到的有效载荷类型 20
7 月 14 日 12:10:59.219:ISAKMP (1008):找到 NAT,两个节点都在 NAT 内
7 月 14 日 12:10:59.219:ISAKMP:收到的有效载荷类型 20
7 月 14 日 12:10:59.219:ISAKMP (1008):找到 NAT,两个节点都在 NAT 内
7 月 14 日 12:10:59.219: ISAKMP:(1008):Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE
7 月 14 日 12:10:59.219:ISAKMP:(1008):旧状态 = IKE_R_MM3 新状态 = IKE_R_MM3 

Jul 14 12:10:59.219: ISAKMP:(1008): 发送数据包到 1.2.3.22 my_port 500 peer_port 500 (R) MM_KEY_EXCH
7 月 14 日 12:10:59.219:ISAKMP:(1008):发送 IKE IPv4 数据包。
7 月 14 日 12:10:59.219: ISAKMP:(1008):Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE
7 月 14 日 12:10:59.219:ISAKMP:(1008):旧状态 = IKE_R_MM3 新状态 = IKE_R_MM4 

       12:10:59.536748 IP 1.2.3.22.4500 > 172.30.20.252.4500: NONESP-encap: isakmp: 阶段 1 I ident[E]

Jul 14 12:10:59.543: ISAKMP (1008): 从 1.2.3.22 dport 4500 Sport 4500 Global (R) MM_KEY_EXCH 收到数据包
7 月 14 日 12:10:59.543:ISAKMP:在 ID 负载上保留不是零!
7 月 14 日 12:10:59.543:%CRYPTO-4-IKMP_BAD_MESSAGE:来自 1.2.3.22 的 IKE 消息未通过完整性检查或格式错误
7 月 14 日 12:10:59.543:ISAKMP (1008):增加 sa 上的错误计数器,尝试 5 次中的 1 次:reset_retransmission

注 1 第二个差距
       12:11:00.540748 IP 172.30.20.252.500 > 1.2.3.22.500: isakmp: 阶段 1 R ident

7 月 14 日 12:11:00.543:ISAKMP:(1008):重传阶段 1 MM_KEY_EXCH ...
7 月 14 日 12:11:00.543:ISAKMP (1008):增加 sa 上的错误计数器,尝试 2 of 5:重传阶段 1
7 月 14 日 12:11:00.543:ISAKMP:(1008):重传阶段 1 MM_KEY_EXCH
Jul 14 12:11:00.543: ISAKMP:(1008): 发送数据包到 1.2.3.22 my_port 500 peer_port 500 (R) MM_KEY_EXCH
7 月 14 日 12:11:00.543:ISAKMP:(1008):发送 IKE IPv4 数据包。
       12:11:00.736746 IP 1.2.3.22.4500 > 172.30.20.252.4500: NONESP-encap: isakmp: phase 1 I ident[E]
Jul 14 12:11:00.743: ISAKMP (1008): 从 1.2.3.22 dport 4500 Sport 4500 Global (R) MM_KEY_EXCH 收到数据包
7 月 14 日 12:11:00.743:ISAKMP:(1008):阶段 1 数据包是前一个数据包的副本。
重传被删除
Jul 14 12:11:20.059: ISAKMP:(1008):deleting SA 原因“Death by Retransmission P1”状态 (R) MM_KEY_EXCH (peer 1.2.3.22)

12:10:59.536748 IP (tos 0x0, ttl 52, id 7631, offset 0, flags [none], proto UDP (17), length 172)
    1.2.3.22.4500 > 172.30.20.252.4500: [udp sum ok] NONESP-encap: isakmp 1.0 msgid 00000000 cookie 362a9b378758c0d1->419c8:dfident ]EID19763E加密

非常感谢任何指点。

1个回答

回答我自己的问题:解决方案是:

  • 在客户端配置中使用正确的组名(VPN_CLIENTS在示例中)
  • secret3在客户端使用组的键(),而不是主键(secret2)(后者似乎无关紧要,欢迎评论)
  • 使用噪声较小的调试 ( debug crypto ipsec) 来识别哈希和转换不兼容性
  • 获取正确的哈希值等。

然后为这个客户端获取正确的策略和转换,通过阅读失败是很好的细节,然后再次阅读它们。

解决方案对运行 OSX 10.13 的 Macintosh 上的“Cisco IPSec”VPN 的工作方式相同。

客户变更

  • 帐户 vpnuser
  • 密码 secret1
  • 团队名字 VPN_CLIENTS
  • 秘密 secret3

R3变化

crypto isakmp policy 10
 encr aes 256
 hash sha512
 authentication pre-share
 group 14 

crypto ipsec transform-set TS esp-aes 256 esp-sha-hmac 

路线

您显然必须获得从服务器到客户端的路由,例如添加R2

ip route 172.29.30.0 255.255.255.0 172.30.20.252

此外,添加reverse-routeR3的组,但我不清楚这是否有必要以及与 ACL 的确切交互。(欢迎评论)。

crypto dynamic-map VPNDYNAMIC 10
 ...
 reverse-route

非常感谢此处显示的错误和调试消息:https : //zeeshannetwork.wordpress.com/2016/12/04/ipsec-part-vii-common-issues-in-phase2/