网站首页  词典首页

请输入您要查询的论文:

 

标题 Android移动网络终端的IPv6接入系统设计与实现
范文

    周浩++赵钦++马严

    

    

    

    摘 要:针对目前国内3G/4G用户无法接入IPv6网络的问题,本文设计并实现了一种面向Android平台的IPv6接入系统。该系统使用隧道技术,将移动端的IPv6流量封装进IPv4数据包中,并通过隧道传输至IPv6接入服务器,由IPv6接入服务器解封装后转发至IPv6网络,进而实现移动终端的IPv6接入能力。该系统利用第三方互联网帐号进行接入认证,具备一定的适用性和简易性。通过部署测试发现,该系统可以方便有效地解决移动互联网用户接入IPv6的问题。

    关键词:软件工程;IPv6接入系统;设计与实现;Android;OpenVPN;

    中图分类号:TP311.1

    文献标识码:A

    DOI: 10.3969/j.issn.1003-6970.2015.11.016

    0 引言

    如今,世界各地的高校、运营商以及部分商业公司已经开始了IPv6的商业化进程。诸如Google,YouTube,百度,阿里巴巴等互联网企业均已经提供了IPv6服务让用户访问。此外,六维空间,晨光BT等一大批IPv6站点开始走向用户生活,受到越来越多的用户的关注和追捧。

    然而,目前国内的IPv6网络建设仍处于一个初级阶段,IPv6接入能力主要集中在面向教育网内的高校。对于普通的移动网络用户而言,运营商仅仅向其提供IPv4网络接入服务,这对习惯了获取IPv6资源的用户,特别是对于长期使用教育网的用户而言,是非常不便的。因此,为这些用户提供一种简单有效的从IPv4向IPv6的过渡技术就非常有价值。

    在目前常用的几种过渡技术中,隧道技术由于其对网络设备依赖性低,具备适用性广和简单易用等特点,受到不少用户和研究人员的青睐。本文基于OpenVPN隧道技术,设计并实现了一套针对Android平台移动终端的IPv6接入系统。

    1 系统原理

    OpenVPN是一个开放源码的基于SSL的隧道系统,具备良好的安全性和极佳的跨平台性,是实现隧道技术的一个理想方案。通过对OpenVPN以及Android系统的研究,本文提出了在移动网络环境下,面向Android设备的IPv6接入系统。其核心原理是借助OpenVPN创建Android终端与IPv6接入服务器之间的IPv4隧道连接,将Android终端产生的所有IPv6流量通过这条隧道引导到IPv6网络。同时,将IPv6网络中流向Android终端的返回数据从这条隧道传回至Android终端。OpenVPN的核心是虚拟网卡,在Android客户端创建隧道连接时,OpenVPN会在Android设备中创建名为tun的虚拟网卡,作为系统的默认IPv6出口,并通过套接字编程接口读写该虚拟网卡,对流经该网卡的数据包进行封装或解封装操作。

    其中,Android终端和IPv6接入服务器之间的数据交互流程如下所述,在本文,我们将Android客户端程序称为6in4程序:

    图1展示的是Android终端发送IPv6数据包的流程:

    l.Android APP使用IPv6协议访问IPv6资源,向协议栈提交一个IPv6数据包。

    2.Android系统协议栈将应用程序提交的IPv6数据包发送到虚拟的tun接口。

    3.6in4程序接着可以从tun接口读取该IPv6数据包,而后对其进行IPv4封装,再提交到系统协议栈。

    4.协议栈根据路由表将IPv4数据包从IPv4接口发送出去。

    图2展示的是IPv6接入服务器接收到Android端发来的数据后的处理流程:

    1.接入服务器的IPv4接口接收到封装了IPv6数据的IPv4数据包,并提交到系统协议栈。

    2.系统协议栈将数据包上传给OpenVPN服务端程序。

    3.OpenVPN服务端程序将IPv6数据从IPv4包从提取出来,并再次提交到系统协议栈。

    4.系统协议栈根据路由表规则将IPv6数据包从IPv6接口发送出去。

    图3展示的是IPv6接入服务器接收到外部设备发往Android终端的IPv6数据包时的处理流程:

    1.接入服务器的IPv6接口收到IPv6数据包,并提交到协议栈。

    2.协议栈根据路由规则将IPv6数据包转发到tun接口。

    3.OpenVPN服务端程序从tun接口读取IPv6数据包,并将其打包到IPv4数据包内,提交到系统协议栈。

    4.系统协议栈根据路由表规则将打包后的IPv4数据包从IPv4接口发出。

    图4是Android接收IPv6响应的处理流程:

    1.Android从网络接口接收到IPv4数据包,根据数据包内的IP地址信息,将该IPv4数据包转发6in4程序。

    2.6in4程序对数据包解封装,恢复成IPv6数据包,再将IPv6报文提交到协议栈。

    3.Android协议栈根据IPv6数据包的地址和端口信息,将数据包提交给应用程序。

    通过以上四个过程,实现了Android终端对IPv6资源的访问。

    2 系统设计

    2.1 系统设计

    通过对已有系统的研究和学习,本文将接入系统分五个功能模块,分别为IPv6接入模块,认证模块,API接口模块,数据库,Android端程序6in4,除客户端程序外,各个模块可以部署在单台或多台服务器上。这五个部分的组织结构关系如图5所示:

    其中,IPv6接入模块与Android终端之间建立IPv4隧道连接,通过该隧道为其提供IPv6接入功能。在建立隧道连接时,IPv6接入模块会对客户端进行身份验证,而验证过程则依赖认证服务器为其提供的验证接口。

    认证模块基于FreeRadius搭建,对IPv6接人模块提供身份验证接口,对API接口模块提供用户注册,查询接口。

    API接口模块面向Android客户端程序6in4,为其提供RESTful API支持,包括账号注册,接入服务器信息查询,日志上报,IPv6资源下发等功能。

    数据库中存储用户的账号信息,隧道连接信息,客户端上报的日志信息等数据,方便管理员了解整个系统的运行状况。

    2.2 客户端设计

    客户端程序适配Android 4.0及以上版本。这是因为Android在4.0版本提供了VPN的相关编程接口,使得第三方应用可以在未获取Root权限的情况下,也能实现VPN相关的功能。此外,客户端程序引入QQ和新浪微博账号,方便用户使用已有账号进行使用。客户端程序与服务端的交互流程如图6所示:

    3 系统实现与部署

    3.1 认证服务器的安装配置

    本系统中所有服务端程序都运行于CentOS 6.5版本系统。

    认证服务器基于FreeRadius搭建。可以通过包管理软件yum进行radius的安装,安装前需确认MySQL数据库已安装。FreeRadius的安装命令如下:

    $yum install -yfreeradius freeradius-mysql freeradius-utils

    安装完毕后,需要修改Radius的配置,使其使用MySQL数据库进行用户数据的存储。修改配置文件/etc/raddb/radius.conf,找到modules配置块,删除$INCLUDE sql.conf以及$INCLUDE sql/mysql/counter.conf前的“#”号,如下:

    修改/etc/raddb/sql.conf,配置成MySQL数据库的地址和账号和表名。

    3.2 OpenVPN安装以及Radius插件配置

    OpenVPN可以使用yum命令进行安装。

    $yum install openvpn -y

    OpenVPN的配置步骤中,比较重要的是CA证书的生成,可以借助easy-rsa工具,进入easy-rsa目录下后执行命令:

    $./clean-all #清除原有不需要的证书文件

    $./build-ca #生成证书

    创建服务端证书

    $./build-key-server server #这里指定服务端的证书名为server

    创建客户端证书

    $./build-key client #这里指定客户端的证书名为client

    $./build-dh #证书加密,dh指Diffie Hellman

    将以上步骤创建的证书都复制到/etc/openvpn/keys目录下

    之后编译Radius认证插件。可以从官网下载插件源代码,根据文档完成编译,生成radiusplugin.so二进制文件,并将此二进制文件以及配置文件复制到OpenVPN安装目录下

    编辑radiusplugin.cnf配置文件,修改其中的端口,IP等参数。

    修改OpenVPN的配置文件server.cnf,如下:

    在配置文件中指定OpenVPN程序以server的形态运行,使用的端口号为1194,以及IPv4和IPv6地址。push参数用于向客户端推送路由规则和DNS信息。plugin参数用于加载radiusplugin.so插件。log和status参数指定日志文件路径。keepalive参数指定隧道的保活时间。

    完成以上配置后,重启OpenVPN程序

    $ /etc/init.d/openvpn restart

    3.3 API接口服务器搭建

    API接口服务器使用Yii框架进行搭建,使用JSON格式数据与客户端进行数据通讯,并对用户名、密码等敏感数据进行RSA加密。

    3.4 Android客户端实现

    Android客户端基于开源项目ics-openvpn进行深度定制与开发,加入了QQ和新浪微博的账号登录,网络环境诊断功能,IPv6资源推荐,用户意见反馈,应用分享等功能,内置隧道链接配置文件,删除了对配置文件的修改功能。

    其中,QQ和新浪微博账号接入使用了ShareSDK进行整合,申请账号授权代码如下:

    此外,还需要在客户端提供OpenVPN客户端的配置文件,如下:

    Client

    dev tun

    remote<服务端IP地址><端口号>

    proto udp

    topology subnet

    resolv-retrv infinite

    nobind

    persist-key

    persist-tun

    auth-user-pass

    

    #此处填充具体的证书内容

    

    ns-cert-type server

    cipher AES-128-CBC

    comp-lzo

    route-method exe

    route-delay 2

    verb 3

    tun-ipv6

    以上配置文件指定了VPN服务端的IP地址,端口,认证方式,连接协议等信息。Android端程序将依据此配置与服务端建立隧道连接。

    4 系统测试

    测试使用的设备为Nexus 5,系统版本为Android5.1.1,关闭手机的WIFI网络,仅接入北京联通3G网络。

    初始的IPv4路由表如下:

    IPv6路由表为空如下:

    访问IPv4地址情况如下:

    访问IPv6地址情况如下:

    显示网络不可达,因为北京地区的联通3G网络未提供IPv6接入能力。

    打开Android客户端程序并建立隧道连接后,IP地址分配情况:

    可见OpenVPN在Android终端内创建了名为tun的虚拟端口,其IP地址被设置为服务端指派的IP地址。

    再看IPv6路由表

    已将tun接口设置成默认的IPv6出口。

    访问IPv6站点情况:

    同时也不影响IPv4的访问

    在进过几轮的测试后,测试设备与IPv6站点间的Ping延时如下:

    从测试结果看,本系统可以为移动网络下的Android终端提供IPv6接入能力,但由于受限与隧道加解密处理,以及IPv6接入服务器的出口带宽等物理因素,使得Android终端对IPv6资源的访问速度有所下降。但从手机浏览器访问IPv6网站的用户体验而言,依然处于一个可用的水平。

    目前,客户端软件已经在百度应用市场和腾讯应用宝上架,截止2015年10月底,已经有近1000次装机量和500名左右注册用户,隧道连接的创建次数已经超过了12000次。

    5 总结

    本文针对目前移动设备在3G/4G等移动网络下无法接入IPv6网络的问题,提出并实现了一种简单、有效的IPv6接入系统。通过隧道的方式将用户的IPv6流量封装进IPv4数据包中,实现IPv6 over IPv4网络的设计思路,并采用手机APP的形式,为用户屏蔽了复杂的隧道配置过程和参数管理。同时,采用QQ,新浪微博等国内用户常用的互联网账号进行接入认证,更是降低了用户的使用门槛。目前,Android4.0版本已经占据了95%以上的份额,因此该方案也具备较广泛的适用性,对iOS平台下的实现方案也有很大的借鉴意义。

    然而,受限于IPv4带宽,终端的IPv6接入速度和接入质量相对于双栈接入的用户而言,有一定的下降,这个问题可以通过改善终端与IPv6接入服务器之间的线路质量,降低隧道的数据处理开销,引入IPv6接入服务器集群,增加接入服务器的IPv4带宽资源等方法进行解决。

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/2/11 3:35:01