陈 洋,骆华杰,陈宇燕
(中国电子科技集团公司第三十研究所,四川 成都 610041)
VPN(Virtual Private Network)虚拟专有网络的关键技术包括数据加密技术、身份认证技术、隧道技术和密钥管理技术[1]。它的发展是为了解决企业或个人能够廉价且安全地利用公共网络构建“专有”网络进行通信的问题。根据VPN在网络协议的不同层次上的实现进行划分,可以将VPN分为链路层VPN、网络层VPN和传输层VPN[2]。目前,市场上企业级用户应用最广泛的是后两者,即IPsec VPN产品和SSL VPN产品。这两类产品在应用模式、关键技术等方面有共通之处,在网络适应性、产品性能等方面又存在差异。本文将对SSL VPN的基础知识进行介绍,并重点剖析和解决如何提升其性能表现,使产品更具市场竞争力。
SSL VPN网络通信双方使用的核心协议是SSL协议。SSL协议在TCP/IP协议栈中介于应用层与传输层之间,如图1所示[3]。SSL协议内部又分为两个子层,上层的握手协议实现通信双方的认证与密钥交换、通信参数协商;下层的记录协议作为承载层,在握手协议交互过程后,承载并传输用户数据。最新的SSL协议已演进为TLS1.2,可详阅RFC5246。
图1 SSL协议体系结构
SSL协议设计之初是为了保障Web应用的通信安全。客户端可以利用Web浏览器自带的SSL功能和SSL VPN网关建立起SSL加密通道,在通过数字证书对用户信息进行认证后,SSL VPN网关将客户端加密的请求进行解释后,转发给相关的服务器进行通信。因此,SSL VPN被广泛应用于网上银行、邮箱等互联网服务中[4]。这种VPN隧道的建立无需安装客户端软件。由于基于TCP协议天然具有穿越防火墙、地址转换设备的能力,特别适用于移动接入。
对于一些企业应用如FTP,由于可以内嵌于浏览器,由Web页面呈现、由HTTPS协议承载,自然而然地得到了SSL VPN提供的安全传输保护。
如果是企业的非Web应用需要SSL VPN提供安全保障,则需要在用户端设备运行一个客户端小程序,实现对被保护应用的TCP或UDP端口监听,代被保护应用建立SSL隧道,并封装转发应用数据给SSL服务器端[5]。
以上三种应用场景的SSL VPN称作代理型SSL VPN,特点为承载的用户数据为应用层数据,对特定端口的数据截获,并通过SSL隧道传输。通信双方通常以客户/服务器非对等方式交互,并对客户端并发数的支持性要求较高。
随着SSL VPN产品在通信双方均引入隧道技术,出现了隧道型SSL VPN。特点是可以根据策略抓取用户设备或用户网络的IP包,由SSL隧道承载发送,使其支持网络到网络的保护。这种应用场景下,通信双方对等,均需部署SSL VPN设备,称之为隧道型SSL VPN网关。如果说IPsec VPN的通信原理是IP over IP,那么隧道型SSL VPN的通信原理就是IP over TCP。
隧道型SSL VPN网关设备主要用于保护用户子网或主机。部署时,隧道型SSL VPN网关设备串接在被保护网络出口与路由器(IP网关)之间,如图2所示。SSL VPN网关配置为与用户子网同网段IP,缺省网关IP地址配置为路由器IP地址,无需改变用户网络拓扑与既有配置。如果将SSL VPN网关之间建立一条SSL隧道,配置策略为保护子网,那么子网A与子网B之间的IP包会被网关提取到应用层,封装为SSL记录协议的净荷传送到对端再解封装转发给对端子网,完成安全通信。
图2 网关-网关应用场景
通过查阅大量技术文献和产品资料,隧道型SSL VPN大都基于虚拟网卡技术实现[1]。隧道型SSL VPN网关设备普遍以嵌入式Linux作为软件平台,内部体系结构如图3所示。配置管理模块提供用户界面,包含设备网络参数配置、状态查看、策略增删启停等功能。VPN通信协议模块实现SSL协议,根据配置管理单元下发的策略启停SSL隧道。安全服务模块提供SSL握手协议及记录协议相关的算法支持。虚拟网卡驱动提供内核态用户数据的提取发送,以及与用户态VPN通信协议模块间的数据传递。
图3 设备内部体系结构
厂商根据产品功用及性能需求,有的直接利用OpenSSL开源软件实现VPN通信协议模块和安全服务模块。OpenSSL是志愿者共同开发的一个健壮的、商业级别的、自包含的安全开发包,实现了SSL/TLS协议和一个功能完整的加密库[6]。它的硬件引擎规范了接口,方便厂商自己实现各种软硬算法。厂商也可以利用Linux自带的TUN/TAP驱动实现虚拟网卡模块,TAP设备指明与协议栈交互的是来自以太网的数据包,TUN设备指明交互的是一个类似点到点设备的数据包。就隧道型SSL VPN网关而言,创建虚拟网卡使用TUN或TAP驱动没有本质区别,虚拟网卡与用户态交互的都是以太网帧。
隧道型SSL VPN设备主要提供网络到网络的传输安全保护,采用网关对网关的部署方式,弱化了对SSL隧道并发连接数性能的需求,更强调了单SSL隧道的业务处理转发能力。相对于其他层VPN设备,隧道型SSL VPN两端设备要将业务数据两次从内核态提取到用户态封装解封装。市场上SSL VPN产品,以深信服VPN系列产品为例,SSL隧道吞吐率普遍不到千兆电口带宽的30%。
从硬件架构方面提升单SSL隧道处理能力,需选用高性能处理器平台,用硬件方式实现安全服务单元功能等。从软件架构方面看,调整空间相对局促。
虚拟网卡与VPN通信协议模块间以字符设备读写read/write的方式进行业务数据(以太网帧)的交互。内外网双向,一包业务数据就会触发一次read或write调用,造成用户态与内核态的一次通信交互。经分析,作者提出软硬件架构均不变,将一帧一读写的方式改造为多帧拼接再读写的方式。VPN通信协议模块与虚拟网卡交互的数据直接映射到记录协议的净荷。改造前SSL记录协议承载的业务数据净荷和改造后业务数据净荷协议格式对比,如图4所示。
图4 记录协议承载单帧与多帧对比
一次交互数据改为多帧拼接方式后,能保障在传输业务数据总量不变的前提下,成倍地减少内核态与用户态的数据读写频次。用户态VPN通信协议模块还能够充分利用SSL记录协议分段长度最大16 kB的承载能力。一次记录协议的socket收发,便可直接承载多帧拼接的业务数据。
以Linux内核源码2.6.33.4版本自带的通用TUN/TAP设备驱动源文件drivers/net/tun.c(版本1.6)为例。该驱动在机制上已经实现了以太网帧在内核态以Skb结构体形式与用户态字符缓冲区形式之间的转换与传递。要实现以太网帧的拼接与解拼接处理,需改造几个重点函数。用户态向内核态虚拟网卡驱动发送包,称下行方向,需改造tun_get_user函数,实现解拼接。从内核态向用户态发送数据包,称上行方向,需改造tun_chr_aio_read函数,实现拼接。数据处理流程如图5所示。
如果将原数据驱动的算法形象地称之为“上车即走,一人也走”,那么新算法可以称为“上车即走,即拼即走”。这样既保障了人少时能及时发车,又能保障人多时每趟车都尽量坐满,运能利用极大提升。
记录协议一次可以承载最多16 kB的业务数据,按照以太网帧最大1 500 kB计算,理论上一次可以拼接10帧。将2台测试用网关设备对连,建立一条明通隧道,使用飞秋传递大文件观察拼接帧数与千兆网口传输吞吐率的关系,结果如表1所示。
图5 改造后的下行和上行数据处理流程
表1 拼接帧数与千兆网口传输吞吐率的关系
可以得出结论,相同软硬件架构下,经过改造的虚拟网卡,拼接多帧方式比单帧方式吞吐率明显成倍提升。超过一定拼接数后达到极限,可能是其他因素导致了新的瓶颈显现,影响了性能的进一步提升,有待进一步研究。
由于SSL记录协议并未定义承载业务数据的封装格式[1],给了各厂商较大的自由度来实现业务数据封装。本文提出的隧道型SSL VNP网关设备性能提升方法,对既有实现的改造代价较小。同厂商设备由于记录协议业务数据的封装遵从相同自定义格式,对通道性能提升明显。但是,正是这种自定义方式的改造,在跨厂商设备互通方面则不具备优势,有待进一步观察SSL协议的发展。其他方面,考虑到用户可接受的成本与安全需求,隧道型SSL VPN设备还可以考虑集成防火墙包过滤功能、双机热备功能、多机负载均衡等功能,但会极大地增加设备软硬件复杂度,对性能的瓶颈分析和提升会是更复杂的研究课题。
参考文献:
[1] 刘洪强.基于SSL协议的VPN技术研究与实现[D].济南:山东大学,2008.LIU Hong-qiang.Research and Implementation of SSL-based VPN[D].Jinan:Shandong University,2008.
[2] 梁钧.基于SSL协议的VPN关键技术的分析与设计[D].昆明:云南大学,2010.LIANG Jun. Study and Design on SSL-based VPN Key Technology[D].Kunming:Yunnan University,2010.
[3] 王厚涛.SSL VPN安全技术研究及改进[D].北京:北京邮电大学,2011.WANG Hou-tao.The SSL VPN Security Technology Research and Improvement[D].Beijing:BeiJing University of Posts and Telecommunications,2011.
[4] 池卓轩.VPN技术在企业应用中的研究[D].广州:华南理工大学,2010.CHI Zhuo-xuan.The Study of VPN Technology in Enterprise Applications[D].Guangzhou:South China University of Technology,2010.
[5] 杨文凯.SSLVPN安全关键技术研究[D].成都:西南交通大学,2010.YANG Wen-kai.Research on Security Key Technology of SSL VPN[D].Chengdu:Southwest Jiaotong University,2010.
[6] 王玮,龙毅宏,唐志红等.OpenSSL引擎机制的研究[J].通信技术,2011,44(10):63.WANG Wei,LONG Yi-hong,TANG Zhi-hong,et al.Study on OpenSSL Engine Mechanism[J].Communication Technologies,2011,44(10):63.