设为首页收藏本站language 语言切换
查看: 1017|回复: 2
收起左侧

[分享] IPSec故障案例:未触发IKE协商

[复制链接]
 成长值: 64285
发表于 2024-12-11 21:06:30 | 显示全部楼层 |阅读模式
本帖最后由 小乔 于 2024-12-11 21:08 编辑

现象描述
图1所示,FW间部署IPSec后,PC之间互访不通。
图16-24 IPSec组网图


在FW1上执行命令display ike sa remote 2.1.1.1查看SA状态,没有显示信息,说明IPSec隧道建立失败。
<FW1> display ike sa
在FW1上执行命令display firewall session table verbose destination-port global 500 destination global 2.1.1.1查看会话信息,没有显示信息。

<FW1> display firewall session table verbose destination-port global 500 destination global 2.1.1.1
在FW1上执行命令display ipsec statistics查看IPSec统计信息。

<FW1> display ipsec statistics
.......
  negotiate about packet statistics:
    IKE fwd packet ok: 0, err: 0
    IKE ctrl packet inbound ok: 0, outbound ok: 0
    SoftExpr: 0, HardExpr: 0, DPDOper: 0
trigger ok: 0, switch sa: 0, sync sa: 0
    recv IKE nat keepalive: 0, IKE input: 0
IPSec SA建立的触发方式为自动触发方式
outbound ok为0,说明本端IKE协商报文没有发出,没有触发协商IPSec隧道。

IPSec SA建立的触发方式为流量触发方式
trigger ok为0,说明没有数据流触发IKE协商。如果trigger ok不为0,outbound ok为0,说明本端IKE协商报文没有发出,没有触发协商IPSec隧道。


设备上建立多条IPSec隧道时,执行命令display ipsec statistics无法确定哪条隧道的IKE协商报文没有被发出。此时,建议执行命令display firewall session table verbose查看是否存在IKE对等体地址的IKE会话(默认UDP端口号为500或4500)。例如:

<FW1> display firewall session table verbose
udp  VPN: public --> public  ID: a68f5bd4603f01f756c5ab54663
Zone: local --> trust  TTL: 00:02:00  Left: 00:01:58
Recv Interface: InLoopBack0
Interface: GigabitEthernet0/0/2  NextHop: 1.1.1.2  MAC: 2cab-0078-c406
<--packets: 0 bytes: 0 --> packets: 0 bytes: 0   //检查是否发出或收到IKE协商报文
1.1.1.1:500 --> 2.1.1.1:500 PolicyName: default
相关告警与日志
原因分析
操作步骤
执行命令display ipsec policy检查IPSec SA的触发方式。
<sysname> display ipsec policy
===========================================
IPSec policy group: "1"
Using interface: GigabitEthernet 0/0/2
===========================================
    Sequence number: 1
    Policy Alias: 1-1   
    Security data flow: 3000/IPv4   //policy配置完整条件一
    Peer name    : 1                //policy配置完整条件二
    Perfect forward secrecy: DH group 2
    Tunnel local address: 1.1.1.1
    Proposal name:  1               //policy配置完整条件三
    IPSec SA local duration(time based): 3600 seconds
    IPSec SA local duration(traffic based): 20971520 kilobytes
    SA trigger mode: Traffic-based  //IPSec SA的触发方式
    Route inject state: Static
    Route inject nexthop: -
    Route inject preference: 70
    Policy state: Enable        //策略是否使能:Enable——使能,Disable——未始能
    Anti-replay: -
    Anti-replay window size: -
    Fragment before-encryption: Disable
    Respond-only : Disable      //是否响应方:Enable——只做响应方,Disable——可做发起方
    Policy status  : Active     //策略是否应用:Active——已应用,Inactive——未应用
    Smart-link profile: -
    Smart-link using interface:
    Flow-vrf check : Enable
    Sa keep-holding-to hard-duration : Disable

如果Policy state或Policy status显示项有一项处于Disable或Inactive状态,那么策略未生效,需要检查ipsec policy配置;
如果Respond-only显示项为Enable,那么ipsec policy只能接收对端协商,不能触发;
如果SA trigger mode显示项为Traffic-based,那么触发IKE协商的前提条件为有业务流量,用户可以通过Ping方式来触发IKE协商。用户也可以在ipsec-policy视图下执行命令sa trigger-mode auto配置IPSec SA的触发方式为自动触发方式,这样可以避免无业务流量时无法触发IKE协商。
检查私网路由及公网路由是否可达。
执行命令ping确认是否可以Ping通私网和公网路由。如果Ping不通,则请确保链路正常、接口Up、路由等网络配置正确。


