• 文章搜索:
  • 唯快不破

        • 分享到...

        • 新浪微博
        • 腾讯微博
        • 推荐到豆瓣 豆瓣空间
        • 分享到搜狐微博 搜狐微博
        • 分享到QQ空间 QQ空间
        • 分享到腾讯朋友 腾讯朋友
        • 网易微博分享 网易微博
        • 添加到百度搜藏 百度搜藏
        • 转贴到开心网 开心网
        • 转发好友 告诉聊友
    • 推荐
    • 打印
    • 收藏

    赏善罚恶令出邀侠客,IOS安卓穿NAT建隧道

    作者:  |  上传时间:2014-11-26  |  关键字:赏善罚恶令出邀侠客,IOS安卓穿NAT建隧道

    一、前言:

    赏善罚恶令出邀请江湖名宿去侠客岛品尝腊八粥,不去者则死。几十年以来,不知多少武林高手丧生在赏善罚恶使的掌下,而去了侠客岛的江湖高手,无论身手有多不凡,竟然一人也没有再回来,就连武当与少林两大派的掌门竟也被迫“请”上了侠客岛,江湖因此动荡不安。而移动互联江湖中,IOS安卓设备作为移动设备霸主游历其中,穿NAT建立L2TP over IPSEC隧道功能同样是让各IT宗门绞尽脑汁,下面我们就来看看MSR G2是如何修炼的。

    二、组网:

    图 1

    手机(iPhone或者安卓)通过无线接入MSR900中,MSR3020作为NAT设备存在MSR900和MSR2630之间。手机通过设置L2TP over IPsec VPN连接和MSR2630相连,可以访问到MSR2630内部的网络,这里在MSR2630上创建loopback接口100.1.1.1模拟内网。

    三、问题描述:

    iPhone或者安卓设备拨VPN后提示“L2TP-VPN服务器未响应。请重试连接。如果问题继续存在,请验证您的设置并联系管理员”如图2所示,或者提示“VPN服务器并未响应”,如图3所示:

    图 2

    图 3

    四、过程分析:

    一般情况下手机通过L2TP over IPsec VPN拨入设备,会遇到无法拨入成功的问题,而手机上也都会有相应的信息提示,手机终端拨入L2TP over IPsec不成功的原因大致可以分为下几种情况:

    情况一:网络不通

    接入设备和LNS不通,如图中的MSR900和LNS设备MSR2630网络不通,或者终端设备和LNS不通。

    图4

    情况二:配置错误

    这里的配置错误包括手机终端配置错误和LNS设备配置错误,二者有一方配置有误,均可导致VPN无法建立。

    情况三:手机终端不支持NAT-T检测,也就是不支持NAT穿越。

    这种情况需要在LNS侧抓包,查看手机终端发过来的第一个isakmp报文是否支持NAT-T协议,查看方式如下:

    1、抓包分析

    从抓包来看第一个报文为手机终端发上来的报文,在报文中可以看到携带了协商NAT-T的能力,如图5所示,在RFC 3947中规定标识NAT-T能力的vendor ID内容为“RFC 3947”的MD5 HASH运算值,具体运算后的结果十六进制表示为“4a131c81070358455c5728f20e95452f”,如果终端发过来的报文不带有vendor ID内容为“RFC 3947”或者带有vendor ID,但是MD5运算值不正确的,我司都视为不支持NAT穿越,那么ike的第一阶段的第五个和第六个报文依旧使用的500端口,而不是4500端口,将导致ike第一阶段协商不成功。

    图 5

    从抓包的第二报文可以看到,LNS回复的报文中携带了RFC 3947的内容,如图6所示:

    图 6

    2debugging分析

    通过debugging ike all查看,设备收到第一个报文后会有如下信息:

    //设备收到了一个ike报文,源端口为12288,目的端口为500

    <msr2630>*Mar 22 18:23:58:054 2014 msr2630 IKE/7/Packet: Received packet from 1.1.1.2 source port 12288 destination port 500.

    *Mar 22 18:23:58:054 2014 msr2630 IKE/7/Packet:

    I-Cookie: 5f905f84f4567073

    //R-Cookie为全零,表示这是IKE协商的第一个报文

    R-Cookie: 0000000000000000

    next payload: SA

    version: ISAKMP Version 1.0

    exchange mode: Main //使用主模式

    flags:

    message ID: 0

    length: 500

    //中间报文省略……

    //可以看到可以匹配到NAT-T能力

    *Mar 22 18:23:58:056 2014 msr2630 IKE/7/Event: Vendor ID NAT-T rfc3947 is matched.

    情况四:手机选用了野蛮模式,和V7设备不通

    手机上是可以设置野蛮模式还是主模式的,具体方法如下:

    iPhone:

    配置了群组名称后,iPhone发出的协商第一阶段报文就为野蛮模式

    图 7

    安卓:

    在VPN参数中如果配置了IPsec标识符,那么安卓发出的ike第一阶段协商模式为野蛮模式

    图 8

    手机终端使能野蛮模式后,发送上来的Peer_ID type为KEY_ID (11),而这种类型的Peer_ID我司设备是不支持的,导致ike协商失败,具体分析请见下方抓包和debugging内容:

    1、抓包分析:

    从抓包可以看出,手机终端使用野蛮模式的时候,LNS侧一直没有回包,打开报文分析,可以看到终端携带过来的ID_type类型为KEY_ID(11),而路由器上不支持这种ID_type

    图 9

    2debugging分析

    打开debugging ike all可以看到ike协商失败信息:

    //设备收到了一个ike报文,源端口为12288,目的端口为500

    *Mar 31 18:53:28:969 2014 msr2630 IKE/7/Packet: Received packet from 1.1.1.2 source port 12288 destination port 500.

    *Mar 31 18:53:28:969 2014 msr2630 IKE/7/Packet:

    I-Cookie: edaf059b4fc2a322

    //R-Cookie为全零,说明此报文为ike协商的第一个报文

    R-Cookie: 0000000000000000

    next payload: SA

    version: ISAKMP Version 1.0

    exchange mode: Aggressive //使用的为野蛮模式

    flags:

    message ID: 0

    length: 759

    //中间报文交互省略……

    *Mar 31 18:53:28:972 2014 msr2630 IKE/7/Packet: Process ID payload.

    //可以看到终端发过来的Peer_ID类型为KEY_ID,而这个类型我们不支持,导致IKE直接协商失败

    *Mar 31 18:53:28:972 2014 msr2630 IKE/7/Packet: Peer ID type: KEY_ID (11).

    *Mar 31 18:53:28:972 2014 msr2630 IKE/7/Error: Failed to negotiate IKE SA.

    3、对比分析

    将终端设备更换为MSR设备,然后再发起IPsec连接,观察MSR发过来的Peer_ID类型为FQDN,而这个类型我们是支持的,所以IKE协商可以通过,以下信息为和MSR设备对接时的debugging ike all的信息:

    *Mar 31 15:46:49:850 2014 msr2630 IKE/7/Packet:

    I-Cookie: 57c4f933a6eba3f0

    //R-Cookie为全零表示这是ike交互的第一个报文

    R-Cookie: 0000000000000000

    next payload: SA

    version: ISAKMP Version 1.0

    exchange mode: Aggressive //协商模式为野蛮模式

    flags:

    message ID: 0

    length: 267

    //中间报文省略…………

    *Mar 31 15:46:49:852 2014 msr2630 IKE/7/Packet: Process ID payload.

    //可以看到MSR发过来的Peer_ID类型为FQDN,值为123,可以正常匹配到相应的ike profile

    *Mar 31 15:46:49:852 2014 msr2630 IKE/7/Packet: Peer ID type: FQDN (2).

    *Mar 31 15:46:49:852 2014 msr2630 IKE/7/Packet: Peer ID value: FQDN 123.

    *Mar 31 15:46:49:852 2014 msr2630 IKE/7/Packet: The profile 1 is matched.

    *Mar 31 15:46:49:852 2014 msr2630 IKE/7/Packet: Process SA payload.

    情况五:设备不支持IKE的扩展认证方式

    手机发上来的IKE验证方式为XAUTHInitPreShared,即IKE的扩展认证方式,V7设备目前不支持此认证方式,iPhone和安卓均有可能遇到此问题。这种情况很少会遇到,这个和手机终端有关系,由于手机终端的ike验证方式无法手工指定,所以终端到底上送那种ike验证方式,这个就要通过debug来看了,如下为debugging ike all的信息。

    1、不成功的debugging信息

    *Mar 31 17:06:20:789 2014 msr2630 IKE/7/Packet:

    I-Cookie: 4926382311c8f326

    //R-Cookie为全零,说明这个是ike协商的第一个报文

    R-Cookie: 0000000000000000

    next payload: SA

    version: ISAKMP Version 1.0

    exchange mode: Main //使用的是主模式

    flags:

    message ID: 0

    length: 596

    //支持NAT-T能力

    *Mar 31 17:06:20:791 2014 msr2630 IKE/7/Event: Vendor ID NAT-T rfc3947 is matched.

    //接下来是匹配ike的安全提议,MSR默认的安全提议验证类型为pre-shark,也可以选择DSA和RSA数字签名方法

    *Mar 31 17:06:20:791 2014 msr2630 IKE/7/Packet: Process SA payload.

    *Mar 31 17:06:20:792 2014 msr2630 IKE/7/Packet: Check ISAKMP transform 1.

    *Mar 31 17:06:20:792 2014 msr2630 IKE/7/Packet: Lifetime type is 1.

    *Mar 31 17:06:20:792 2014 msr2630 IKE/7/Packet: Life duration is 3600.

    *Mar 31 17:06:20:792 2014 msr2630 IKE/7/Packet: Encryption algorithm is AES-CBC.

    *Mar 31 17:06:20:792 2014 msr2630 IKE/7/Packet: Key length is 256 bytes.

    //可以看到终端发上来的认证方法为扩展认证方式,即XAUTH,这种方式我司目前不支持

    *Mar 31 17:06:20:792 2014 msr2630 IKE/7/Packet: Authentication method is XAUTHInitPreShared.

    //IKE报错,原因为不支持的验证类型

    *Mar 31 17:06:20:792 2014 msr2630 IKE/7/Error: Unsupported authentication method: 65001.. Attribute AUTHENTICATION_METHOD.

    //终端会带上来很多的ike安全提议,这里不再一一例举,中间的ike安全提议省略……

    *Mar 31 17:06:20:796 2014 msr2630 IKE/7/Packet: Check ISAKMP transform 8.

    *Mar 31 17:06:20:796 2014 msr2630 IKE/7/Packet: Lifetime type is 1.

    *Mar 31 17:06:20:796 2014 msr2630 IKE/7/Packet: Life duration is 3600.

    *Mar 31 17:06:20:798 2014 msr2630 IKE/7/Packet: Encryption algorithm is DES-CBC.

    *Mar 31 17:06:20:798 2014 msr2630 IKE/7/Packet: Authentication method is XAUTHInitPreShared.

    *Mar 31 17:06:20:798 2014 msr2630 IKE/7/Error: Unsupported authentication method: 65001.. Attribute AUTHENTICATION_METHOD.

    *Mar 31 17:06:20:798 2014 msr2630 IKE/7/Error: No acceptable transform.

    *Mar 31 17:06:20:799 2014 msr2630 IKE/7/Error: Failed to parse the IKE SA payload.

    *Mar 31 17:06:20:799 2014 msr2630 IKE/7/Packet: Construct notification packet: NO_PROPOSAL_CHOSEN.

    2、可以成功的debugging信息:

    *Mar 31 17:08:34:776 2014 msr2630 IKE/7/Packet:

    I-Cookie: f8e3442a94926ec4

    R-Cookie: 0000000000000000

    next payload: SA

    version: ISAKMP Version 1.0

    exchange mode: Main

    flags:

    message ID: 0

    length: 500

    *Mar 31 17:08:34:778 2014 msr2630 IKE/7/Event: Vendor ID DPD is matched.

    *Mar 31 17:08:34:778 2014 msr2630 IKE/7/Event: Vendor ID NAT-T rfc3947 is matched.

    *Mar 31 17:08:34:778 2014 msr2630 IKE/7/Packet: Process SA payload.

    *Mar 31 17:08:34:778 2014 msr2630 IKE/7/Packet: Check ISAKMP transform 1.

    *Mar 31 17:08:34:779 2014 msr2630 IKE/7/Packet: Lifetime type is 1.

    *Mar 31 17:08:34:779 2014 msr2630 IKE/7/Packet: Life duration is 3600.

    *Mar 31 17:08:34:779 2014 msr2630 IKE/7/Packet: Encryption algorithm is AES-CBC.

    *Mar 31 17:08:34:779 2014 msr2630 IKE/7/Packet: Key length is 256 bytes.

    //正常情况下收到的ike安全提议中的验证方式为Per-shark key方式

    *Mar 31 17:08:34:779 2014 msr2630 IKE/7/Packet: Authentication method is Pre-shared key.

    *Mar 31 17:08:34:779 2014 msr2630 IKE/7/Packet: HASH algorithm is HMAC-SHA1.

    *Mar 31 17:08:34:779 2014 msr2630 IKE/7/Packet: DH group is 2.

    五、解决方法:

    情况一解决方法:

    这种情况可以在LNS侧ping终端地址来确认一下网络是否有问题,如果LNS不可控,可以在终端上下载一些可以进行ping操作的app程序,在终端上做ping测试,例如ping lite软件,如果不通的话,请排查内网网络:

    图 10

    情况二解决方法:

    1、LNS侧请参考如下配置:

    //创建L2TP分配地址的地址池

    ip pool 1 20.1.1.1 20.1.1.10

    #

    //配置接收L2TP报文的虚模板

    interface Virtual-Template1

    ppp authentication-mode pap

    remote address pool 1 //引用pool 1

    ip address 20.1.1.254 255.255.255.0

    #

    //配置loopback 0口,模拟内网

    interface LoopBack0

    ip address 100.1.1.1 255.255.255.255

    #

    //在公网口下发IPsec策略

    interface GigabitEthernet0/0

    port link-mode route

    ip address 1.1.1.1 255.255.255.0

    ipsec apply policy 1

    #

    ip route-static 0.0.0.0 0 1.1.1.2

    #

    //在域下配置PPP验证为本地认证

    domain system

    authentication ppp local

    authorization ppp local

    accounting ppp local

    #

    //配置本地用户123,密码也为123,需要注意的是用户类型必须为network,默认类型为manange类型,此类型不支持PPP的服务类型

    local-user 123 class network

    password cipher $c$3$RSOEA3vKZ4i0JIkSeULQKwYjRE4+Vg==

    service-type ppp

    authorization-attribute user-role network-operator

    #

    //配置IPsec安全提议,由于无法预知终端发上来的IPsec安全提示使用哪种方式,所以要多配置一些不同的加密、认证类型组合

    ipsec transform-set 1

    encapsulation-mode transport

    esp encryption-algorithm aes-cbc-192

    esp authentication-algorithm sha1

    #

    ipsec transform-set 2

    encapsulation-mode transport

    esp encryption-algorithm aes-cbc-128

    esp authentication-algorithm sha1

    #

    ipsec transform-set 3

    encapsulation-mode transport

    esp encryption-algorithm aes-cbc-256

    esp authentication-algorithm sha1

    #

    ipsec transform-set 4

    encapsulation-mode transport

    esp encryption-algorithm des-cbc

    esp authentication-algorithm sha1

    #

    ipsec transform-set 5

    encapsulation-mode transport

    esp encryption-algorithm 3des-cbc

    esp authentication-algorithm sha1

    #

    //在IPsec模板下引用IPsec安全提议和ike-profile,在IPsec模板下最多可以引用6个安全提议

    ipsec policy-template 1 1

    transform-set 1 2 3 4 5

    ike-profile 1

    #

    ipsec policy 1 1 isakmp template 1

    #

    l2tp-group 1 mode lns

    allow l2tp virtual-template 1

    undo tunnel authentication

    #

    l2tp enable

    #

    //创建ike profile,需要注意此处的match remote为必配选项,如果不配置,则此profile无效,导致ike协商不通过,由于对端为拨号连接,所以此处匹配任意地址

    ike profile 1

    keychain 1

    match remote identity address 0.0.0.0 0.0.0.0

    proposal 1

    #

    //创建IKE安全提议

    ike proposal 1

    encryption-algorithm 3des-cbc

    dh group2

    authentication-algorithm md5

    #

    //创建ike keychain,由于对端为拨号连接,所以此处匹配任意地址

    ike keychain 1

    pre-shared-key address 0.0.0.0 0.0.0.0 key cipher $c$3$6XXIHVlyC1ttIXQVb6IMcF34Ide4MQ==#

    Return

    2、iPhone终端设置,以7.0.5系统为例:

    1)添加VPN配置,进入设置->通用->VPN界面,默认没有VPN配置,点击“添加VPN配置”选项,进入VPN配置界面,如图11所示,描述、服务器、账户为必填的选项,请根据实际内容填写,密码和密钥为可选项,此处填写的都是123,请按照实际情况填写,另外,“发送所有流量选项一定要勾选”。

    图 11

    2)在配置好L2TP界面后,对应的IPsec选项会自动被配置好,不需要再次手工设置,如图12所示:

    图 12

    3)选择刚刚配置好的VPN配置,然后开启VPN连接,当手机上方出现VPN字样的时候,说明VPN建立成功,如图13所示:

    图 13

    4)可使用Ping Lite等APP软件测试ping LNS内网地址,此处内网地址为100.1.1.1,可以ping通,如图14所示:

    图 14

    3、安卓手机设置方法:

    1)进入设置->更多->VPN->添加VPN网络,新建一个VPN配置,填写好所有参数,如图15所示:

    图 15

    其中L2TP密钥为隧道密码,如果没有配置隧道密码,则此项不用填写。

    2)配置好VPN参数后,会出现对应的选项,选择自己刚刚配置好的VPN配置,开始连接,如果连接成功,则会提示“已连接”字样,如图16所示:

    图 16

    情况三解决方法:

    请更换支持NAT穿越的手机终端或者APP软件。

    情况四解决方法:

    请不要在终端上开启野蛮模式。

    情况五解决方法:

    如果出现这种情况,请将VPN配置删除,重新配置,可能需要配置多次,这种情况取决于手机终端发起认证的时候使用的是扩展认证模式,还是普通的认证方式。