L2TP同网段冲突拨号异常问题及IPSec传输模式应用场景分析

发布时间:  2013-06-08 浏览次数:  553 下载次数:  8
问题描述

(1)Ethernet0/0/0:1.1.1.1/24
(2) Ethernet:2/0/0:192.168.0.1/24
PC:192.168.0.22/24
移动用户通过L2TP拨号到公司访问内部服务器资源,实现远程办公。
客户反馈在家通过VPN Client进行L2TP over IPSec拨号时,进行到第三步完成后,即提示错误,无法拨通。
客户端:
  第三步完成。

然后提示错误信息如下:


告警信息
在USG上可以看到如下打印信息
#2000-04-01 17:23:02 0 LNS IPSEC/4/IPSECTUNNELSTART:1.3.6.1.4.1.2011.6.122.26.6.1 the IPSec tunnel is established. (Ifindex=386, SeqNum=1, TunnelIndex=481, RuleNum=5, DstIP=1.1.1.2, InsideIP=192.168.0.22, RemotePort=45496, CpuID=0, SrcIP=1.1.1.1, LifeSize=1843200, LifeTime=3600)

#2000-04-01 17:23:14 0 LNS IPSEC/4/IPSECTUNNELSTOP:1.3.6.1.4.1.2011.6.122.26.6.2 the IPSec tunnel is deleted. (Ifindex=386, SeqNum=1, TunnelIndex=481, RuleNum=5, DstIP=1.1.1.2, InsideIP=192.168.0.22, RemotePort=45496, CpuID=0, SrcIP=1.1.1.1)
处理过程
方法一
       让客户修改家里的私网地址为172.16.100.100后,可以拨号成功。但是由于客户家庭网络使用的私网网段不固定,部分客户不知道怎么更改家庭网络的私网地址或者在公共场所上网不能更改的时候将导致客户L2TP拨号失败。
方法二
       修改LNS侧IPSec封装模式为transport mode,彻底解决这类问题。

       改变封装格式为transport后,IPSec隧道成功建立:

[LNS]dis ipsec sa
00:23:55  2000/04/02
===============================
Interface: Ethernet0/0/0
    path MTU: 1500
===============================

  -----------------------------
  IPsec policy name: "map1"
  sequence number: 1
  mode: template
  vpn: 0
  -----------------------------
    connection id: 10
    rule number: 65535
    encapsulation mode: transport
    holding time: 0d 0h 0m 2s
    tunnel local : 1.1.1.1    tunnel remote: 1.1.1.2
    flow      source: 1.1.1.1/255.255.255.255 17/1701
flow destination: 1.1.1.2/255.255.255.255 17/45492

L2TP隧道建立成功:
[LNS] dis l2tp tunnel
Total tunnel = 1
LocalTID RemoteTID RemoteAddress    Port   Sessions RemoteName
1        1         1.1.1.2          45493  1        clinet1
[LNS] dis l2tp session
Total session = 1
LocalSID  RemoteSID  LocalTID 
  2         1          1  

IP地址成功分配:

[LNS]dis ip pool global
00:33:20  2000/04/02 
  ---------------------------------------------------------------------------- 
  Pool-number  Pool-start-addr   Pool-end-addr   Pool-length  Used-addr-number 
  ----------------------------------------------------------------------------
      1        192.168.10.1      192.168.10.254      254            1          
  ----------------------------------------------------------------------------
  Total pool number:    1
 ----------------------------------------------------------------------------
根因
通过以上设备告警信息,发现IPSEC隧道能够正常建立,但是在IPSEC隧道建立后很快就断了,没有再继续L2TP的拨号过程。
在拨号过程中,使用display ipsec sa,发现如下信息:

[LNS]display ipsec sa

00:42:25  2000/04/02
===============================
Interface: Ethernet0/0/0
    path MTU: 1500
===============================
  -----------------------------
  IPsec policy name: "policy1"
  sequence number: 1
  mode: template
  vpn: 0
  -----------------------------
    connection id: 18
    rule number: 65535
    encapsulation mode: tunnel
    holding time: 0d 0h 0m 5s
    tunnel local : 1.1.1.1    tunnel remote: 1.1.1.2
    flow source: 1.1.1.1/255.255.255.255 17/1701
flow destination: 192.168.0.22/255.255.255.255 17/23062

感兴趣流为:

acl number 3001
    rule 5 permit udp source-port eq 1701


可以看到数据包的封装是tunnel mode,感兴趣流的目的地址192.168.0.22。发现问题如下:
tunnel mode下L2TP拨号阶段数据包封装格式:

                      公网IP头----ESP----感兴趣流IP头----UDP----L2TP----ESP Trailer----ESP Auth

1. 隧道建立之后,数据包可以顺利的从client端发送到LNS端,成功解密后传送到L2TP模块处理。

2. LNS端的L2TP模块处理完成该报文在回包的时候,目的地址为192.168.0.22,源地址的端口为1701端口,该数据是感兴趣流。但是由于内网连接的网段为192.168.0.0/24网段,所以通过路由表查询出接口后,数据包没有送到外网接口,而被送到了内网,从而导致L2TP拨号失败。

3. 检查到这里,找到问题原因了,可以判断是由于客户内网的网段和宽带拨号的内网网段相同了,导致防火墙在进行回包时选择了错误的路径,导致L2TP over IPSEC协商不成功。
建议与总结
transport mode下L2TP拨号时数据包封装格式:
                    公网IP头----ESP----UDP----L2TP----ESP Trailer----ESP Auth
        从封装格式可以看出,当client发包给LNS之后,LNS的L2TP模块处理之后,将直接封装公网的IP地址,查询路由表,路由表显示出接口为外网出口,将数据包送到外网口,外网口查询该数据包的源端口是UDP 1701端口,是感兴趣,接口上有IPSec map,则对数据进行加密。顺利的发送回client端。
        所以使用transport mode可以从根本上解决L2TP over IPSec客户端与LNS内网网段冲突的问题。

transport mode应用场景分析:

transport mode的封装格式如下
                    公网IP头----ESP----Data----ESP Trailer----ESP Auth
        由于transport mode公网头部之后没有封装感兴趣流的IP头部,所以当该数据包到USG在入接口解封装后,数据包将不能路由,只能交给本设备的上层模块处理。若本设备没有对应的上层模块,该数据包将被丢弃。
        因此必须要保证数据包在解密之后能被上层模块感知到,一般地,该情形为感兴趣流的通信设备和加密该感兴趣的设备必须为同一设备。即通信点和加密点要一致。
        xxx over IPSec这样的场景,若要使用transport mode必须满足xxx和IPSec在同一台设备上,而该场景可以看出LNS端L2TP和IPSec在同一设备。Client端由于采用的是软件拨号,同样也保证了L2TP和IPSec在同一设备。所以建议L2TP over IPSec若L2TP和IPSec在同一设备上实施,采用transport mode来避免以上拨号异常问题。

END