Realize NAT-PT based on Libnet and Libipq
WANG Jian, LIU Yan-heng, WEI Da, TIAN Da-xin, SUN Lei
(College of Computer Science and Technology, Jilin University, Changchun 130012, China;
Key Laboratory of Symbolic Computation and Knowledge Engineering of Ministry of Education, Jilin University, Changchun 130012, China)
Abstract: In order to solve the problem of IPv4 network communicating with IPv6 network, the NAT-PT was introduced. One method that realized NAT-PT based on Libnet as well as Libipq was put forward and implemented. Applications show that through this method IPv4 hosts and IPv6 hosts can freely communicate with each other.
Key words: IPv4; IPv6; NAT-PT
1 引言
随着Internet的发展,IPv4协议的缺陷表现得越发明显,两个最大的问题就是地址资源耗尽和骨干路由器路由表规模爆炸。下一代IP协议IPv6有效地解决了这些问题,它具有庞大的地址空间、支持流媒体和完善的安全机制等优点,IPv6必会取代IPv4,但这是一个漫长的过程,目前网络资源绝大部分存在于IPv4网络环境中,必须保证纯IPv6网络和现有的IPv4网络能够相互访问。
目前在IPv4网络中部署IPv6网络的基本技术主要有3种:双协议栈、隧道和网络地址翻译/协议翻译(NAT-PT)。IPv4网络和纯IPv6网络通信需要使用NAT-PT技术。针对NAT-PT的各种实现方法,国内外都做了大量工作[1-2],但多数实现比较复杂。本文提出了一种基于Libnet和Libipq实现NAT-PT的方法。
本文的结构如下:第2节,介绍了NAT-PT的思想以及工作原理;第3节,介绍了Libnet和Libipq;第4节给出本系统的框架;第5节,结论。
2 NAT-PT机制
NAT-PT[3]是一种地址和协议转换技术,用来解决IPv4网络和IPv6网络互通的问题,该机制包括两方面的内容:IPv4/IPv6地址映射(NAT)和对IPv4/IPv6分组进行语义翻译(PT),其主要思想是在IPv4节点与IPv6节点通信时,借助二者之间的NAT-PT服务器,把数据报的网络层报头做IPv4与IPv6间的转换,以适应对方网络的协议类型。NAT-PT机制的工作原理[4](设IPv4主机发起会话):
NAT_PT机制中至少有以下几个功能模块:
DNS-ALG:修改DNS请求和应答,以便IPv4网络中的节点和IPv6网络中的节点能够相互解析对端的地址。
Address-Mapping:完成的功能与传统IPv4网络中的NAT功能类似,建立和维护IP地址映射表。
Protocol-Translation:主要进行网络层协议报头的转换以及重新计算传输层协议(如果有)报头中的校验和。
它的通信过程如下:
1.IPv4主机发出查询主机名为A的IP地址的DNS请求,该请求被NAT-PT服务器获取;
2.DNS-ALG将请求修改,然后发给IPv6侧的DNS服务器;
3.DNS服务器应答A主机的IPv6地址;
4.NAT-PT服务器将该IPv6地址存入地址映射表中;
5.在自身维护的IPv4地址池中选择一个IPv4地址与原IPv6地址建立映射关系,并在地址映射表中记录这一映射关系,然后把选中的IPv4地址返回给DNS-ALG;
6.DNS-ALG将此IPv4地址应答发给请求的IPv4主机;
7.IPv4主机以此IP地址为目的地址进行通信;
8.NAT-PT服务器截获使用映射目的地址通信的IP分组,并在地址映射表中查找与目的IPv4地址关联的IPv6地址;
9.地址映射表返回目的主机的IPv6地址;
10.协议转换部分对IP分组进行协议转换,将IPv4报头转变成IPv6报头,重新计算传输层协议(如果有)报头中的校验和,将源地址修改为IPv4 映射地址(形式为0::ffff:a.b.c.d/96) ,目的地址改为目的主机的IPv6地址,并发送。
3 Libnet和Libipq
Libnet是一个小型的接口函数库,提供了低层网络数据报的构造、处理和发送功能。Libnet的开发目的是建立一个简单统一的网络编程接口以屏蔽不同操作系统低层网络编程的差别,使得程序员将精力集中在解决关键问题上。
NetFilter是linux2.4内核中实现数据包过滤、处理和NAT等功能的框架。Libipq是NetFilter框架的重要组成部分。任何时候在任何NetFilter规则链中,数据报都可以被排队转发到用户空间去。用户进程能对数据报进行任何处理。处理结束以后,用户进程可以将该数据报重新注入内核或者设置一个对数据报的目标动作。
4 系统框架
本系统由三个模块组成:Packet_Capture、IPv4 to IPv6和IPv6 to IPv4,各模块功能和流程如下:
Packet_Capture:该模块需要编译为内核可加载的模块,工作在内核空间,负责将符合要求的数据报复制到用户空间,由两个函数组成,分别注册到NetFilter框架下面的IPv4和IPv6的第一个钩子处(NF_IP_PRE_ROUTING和NF_IP6_PRE_ROUTING),这两个函数的功能类似,只是一个适用于IPv4,一个适用于IPv6。
IPv4 to IPv6:该模块工作在用户空间,利用Libipq函数库取得Packet_Capture截获的数据报,依据报头中的信息做出相应的处理,比如地址映射、报头变换、重新计算传输层校验和等并调用Libnet函数库将改变后的数据报发往网络的另一侧。
在进行协议转换的时候需要重新计算传输层协议(如果有)的校验和,在Libnet函数库中并没有为IPv6栈中的TCP校验和计算提供实现,需要自己计算校验和。具体的转换过程:以传输层使用TCP协议为例,调用libnet_build_data函数构造应用层数据,libnet_build_tcp_options构造TCP选项,libnet_build_tcp构造TCP协议头,libnet_build_ipv6构造IPv6协议头,libnet_write()发送数据报。
IPv6 to IPv4:该模块完成的功能与IPv6 to IPv4 恰好相反,把IPv6报头转换成IPv4报头,libnet函数库实现了IPv4栈中的TCP校验和的计算,所以使用libnet_build_tcp()构造TCP协议头时,传递的校验和参数可以为零,libnet函数库自动计算校验和。
5 结论
随着IPv6网络的普及,实现现有的IPv4网络和纯IPv6网络互通显得格外重要,NAT-PT作为一种实现IPv4网络和IPv6网络互通的技术得到了广泛重视。本文给出的实现方法具有以下优点:
第一,实现简单,编程量小,主要依靠流行的函数库实现;
第二,部署简便,可扩展性好;
第三,具有很好的工程应用价值。
注:基金项目
国家自然科学基金资助项目(60573128);下一代互联网示范工程研究开发、产业化及应用专项[2005]2137;公安部应用创新计划项目(2005YYCXJLST045)
参考文献:
[1] 刘雷,柴乔林.Netfilter功能框架下NAT-PT机制的实现.华中科技大学学报(自然科学版)[J]. 2003, 31(增刊): 34-37.
[2] 陈行, 吴强, 吴家皋. 基于Nat-Pt的应用层组播过渡方案[J]. 东南大学学报(自然科学版). 2006, 36(3): 483-487.
[3] Tsirtsis G, Srisuresh P. Network Address Translation-Protocol Tra nslation(NAT-PT) [S]. RFC 2766, [S.1.]: IETF, 2000.
[4] 李津生,洪佩琳. 下一代Internet网络技术[M]. 北京:人民邮电出版社,2001.
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。