需要使能接口Ping功能;
公网接口应用了点到多点IPSec策略,可能导致Ping不通。
检查IPSec策略是否正确应用到隧道接口上。
执行命令display ipsec interface brief查看隧道接口是否有IPSec策略信息,如果没有,则需在该接口上应用IPSec策略。

<sysname> display ipsec interface brief
------------------------------------------------
  IPSec policy        : policy1
  Using interface     : GigabitEthernet0/0/2
  IPSec policy number : 10
  IPSec policy Type   : policy
------------------------------------------------
只有配置完整的IPSec策略才能被应用到接口上,而且只有应用到接口上的IPSec策略才会生效。如果新增的IPSec策略未在接口应用,则需要检查IPSec策略配置是否完整,再将其应用到接口上。

IPSec策略配置完整的三个条件:

security acl ——引用ACL,点到点IPSec策略必须配置,点到多点IPSec策略可选;
proposal ——引用IPSec提议;
ike-peer ——引用IKE对等体,点到点IPSec策略必须配置remote-address,点到多点IPSec策略可选。

如果IPSec policy Type显示为template,说明该策略是点到多点IPSec策略,只能作为响应方,不能主动触发协商。当一个IPSec策略组同时存在点到点IPSec策略和点到多点IPSec策略时,点到多点IPSec策略的优先级需最小,即序号最大,一般推荐序号为10000。

检查Security ACL与待保护数据流是否匹配。
方法一:执行命令display ipsec policy查看Security ACL序号,然后再执行命令display acl acl-number检查ACL配置与待保护数据流是否匹配,如果不匹配,则请修改正确。

<sysname> display ipsec policy
===========================================
IPSec policy group: "10"
Using interface: GigabitEthernet0/0/2
===========================================
     Sequence number: 10
     Policy Alias: map1-10
     Security data flow: 3100/IPv4   //Security ACL
     Peer name    :  rut2
     Perfect forward secrecy: DH group 14
     Proposal name:  prop1
     IPSec SA local duration(time based): 3600 seconds
     IPSec SA local duration(traffic based): 1843200 kilobytes
     SA trigger mode: Traffic-based   
......
<sysname> display acl 3100
Advanced ACL 3100, 1 rule ( Reference counter 1 )
Acl's step is 5
rule 5 permit ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255 (0 times matched)     
方法二:诊断视图下执行命令display ipsec tdbentry查看Flow source和Flow destination显示项,再检查与待保护的数据流是否匹配。若不匹配,则请修改正确。

[sysname-diagnose] display ipsec tdbentry
===============================
Interface: GigabitEthernet 0/0/2              
  -----------------------------
  IPSec policy/profile name: "1"
  Sequence number          : 1  
  Acl group                : 3100
  Acl rule                 : 5   
  Mode                     : ISAKMP
  -----------------------------   
    Tunnel local      : 1.1.1.1
    Tunnel remote     : 2.1.1.1
    Flow source       : 10.1.1.1/255.255.255.0 0/0-65535
    Flow destination  : 10.2.1.1/255.255.255.0 0/0-65535
    ……
检查是否有NAT策略干扰IPSec保护数据流。
转发流程中IPSec模块位于NAT模块(NAT Server、目的NAT、源NAT)之后,故应确保NAT Server、目的NAT不影响IPSec对保护的数据流的处理。具体要求如下:

执行命令display firewall server-map查看Server MAP表中的源IP地址和目的IP地址。
请确保IPSec保护的数据流不能匹配NAT Server建立的Server MAP表和反向Server MAP表,否则报文目的地址将被转换。

执行命令display zone和display acl acl-number查看目的NAT策略的ACL信息。
请确保IPSec保护的数据流不能匹配目的NAT策略,否则报文目的地址将被转换。

执行命令display current-configuration configuration policy-nat查看源NAT策略信息。
请确保IPSec保护的数据流不能匹配源NAT策略。

如果上述方法还无法定位出问题,请执行如下命令对业务流量报文进行跟踪,分析debug中是否有NAT转换信息或者其他异常信息。
<sysname> terminal monitor
<sysname> terminal debugging
<sysname> debugging dataplane trace acl 3100
如果IPSec保护的数据流需要进行NAT转换,则Security ACL保护的地址为NAT后的地址。

检查安全区域的域间配置信息是否正确。
执行命令display current-configuration configuration policy-security查看安全区域的域间配置信息,确保IPSec保护的数据流能够从Trust域送到Untrust域。

