强叔侃墙_第5章_GRE L2TP VPN_2

      说到L2TP VPN 必须先将镜头切到互联网发展初期,那个时代个人用户和企业用户大都通过电话线上网,当然企业分支机构和出差用户一般也通过“电话网络[学名PSTN/ISDN]“来接入总部网络。人们将这种基于PSTN/ISDN的VPN命名为VPDN(Virtual Private Dial Network),L2TP VPN是VPDN技术的一种,其他的VPDN技术已经逐步退出了历史舞台。

    如图5-19所示,在传统的基于PSTN/ISDN的L2TP中,运营商在PSTN/ISDN和IP网络之间部署LAC(在 VPDN里称为NAS,Network Access Serve),集中为多人企业用户提供L2TP VPN专线服务,配套提供认证和计费功能。当分支机构和出差员工拨打L2TP VPN专用接入号时,接入Modem通过PPP协议与LAS建立PPP会话,同时启动认证和计费。认证通过后LAC向LNS发起L2TP隧道和会话协商,企业总部的LNS出安全考虑再次认证接入用户身份,认证通过后分支机构和出差员工就可以访问总部网络了。

 说明 

LAC和LNS是L2TP协议里的概念,NAS是VPDN里的概念,在L2TP VPN中,LAC实际上就是NAS。

随着IP网络的普及,PSTN/ISDN网络逐渐退出数据数据通信领域。企业和个人用户都可能通过以太网直接接入Internet了,此时

L2TP也悄悄地向前“迈了两小步”---------看似只有两小步,但这两小步却让L2TP这个过气明星留在了风云变化的IP舞台上。现今L2TP VPN常用场景如图5-20所示,从图中我们可以看出L2TP VPN已经可以从容地行走在IP江湖了。

 

两小步之——PPP屈尊落户以太网。这是拨号网络向以太网演进过程中的必经之路,并非专门为L2TP VPN设计,但L2TP VPN确实是最大的受益者。分支机构用户安装PPPoE Client,在以太网上触发PPPoE拨号,在PPPoE Client和LAC(PPPoE Server)之间建立PPPoE会话。LAC和LNS之间的L2TP VPN  建立过程没有变化。

两小步之——L2TP 延伸到用户PC。这种场景下,PC可以通过系统自带的L2TP Client或第三方L2TP Client软件直接拨号与LNS建立L2TP VPN。L2TP Client或第三方L2TP Client软件直接拨号与LNS之间建立L2TP VPN。L2TP Client摒弃了LAC这位“掮客”跟总部直接建立合作关系,看来这种事情在哪里都会发生啊! 

这两种场景跟初始L2TP  VPN相比有一个共同特征就是:企业投资买设备,然后借用Internet 自建L2TP VPN。这样就可避开运营商对VPN专线的收费,减少了长期投资。为区分以上两种L2TP VPN,前者(基于LAC拨号的l2TP VPN)被称为NAS-Initiated VPN,后者(客户端直接拨号的L2TP VPN )被称为 Client-Initiated VPN。下面我们对这种L2TP VPN 进行详细介绍。

5.4 L2TP Client-Initiated VPn

现在大家普遍对PC、PAD或手机上的各种客户端不太陌生了,最深的是PPPoE客户端,就是大家常说的宽带上网客户端。其次是VPN客户端,这种客户端家庭用户不会使用,一般是企业为远程办公员提供的服务。这里我们主要介绍的是VPN 客户端中的一种,即L2TP VPN客户端。

L2TP VPN客户端的作用是帮助用户在PC、 PAD或手机上触发建立一条直通公司部网络的L2TP隧道,实现用户自由访问总部网络的目的,这有点像是掌握了通往地球(总部网络)的”虫洞“入口的都教授可以瞬间自由往来于两个遥远的星球。无论是在现实社会还是在虚拟网络世界,幸福生活似乎只有在消除了时空距离后方能体会,强叔用真实体验告诉大家Client-Iniiated VPN可以助您轻松过上都教授的幸福生活。

都教授要借助L2TP VPN 客户端穿越”虫洞“进入公司网络,必然要先通过”门神“LNS的身份检查(检查手段毫不含糊,用户名称,密码、主机名称、隧道验证应有尽有),LNS为通过检验证的用户发放特别通行证(公司内网IP地址),对试图混入的人说 bye-bye,Client-Initiated VPN 的消息交互中体现了这样一个简单的思想。为了让大这一目了然,并方便跟一节的NAS-Initated VPN进行对比,强叔画了一张简图,如图5-21所示,然后结合这张图对L2TP Client 与LNS之间的消息交互进行深入剖析。

 Client-Initiated VPN配置邵静5-3突出重点,L2TP Client、LNS、内网服务器之间都是直连,省去了路由配置。用户认证也采用了比较简单的本地认证。另外,内网服务器上要配置网关,保证回应给L2TP Client的报文能够发送到LNS。

