陈泓 黄东文 叶小艳 张芒
摘 要:文章研究一种跨域VPN互联方案并设计一个开放平台,让使用者用按需充值的方式使用VPN服务,为小微企业提供低成本的VPN方案。该平台在开源的OpenVPN平台基础上研发完成,由企业客户端、个人客户端、代理服务端和系统管理工具等四个部分组成,采用了虚拟网卡、虚拟网桥、隧道技术,并采用数据库技术实现系统管理功能。
关键词:VPN;虚拟网卡;虚拟网桥;隧道协议;OpenVPN
中图分类号:TP311 文献标识码:A 文章编号:1006-8937(2015)06-0059-03
VPN(Virtual Private Network,虚拟专用网络)是指利用密码技术和访问控制技术在公共网络(如Internet)中建立的专用通信网络。
本文以开源OpenVPN项目为基础,研究在互联网上部署一个开放的平台,提供跨域的VPN互联服务,让使用者用按需充值的方式使用VPN服务,为小微企业提供低成本的VPN方案。
1 工作基础
本文的研究基础是单域VPN代理机制与OpenVPN。
1.1 单域VPN代理机制
单域VPN代理是常见的VPN方案。每一个需要接受外部访问的企业网络,都在网络边缘部署一个VPN网关,这需要购买独立的设备,有一定的成本负担。
大公司的VPN的使用频率高,投入较高的成本购买VPN硬件服务器或者租用ISP提供的VPN服务是物有所值。但是小微企业对VPN的使用是偶发的,而且VPN访问的资源通常是企业网络内部的某台主机(如数据库服务器或Web服务器)而不是整个网络,因而投入专项资金去部署VPN网关成本上不合算,故希望有低成本的解决方案。
1.2 OpenVPN
OpenVPN是一个开源VPN项目,能在Linux、xBSD与Windows 2000/XP上运行,其核心技术是虚拟设备,包括虚拟网卡和虚拟网桥。
虚拟网卡是使用网络底层编程技术实现的一种驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡:如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据;如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多操作系统下都有相应的实现,这也是OpenVPN能够跨平台一个很重要的理由。
在OpenVPN中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包发送到虚拟网卡上,服务程序接收该数据并进行相应处理后,通过物理网卡从外网上发送出去,远程服务程序通过物理网卡从外网上接收数据,并作相应处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程。反之亦然。
虚拟网桥存在于VPN服务器端,表现为使用软件模拟一个真实的以太网交换机。它的作用是把一个以太网络接口和一个或多个虚拟网卡桥接在一个网桥接口上,就像它们在一个以太网子网内。其最重要的作用有两点:
①MAC学习。像交换机一样建立MAC地址-端口的对照表。
②报文转发。每发送一个数据包,网桥都会提取其目的MAC地址,从自己的地址-端口对照表中查找由哪个端口把数据包发送出去,使数据到达对应的虚拟网卡。
OpenVPN只提供了核心功能的支持。在实际应用中,需要进行一些修改和定制开发,方可满足具体需求,并提供辅助功能。
2 跨域VPN代理平台架构与工作机制
描述了跨域VPN代理平台的架构和工作机制如图1所示。图1中有三个关键实体:企业内部网络A中的FTP资料服务器、中间网络C中的VPN代理服务器、外地局域网B中的PC。图1中的虚线部分表示虚拟连接,一次VPN访问经过了三个不同的局域网,对于不同的外地PC和不同的公司局域网,都由同一代理服务器作为中继,体现跨域互联的特点。
2.1 平台架构
平台由三个逻辑部件构成:企业客户端(部署在资料服务器上)、个人客户端(部署在外地PC上)和代理服务端(含管理工具,部署在代理服务器上)。
企业客户端的主功能是为资料服务器申请VPN接入服务,个人客户端的主功能是登录VPN代理服务器,代理服务端的主功能是提供VPN代理服务并管理用户权限、流量、日志。
在使用VPN时,首先在资料服务器上调用企业客户端向VPN代理服务器发起注册,获得一个C网的IP地址,并保持连接,然后在外地PC上调用个人客户端登录VPN,也获得一個C网的IP地址,经过这两步建立起一个虚拟通道,使外地PC访问资料服务器。
2.2 工作机制
假设网络C的内部网段地址是10.0.0.0/8,资料服务器经过注册,得到了一个IP地址10.0.0.234。
下面从数据在三个逻辑部件中的流转过程来说明该平台的工作机制。
2.2.1 个人客户端上
PC构造出一个数据包,目标是10.0.0.234,数据包发送到虚拟网卡,用隧道协议对数据包进行封装,目标是VPN代理服务器,数据包通过物理网卡发到VPN服务器。
2.2.2 VPN代理服务器上
物理网卡接收到数据包,用隧道协议对其拆封得到原始数据包,目标是10.0.0.234,守护进程查询得到其对应的虚拟网卡MAC地址,通过虚拟网桥转发到虚拟网卡,虚拟网卡上用隧道协议封装,目标是资源服务器,物理网卡将数据包发到资料服务器。
2.2.3 资料服务器上
物理网卡接收到数据包,经过TCP/IP传送到VPN进程上,VPN进程用隧道协议解包,并将数据包再次传入TCP/IP协议栈,TCP/IP协议栈将其数据包发到对应的应用进程。
3 平台设计
以下从VPN代理服务器、企业客户端、个人客户端、系统管理工具四个软件组建来说明平台的设计方法。所示图片是测试期产生的实际效果图。
3.1 VPN代理服务器
服务器系统将运行Centos6.4平台上,主要开发语言为c语言,辅助语言为python。含核心模块ppp/bridge+pptp和辅助模块:cloud+deduction+backpwd。
ppp/bridge是本系统的驱动部分,扮演着VPN数据传输介质的作用。
PPP扮演虚拟网卡的角色,用来接收来自TCP/IP协议栈的网络分包并发送或者反过来将接收到的网络分包传给协议栈处理以及将网络分包在内核与用户态之间传送,模拟物理链路的数据接收和发送;Bridge用来存储CHM表,CHM记录着拨号上来的客户端的详细信息。Bridge扮演着交换机角色,主要对接收的数据包进行封装处理以及对数据进行相应转发。
pptp是一个协议模块,在有了驱动模块基础上,该模块决定能否维持机器正常通讯,它提供了一个协议栈,用于封装和拆封数据包的VPN协议。
cloud用于响应客户端更新私有云表。
deduction用于月结扣费。
mailpwd用于密码忘记的邮件模块。
3.2 企业客户端
部署在window平台,采用C#进行开发。主功能是为资料服务器申请VPN接入服务。
进入企业客户端后,出现企业业务主界面,单击“加入企业私有云”按钮,出现相应界面,如图2所示。
填寫角色类型、提供服务、和访问密码;提交成功后,VPN代理服务器上为资料服务器生成一个网络C的地址,如图3所示。
新增加的FTP服务器在VPN代理服务器上获得了一个IP地址“10.0.0.234”,以后外地主机通过访问该主机地址来访问资料服务器。
3.3 个人客户端
部署在window平台,采用C#进行开发,主功能是登录VPN代理服务器,还提供充值等辅助功能。选择一个代理服务器,输入密码,进行连接,如图4所示。
成功后,PC上将形成一个虚拟网卡,其IP地址是网络C的一个地址。借助虚拟网卡,外地PC就可以像访问同一个局域网中主机一样访问企业内部网络的资料服务器了。
3.4 VPN服务器管理工具
管理工具部署在Window平台,采用C#进行开发,管理用户权限、流量、日志,如图5、图6所示。
包括radius、radius-mysql、mysql等模块。
radius模块主要用来验证用户信息,防止权限滥用;
其次用来流量限制、时间限制、用户人数登录限制、日志记录、设置计费频率。
radius-mysql模块可以把数据都放到mysql里面进行集中管理。这个模块主要功能是radius与mysql一个对接模块,将radius的所有信息记录在mysql里面。mysql模块是数据库部分。
4 结 语
本文源于广东省大学生创新创业项目,所研究的VPN平台,经过线上测试,在企业服务代理、游戏加速等应用上都有一定的使用价值。下一阶段是考虑租用公用云来推广,为更多的小微企业提供服务。为了达到这一目标,在安全性、性能、使用体验等方面还要继续改进,相关的研究将会继续开展下去。
参考文献:
[1] 刘建军.小微型企业信息化建设分析[J].科技情报开发与经济,2013,(1).
[2] 任志敏,黄国策,曹鹏.短波IP网络中IP代理的设计与实现[J].信息技术,2009,(4).
[3] 程思,程家兴.VPN中的隧道技术研究[J].计算机技术与发展,2010,(2).