「防火墙技术连载22」L2TPClient-Initiated虚拟专用网络

这是我多年以前学习的防火墙的时候学到的文章,是华为官方强叔的分享,文章由浅入深,非常适合初学者,我学习了之后受益匪浅,现在整理一下分享给头条的伙伴们,希望对IT技术感兴趣的初学者朋友们可以从中有所收获。

正文如下:

现在大家普遍对PC、PAD或手机上的各种客户端不太陌生了,最常见的是PPPoE客户端,其次是虚拟专用网络客户端。虚拟专用网络客户端的作用就是帮助用户在PC或PAD或手机上触发建立一条直通公司总部网络的隧道,实现用户自由访问总部网络的意愿。当然用户能轻松进入隧道也必须可以自由离开隧道??切换到直接访问Internet,这有点像是掌握了通往地球(总部网络)的“虫洞”入口的都教授可以瞬间自由往来于两个遥远的星球,当然也可乘坐星际飞行器在宇宙中漫游(Internet)。无论是在现实社会还是在虚拟网络世界,幸福生活似乎只有在消除了时空距离后方能体会,强叔用真实体验告诉大家Client-Initiated 虚拟专用网络可以助您轻松过上都教授的幸福生活。

都教授要借助L2TP客户端穿越“虫洞”进入公司网络,必然要先通过“门神”LNS的身份检查(检查手段毫不含糊,用户名称、密码、主机名称、隧道验证应有尽有)。LNS为通过验证的用户发放特别通行证(公司内网IP地址),对试图混入的人说bye-bye。Client-Initiated 虚拟专用网络配置中体现的就这样一个简单的思路(本例仅给出本地认证配置):

VT接口大家感觉比较陌生吧?它是用于二层协议通信的逻辑接口,比如PPP和L2TP协议通信、PPP和Ethernet协议通信,都会用到它,所以在L2TP 虚拟专用网络中要开启VT接口所在安全区域跟L2TP物理接口所在安全区域之间的包过滤,保证PPP和L2TP协议通信畅通无阻。 思想是神经元活动的结果,配置最终体现到一系列的消息交互中。配置不太复杂,但消息交互可不太简单。为了让大家一目了然,并方便跟下期的NAS-Initiated 虚拟专用网络做对比,强叔画了一张简图,然后对着这张图对L2TP Client与LNS之间的消息交互进行深入剖析。

结合抓包情况来讲解一下Client-Initiated 虚拟专用网络建立的完整过程:

阶段1 建立L2TP隧道(控制连接):3条消息协商进入虫洞时机L2TP Client和LNS通过交互三条消息协商隧道ID、UDP端口(LNS用1701端口响应Client隧道建立请求)、主机名称、L2TP的版本、隧道验证(Client不支持隧道验证时LNS的隧道验证要关闭,例如WIN7操作系统)等参数。

仅给出隧道ID协商过程:

阶段2 建立L2TP会话:3条消息唤醒虫洞门神L2TP Client和LNS通过交互三条消息协商Session ID,建立L2TP会话。跟“门神”对上话了,才可能提交身份认证材料呀!

注:ZLB表示目前空闲,没有消息要发送。 Session ID协商过程:

阶段3 创建PPP连接:身份认证,发放特别通行证1. LCP协商。LCP协商是两个方向分开协商的,主要协商MRU大小。 说明:MRU 是PPP的数据链路层参数,类似以太网中的MTU。如果PPP链路一端设备发送的报文载荷大于对端的 MRU,这个报文在传送时就会被分片。

2. PPP验证。 验证方式包括CHAP、PAP、EAP(高端防火墙不支持),CHAP或PAP可以在本地认证、也可在AAA服务器上认证;EAP只能在AAA服务器上进行认证。EAP认证比较复杂,我们等到IPSec部分再详解,此处仅给出最常用的CHAP验证过程:

经典的三次握手过程:

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

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

这是很多人问过的问题,道理很简单,但却是大家干活时常犯的错误。 讲了半天domain的问题,大家会不会问划分domain有何意义?对于大企业来说,往往会按部门来划分多个domain, LNS(或AAA服务器)都支持根据domain给不同部门创建不同的地址池,也就是不同部门的网段可以通过地址池规划分开,这样方便后续部署不同的访问控制策略。 3. IPCP协商,成功后分配IP地址。 分配给Client的IP地址是10.21.80.2,后续交互的报文都是由10.21.80.2??Client的私网地址发出的。