表5-3 配置 Client-Initiaged VPN

配置项 L2TP Client (以VPN Client为例) LNS
配置L2TP

对端IP地址:1.1.1.1

登录用户(PPP用户)名:L2tpuser

登录用户(PPP)密码:Admin@123

隧道名称(可选):LNS

PPP认证模式(PAP/CHAP/EAP),有些客户端默认(CHAP):CHAP

隧道验证(可选,有些客户端不支持):不选中

前三项是必配内容,后三项可能会因客户端不同有所取舍

l2tp enable

interface Virtual-Template1

ppp authentication-mode chap

ip address 192.168.2.1 255.255.255.0

remote address pool 1

l2tp-group 1

undo tunnel authentication

allwo l2tp virtual-template 1 //指定VT接口

tunnel name LNS                  //本端隧道名称

配置AAA认证  

aaa

local-user l2tpuser password cipher Admin@123

                                   //本地用户名、密码

local-user l2tpuser service-type ppp

ip pool 1 192.168.2.2 192.168.2.100 //地址池

  大家对VT接口应该比较陌生吧?它是用于二层协议通信的逻辑接口,一般在PPPoE协议中使得。L2TP为了适应以太网环境跟PPPoE展开了合作,所以大家在这里会发现VT接口的身影。有关VT接口在Client-Initiatd VPN中的作用,窜强叔一点一点揭开。

下面强叔结合抓包情况来讲解一下Client-Initiataed VPN建立的完整过程。

5.4.1 建立L2TP隧道:3条消息协商进入虫洞时机

L2TP Client和LNS通过交互三条消息协商隧道ID、UDP端口(LNS用1701端口响应Client 隧道建立请求)、主机名称、L2TP的版本、隧道验证(Client不支持隧道验证时LNS的隧道验证功能要关闭,例如WIN7操作系统)等参数

表5-4 给出了隧道ID协商过程,帮助大家理解”协商“的含义。

步骤1

SCCRQ

L2TP Client:LNS兄,用2作为TunnelID跟我通信吧

步骤2

SCCRP

LNS:OK,L2TP Client,我用1作为TunnelID跟你通信

步骤3

SCCCN

L2TP Client:OK

5.4.2 阶段2 建立L2TP会话:3条消息唤醒虫洞门神

L2TP Client和LNS通过交互三条消息协商SessionID,建立L2TP 会话。只有先跟”门神“对上话了,才可能提交微分认证材料呀!

 表5-5给出了Session ID协商过程。

表5-5 Session ID协商过程

步骤1

ICRQ

L2TP Client:LNS兄,用1作为Session ID跟我通信吧

步骤2

ICRP

LNS:OK,L2TP Client:你用2作为Session ID跟我通信

步骤3

ICCN

L2TP Client :OK,我用Session ID 2与你通信

5.4.3 阶段3 创建PPP连接:身份认证,发放特别通行证

1.LCP协商

LCP协商是两个方向分开协商的,主要协商MRU大小。MRU是PPP的数据链路层参数,类似以太网中的MTU。如果PPP链路一端设备发送的报文载荷大于对端的MRU, 这个报文在传送时就会分片。

从图中可知,协商后的MRU值是1400。

2.PPP  验证

验证方式包括CHAP、PAP、EAP。CHAP或PAP可以在本地认证 ,也可以AAA服务器上认证;EAP只能在AAA服务器上进行认证。EAP认证比较复杂,而且不同型号的防火墙支持情况有差异,所以此处仅给出最常用的CHAP验证过程。

 表5-6 给出了经典的PPP三次握手的过程。

表5-6 PPP三次握手过程

步骤1 LNS:L2TP Client,发给你一个”挑战(Challenge)“,用它来加密你的密码吧
步骤2 L2TP Client:OK,把我的用户名和加密后的密码发给你,请验证
步骤3 LNS:验证通过,欢迎来到PPP的世界

LNS上配置的用户名和密码是用来验证Client的,当然要求”本人“和”签证“完全一致,即要求L2TP Client和LNS上配置的用户名和密码完全一致。这里讲解一下什么叫用户名完全一致。

如果在LNS上配置的签证为username(没有domain),则l2TP登录的用户名也要是username。

