IKE协商端口开放了UDP500后依然协商不成功

发布时间:  2013-06-08 浏览次数:  4832 下载次数:  0
问题描述
拓扑图如下:

在Eudemon1000E-X6上的接口G0/0/2上,配置ipsec模板策略。IPSec两端的参数配置好,两边配置好后,并且在Eudemon1000E-X6上开放从untrust->local为默认permit时,IPSec隧道建立成功。
但是,客户的需求是要限制从untrust->local的域间策略。在untrust->local配置了如下域间策略后,则IPSec隧道建立不成功
#
policy interzone local untrust inbound
policy 0
  action permit
  policy session traffic statistic enable
  policy service service-set esp
  policy service service-set ah
  policy service service-set nat_t  udp/4500
  policy service service-set isakmp  udp/500
  policy service service-set hwcc  udp/10000
  policy service service-set icmp
#
告警信息
处理过程
1. 当untrust->local域间策略默认permit时IPSec隧道可以建立成功,排除了IPSec协商的参数问题。限制了从untrust->local的域间策略后,IPSec协商不成功,因此肯定是策略中限制了某些必须端口不允许通过,导致没法进行协商。IPSec只需要用到如下端口就足够:
IKE: 500,4500
IPSEC: AH,ESP
其中IKE协商使用UDP500端口作为目的端口号,当有NAT穿越时,会将目的端口号修改为4500. 客户的配置中,已经包含了这几个端口。但是IKE协商依然不成功。
#
policy interzone local untrust inbound
policy 0
  action permit
  policy session traffic statistic enable
  policy service service-set esp
  policy service service-set ah
  policy service service-set nat_t  udp/4500
  policy service service-set isakmp  udp/500
  policy service service-set hwcc  udp/10000
  policy service service-set icmp
#
2. 怀疑场景中除了IPSec VPN还有GRE或者L2TP之类的VPN,这些VPN隧道建立需要另外的端口。查看配置文件,排除这些可能性,该应种场景只涉及IPSec VPN。
3. 进一步分析配置文件,发现isakmp为自定义serive-set,其定义如下:
#
ip service-set isakmp type object
service 0 protocol udp source-port 1025 to 65535 destination-port 500
#
其中,源端口号的限制(1025-65535)为客户要求,客户认为0-1024端口为知名端口。但实际上,IKE协商基于的isakmp消息发送时,其源端口号被设置为500,如下图:

一般来说对接IKE报文的源端口和目的端口都是500.
如果中间经过nat设备,源端口还会变化的。也有的客户端也可能发送的报文源端口不是500。
将配置修改如下
#
ip service-set isakmp type object
service 0 protocol udp source-port 0 to 65535 destination-port 500
#
再进行测试,IPSec VPN隧道可以建立成功。
根因
1. 域间策略开放目的端口不够。
2. IPSec VPN基于其他诸如GRE或者L2TP VPN
3. 限制了某些可能需要用到的源端口。
建议与总结
在IPSec VPN隧道协商时,对UDP目的端口号为500或者4500的报文都认为是IKE协商报文。此外,还需要注意不要限制源端口号。

END