看到这里大家会不会问VT接口地址、地址池地址和总部网络地址如何规划?注意以下两点即可: 首先,VT接口地址和地址池地址可以规划在同一网段,也可以不在同一网段。如果在同一网段,请将两者配置为不重叠的地址,即VT接口地址不能包含在地址池地址中。 其次,建议把地址池地址和总部网络地址规划为不同的网段。如果万不得已,将地址池地址和总部网络地址配置为同一网段后,则必须在LNS连接总部网络的接口上开启ARP代理功能,并且开启L2TP虚拟转发功能,保证LNS可以对总部网络服务器发出的ARP请求进行应答。 假设LNS连接总部网络的接口是GigabitEthernet1/1/16,开启ARP代理功能和L2TP虚拟转发功能的配置如下:

interface GigabitEthernet1/1/16  ip address 192.168.0.1 255.255.255.0   arp-proxy enable     //开启ARP代理功能  virtual-l2tpforward enable     //开启L2TP虚拟转发功能

总结一下Client-Initiated 虚拟专用网络的特点:

L2TP 虚拟专用网络跟GRE 虚拟专用网络有很大不同。GRE 虚拟专用网络没有隧道协商过程,是没有控制连接的隧道,是没有状态的隧道,所以也无法查看隧道、检查隧道状态。但L2TP 虚拟专用网络是有控制连接的隧道,可以查看到隧道和会话。(IPSec 虚拟专用网络表现的更好,后续再讲)对于Client-Initiated 虚拟专用网络来说Client和LNS之间存在一条L2TP隧道,隧道中只有一条L2TP会话,PPP连接就承载在此L2TP会话上。(这一点跟NAS-Initiated 虚拟专用网络不同,需要关注一下)

阶段4 数据封装传输:穿越虫洞,访问地球 想把都教授如何穿越虫洞的过程讲清楚很困难,但是把L2TP客户端的数据如何穿越L2TP隧道达到总部网络的过程讲清楚不太难,这就涉及到了L2TP数据报文的封装过程。这个过程跟GRE报文穿“马甲”脱“马甲”的过程很相似,不同的是马甲的样式有点变化:

说明:本例中是两个Client之间通信,所以私有IP地址为两个内网地址。

至此,L2TP Client可以畅通无阻访问总部网络了,就像都教授穿过虫洞回到温暖的家。但有一个疑问,Client发出的报文进入隧道到达总部服务器没有问题了,但从总部服务器到Client的回程报文是如何进入隧道返回Client的?我们似乎并没有配置什么路由将回程报文引导到隧道呀?查看LNS路由表,发现了一个有趣的现象:LNS为获得私网IP地址的Client自动下发了一条主机路由。

这条自动生成的主机路由协议类型为UNR(User Network Route),下一跳为Client本身的地址,出接口是InLoopBack0。这条路由就是LNS上虫洞的入口,指引去往Client的报文进入虫洞,回程报文就不愁找不到隧道入口了。看来在虫洞建立时,L2TP就已经为都教授的来去自如做好了充分准备,那还有什么可担心的呢? 上文我们只使用了一个Client来讲解,实际环境中会有多个Client同时穿过虫洞访问总部网络。如果Client已经不满足只访问总部网络,还想访问其他的Client,即Client之间实现相互访问,L2TP能做到吗?别忘了,LNS是连接多个虫洞的中转站,通过LNS来转发,两个Client之间也可以自如访问。当然,前提是双方要知道LNS为对方分配的IP地址。

Client-Initiated 虚拟专用网络的美妙之处强叔已经展示给各位了,下期强叔要为大家推出NAS-Initiated 虚拟专用网络,一种更强大的L2TP 虚拟专用网络。

上一篇:「防火墙技术连载21」L2TP 虚拟专用网络的诞生及演进

整理这些文章,一方面是分享给大家,另一方面也是自己可以复习一遍,希望有人能用得上。整理完了之后我会整理合辑放在主页栏目中,需要的可以查看。我还会持续更新更多IT相关知识,感兴趣的可以关注。