如果在LNS上配置的签证为fullname(username#default或username#domain),则L2TP Client登录的用户名也要是username@default或username@domain。

本例中LNS配置的用户名是l2tpuser,所以Client登录时务必要输入完全一致的用户名。这个道理很简单,但却是大家在配置时常犯的错误。

在AAA 认证中一定会用户”domain(认证域)“这个概念的,大家肯定会问用户名称后加上domain有何意义?

在大企业中,往往会把不同部门划分到不同domain中,然后在LNS上根据domain给不同部门创建不同的地址池,也就是说不同部门的网段可以通过地址池规划分开,这样方便后续针对不同部门部署不同的安全策略。

3.IPCP协商,成功后分配IP地址

LNS分配给L2TP Client 的IP地址是192.168.2.3。

 

看到这里大家应该明白了,LNS上地址池里就是用来给远端Client 分配IP地址用的。当然应该是私网地址,应该跟其他内网主机地址一样遵循内网IP地址规划原则。那么VT接口呢?其实VT接口也是内网接口,也应该遵循内网IP地址规划原则统一规划。IP地址规划总的原则如下。

 建议为VT口,地址池和总部网络地址分别规划独立的网段,三者的地址就要重叠。

如果地址池地址和总部网络地址配置为同一网段,则必须在LNS连接总部网络的接口上开启ARP代理功能,并且开启L2TP虚拟转发功能,保证LNS可以对内网服务器发出的ARP请求进行应答。

假设LNS连接总部网络的接口是GE0/0/1,开启ARP代理功能和L2TP虚拟转发功能的配置如下:

[LNS-GigabitEthernet0/0/1]arp-proxy enable
[LNS-GigabitEthernet0/0/1]virtual-l2tpforward enable 

看完PPP认证过程大家应该明白了,L2TP巧妙地利用了PPP的认证功用达到了自己认证远程接入用户的目的。是谁促成了这个合作项目的呢?就是VT接口。

[LNS]l2tp-group 1
[LNS-l2tp1]allow l2tp virtual-template 1

就是这条命令将L2TP与PPP联系了起来:VT接口管理PPP认证,L2TP模块又是VT接口的老板,二者的合作就这样实现了!VT接口只在L2TP和PPP之间起作用,是个无名英雄,不参与封装,也不需要对外发布,所以其IP地址配置成私网IP地址即可。

L2TP VPN跟GRE VPN 有很大不同。GRE VPN没有隧道协商过程,是没有控制连接状态的隧道,所以也无法查看隧道、检查隧道状态。但L2TP VPN是有控制连接的隧道,可以查看到隧道和会话。

如图5-22,对于Client-Initiated VPN来说,L2TP Clinet和LNS之间存在一条L2TP隧道,隧道只有一条L2TP 会话,PPP连接就承载在此L2TP会话上,这一点跟下一节要讲的NAS-Initiated VPN不同,需要关注一下。

5.4.4 阶段4 数据封装传输:穿越虫洞,访问地球

L2TP隧道建立后,L2TP Client的数据就呆以轻松地进出总部网络了。想把都教授如何穿越虫洞的过程讲清楚很困难,但是把L2TP Client的数据如何穿越L2TP隧道达到总部网络的过程讲清楚不太难,这就涉及了L2TP数据报文的封装过程。这个过程跟GRE报文穿“马甲”脱“马甲”的过程很相似,不同的是马甲的样式有点变化。

从上面的抓包信息中可以看出L2TP报文的封装结构,仔细分析一下可以得到Client-Initiated VPN 场景下,L2TP数据报文的封装/解封装过程,如图5-23所示。

L2TP Clientv 发往内网服务器的报文的转发过程如下。

(1) L2TP Client将原始报文用PPP头、L2TP头,UDP头,外层公网IP头层层封装,成为L2TP报文。外层公网IP头中的源地址是L2TP Client 公网IP地址,目的地址是LNS的公网接口IP地址。

(2)L2TP报文穿过Internet达到LNS。

(3)LNS收到报文后,在L2TP模块中完成了身份认证和报文的解封装,去掉PPP头、L2TP头、UDP头和外层IP头,还原为原始报文。

(4)原始报文只携带了内层私网IP头,内层私网IP头中的源地址是L2TP Client获取到的私网IP地址,目的地址是内网服务器的私网IP地址。LNS根据目的地址查找路由表,然后根据路由匹配结果转发报文。

至此,L2TP Client可以畅通无阻地访问总部的内网服务器了,但是还有一个问题,从总部的内网服务器到l2TP Client 的回程报文是如何进入隧道返回L2TP Client的,我们似乎并没有配置什么路由将回程报文引层到隧道呀?查看LNS上的路由表,发现了一个有趣的现象,LNS为获得私网IP地址的L2TP自动下发了一条主机路由。

[LNS]display ip routing-table 192.168.2.3
20:39:55  2018/09/06
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1

Destination/Mask    Proto  Pre  Cost     Flags NextHop         Interface

    192.168.2.3/32  Direct 0    0           D  192.168.2.3     Virtual-Template1
这条自动生成的主机路由属于UNR(User Network Route)路由,目的地址和下一跳为LNS 为L2TP Client分配的私网IP 地址,出接口是VT接口。这条路由就是LNS上虫洞入口,引导去往L2TP Client的报文进入隧道。疑问消除,内网服务器返回报文的转发过程也就不难理解了。

(1)LNS收到内网服务器发来的回程报文后,根据报文的目的地址( L2TP Client 的私网IP地址)查找路由,命中UNR路由,将回程报文发磅至VT接口

(2)回程报文在L2TP模块封装PPP头、L2TP头、UDP头和外层公网IP头。

(3)LNS根据报文外层公网IP头中的目的IP地址(L2TP Client的公网IP地址)查找路由表,然后根据路由匹配结果转发报文。

以上过程稍的点复杂,回程报文通过两次匹配路由表完成了返回L2TP Client 的旅程。

上文我们只使用了一个L2TP Client来讲解,实际环境中会有多个L2TP Client 同是穿过虫洞访问总网络。如果L2TP Client已经不满足只访问总部网络,还想访问其他的L2TP客户端,即L2TP之间实现相互访问,L2TP能做到吗?别记了,LNS是连接多个虫洞的中转站,它上面存在着到各个L2TP Client的主机路由。所以通过LNS来轩发,两个L2TP Client 之间可以自如访问,如图5-24所示。当然,互访的前提是双方要知道LNS为对方分配的IP地址。这个前提确实不太差容易获得,所以L2TP Client之间互访的场景也不常见。

5.5.4 安全策略配置思路

L2TP Client-Initiated VPN中安全策略的总体配置思路与GRE中安全策略的配置思路相同,只是把Tunnel 接口换成了VT接口而已。

如图5-25所示,我们假设在LNS上,G0/0/1接口连接总部私网,属于Trust区域;G0/0/2接口接口连接Internet,属于Untrust区域;VT接口属于DMZ区域。LNS为l2TP Client 分配的IP地址为192.168.2.2.

安全策略的配置过程如下。

(1) 我们先配置一个最宽泛的域间安全策略,以便调测L2TPVPN。

在LNS上将域间缺省包过滤的动作设置为permit 。

[LNS]firewall packet-filter default permit all

(2)配置好L2TP后,在L2TP Client 上ping内网服务器 ,然后查看会话表。

[LNS]display firewall session table verbose

从上述信息可知,L2TP Client 可以ping 通内网服务器,L2TP会话也正常创建。

(3)分析会话表得到精细化的安全策略的匹配条件。

从会话表中我们可以看到两流流,一条是untrust-->local之间的L2TP报文,一条是DMZ-->trust之间的ICMP报文,由些这们可以得到LNS上的报文走向,如图5-26所示。

由上图可知,LNS上需要配置DMZ区域-->Trust区域安全策略允许L2TP Client 访问内网服务器的报文通过,同时还需要配置Untrust区域-->Local区域的安全策略,允许L2TP Client与LNS建立L2TP隧道。

L2TP隧道建立后,内网服务器发送给L2TP Client的回程报文在LNS上的走向与L2TP Client访问内网服务器的报文走向相反,不再赘述。

综上所述,LNS上应该配置的安全策略匹配条件如表1所示,我们按照表中的匹配条件配置精确的安全策略。

表5-7 LNS的安全策略匹配条件

说明

该场景中,LNS只是被动接收L2TP Client建立隧道的请求,并不会主动向L2TP  Client 发起建立隧道的请求,所以在LNS上针对隧道只需要配置Untrus--->Local的安全策略。

可见,在Client-Initiated方式的L2TP VPN场景中,LNS上的VT接口必须加入安全区域中,而且VT接口所属的安全区域决定了报文在防火增内部的走向。如果VT接口属于Trust区域,那就不需要配置DMZ<-->的安全策略,但这样会带来安全风险。因些建议将VT接口加入到单独的安全区域,然后配置带有精确匹配条件的安全策略。

(4)最后,将缺省包过滤的动作改为deny。

[LNS]firesall packet-filter default deny all

猜你喜欢

转载自blog.csdn.net/tjjingpan/article/details/81636959