诊断视图下执行命令display ipsec tdbentry查看策略是否触发协商。
[sysname-diagnose] display ipsec tdbentry
===============================
Interface: GigabitEthernet 0/0/2
  -----------------------------
  IPSec policy/profile name: "1"
  Sequence number          : 1  
  Acl group                : 3100
  Acl rule                 : 5   
  Mode                     : ISAKMP
  -----------------------------   
    Tunnel local      : 1.1.1.1
    Tunnel remote     : 2.1.1.1
    Flow source       : 10.1.1.1/255.255.255.0 0/0-65535
    Flow destination  : 10.2.1.1/255.255.255.0 0/0-65535
    Inbound tdb flag  : Closed                          
    Outbound tdb flag : Closed  //协商状态标志
    Anti-replay       : Enable                          
    Anti-replay window size   : 1024                    
    Fragment Before-encryption: Disable
ipsec tdbentry是内部动态数据表项,ipsec policy引用的security acl中的每一个rule对应一个tdbentry表项,IPSec协商是以tdbentry为单位进行的。ipsec tdbentry的显示项outbound tdb flag状态可以初步判断协商状态。flag状态如下所示:

Closed:未协商成功,对于发起方说明未触发协商;
Initialed:已初始化,对于发起方说明正在触发协商;
Ready:已协商成功。
当security acl有多个rule时,如果未触发IPSec协商,那么该ipsec policy对应的所有tdbentry的outbound tdb flag状态都为Closed。

检查私网流量是否从应用了IPSec策略的接口转发。
执行命令display ip routing-table查看私网流量的路由及出接口信息。

[sysname-diagnose] display  ip routing-table  
Route Flags: R - relay, D - download to fib   
------------------------------------------------------------------------------   
Routing Tables: Public                        
         Destinations : 19       Routes : 19      
                                             
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface
                                                   
     10.1.2.2/32  Unr     70   0           D   1.1.1.1   GigabitEthernet 0/0/2
     ……
为了简化私网路由的配置以及减少手工配置导致的路由配置错误,防火墙ipsec policy支持路由注入功能,命令为route inject { static | dynamic }。点到点策略支持静态路由注入和动态路由注入,点到多点策略只支持动态路由注入,通过路由注入功能生成的路由协议均为Unr。

开启静态路由注入功能后,策略应用到接口就会生成路由,且该路由不会随IPSec隧道状态变化而变化;而动态路由注入功能则是在IPSec隧道协商成功后才会生成路由,当IPSec隧道中断后,对应的路由也会撤销。

若以上方法均没有定位出问题所在,请收集以下信息,并联系技术支持人员。
收集配置信息、上述步骤的操作结果,并记录到文件中。
执行命令debugging收集IPSec隧道建立过程中的信息。
<sysname> terminal monitor
<sysname> terminal debugging
<sysname> debugging ikev1 all   //采用IKEv1协商时收集的debugging信息
<sysname> debugging ikev2 all   //采用IKEv2协商时收集的debugging信息
<sysname> debugging ipsec all
关闭debugging后,一键式收集设备的所有诊断信息并导出文件。
执行命令display diagnostic-information file-name采集设备诊断信息并保存为文件。
<sysname> display diagnostic-information dia-info.txt
Now saving the diagnostic information to the device
100%
Info: The diagnostic information was saved to the device successfully
当诊断信息文件生成之后,您可以通过TFTP等方式将其从设备上导出。
您可以在用户视图下执行dir命令,确认文件是否正确生成。

收集设备的日志和告警信息并导出文件。
执行save logfile命令,将缓冲区的日志和告警信息保存为文件。
<sysname> save logfile all
Info: Save logfile successfully.
Info: Save diagnostic logfile successfully.
当日志和告警信息文件生成之后,您可以通过TFTP等方式将其从设备上导出。
收集接口的报文信息,通过TFTP等方式将其从设备上导出。
<sysname> system-view
[sysname] acl 3100
[sysname-acl-adv-3100] acl 3100   //定义数据流
[sysname-acl-adv-3100]  rule 5 permit ip source 10.1.1.1 0 destination 10.2.1.1 0  
[sysname-acl-adv-3100]  rule 5 permit ip source 10.2.1.1 0 destination 10.1.1.1 0  
[sysname-acl-adv-3100] quit
[sysname] packet-capture ipv4-packet 3100 interface GigabitEthernet 0/0/1
[sysname] packet-capture startup packet-num 1500   //开启获取报文头信息功能
[sysname] packet-capture queue 0 to-file 1.cap   //将获取的报文头信息保存到设备上     
获取报文头后,请删除其相关配置。

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-2 05:08 , Processed in 0.059566 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表