一、概述
新的IPv6网络的部署已经在全球范围内展开,在此过程中我们不可能立即放弃原有的已经成熟的IPv4网络。在将来很长一段时间之内,两种网络必然是共存的,我们现在需要考虑的就是我们如何能够平稳地从IPv4网络过渡到IPv6网络。
网络地址和协议转换(NAT-PT)就是我们的选择之一,它能够解决我们在过渡过程中所能碰到的一些问题。
二、NAT-PT介绍
NAT-PT是一种纯IPv6节点和IPv4节点间的互通方式,所有包括地址、协议在内的转换工作都由网络设备来完成。支持NAT-PT的网关路由器应具有IPv4地址池,在从IPv6向IPv4域中转发包时使用,地址池中的地址是用来转换IPv6报文中的源地址的。此外网关路由器需要DNS-ALG和FTP-ALG这两种常用的应用层网关的支持,在IPv6节点访问IPv4节点时发挥作用。如果没有DNS-ALG的支持,只能实现由IPv6节点发起的与IPv4节点之间的通信,反之则不行。如果没有FTP-ALG的支持,IPv4网络中的主机将不能用FTP软件从IPv6网络中的服务器上下载文件或者上传文件,反之亦然。
采用NAT-PT方式进行过渡的优点是不需要进行IPv4,IPv6节点的升级改造,缺点是IPv4节点访问IPv6节点的实现方法比较复杂,网络设备进行协议转换、地址转换的处理开销较大,一般在其他互通方式无法使用的情况下使用。
三、SIIT介绍
在NAT-PT的实现中最重要的一部分就是协议部分的转换算法,也就是无状态IP/ICMP转换算法(SIIT)。转换方法包括如下几个大的方面:
IPv4->IPv6:
¨ IPv4头部到IPv6头部的转换
¨ IPv4 UDP头部的转换
¨ IPv4的ICMP头部转换为IPv6的ICMP头部
¨ IPv4的ICMP错误消息转换为IPv6的ICMP错误消息
IPv6->IPv4:
¨ IPv6头部到IPv4头部的转换
¨ IPv4的ICMP头部转换为IPv6的ICMP头部
¨ IPv4的ICMP错误消息转换为IPv6的ICMP错误消息
上述转换中,IPv4头部和IPv6头部的相互转换比较简单,请参看RFC2765。下面重点描述一下IPv4->IPv6转换过程中UDP头部的转换以及ICMP报文的转换。
3.1、IPv4报文中UDP头部的转换
在IPv4报文中,UDP头部校验和可以不填写,即UDP头部校验和可以是0。但是在IPv6协议中,IPv6头部没有校验和,为了保证UDP数据包的正确性,UDP头部中校验和字段必须填写。
如果一个UDP包被分片,但是UDP头部的校验和为0,作为一个无状态的转换设备来说,它不可能计算出一个有效的校验和。不过,我们认为这种情况是恶意的攻击。当转换设备收到这种报文的时候,转换设备应该丢弃该报文并生成一个系统相关事件(事件至少需要记录IP地址和端口号)。
如果转换设备收到一个未分片的IPv4 UDP报文并且校验和为0,转换设备必须计算UDP校验和,而且转换设备应该记录有多少个这样的UDP校验和被计算。
3.2、ICMP头部的转换
在IPv6中,ICMP的校验和计算包含一个伪头部(源地址,目的地址,协议号,ICMP包长度),而在IPv4中,ICMP的头部校验和的计算不包含伪头部。所以,所有经过转换设备的ICMP的校验和都需要重新计算。
说到ICMP头部的转换,除了校验和之外,剩下的就是ICMP的Type值和Code值需要转换,下面给出一个转换表(表一),请大家参考。
3.3、ICMP错误消息的转换
对于ICMP错误消息,它头部中的Type值和Code值的转换也需要参照(表一)进行转换。
ICMP错误消息中包含了IP头部,错误消息中的IP头部也需要被转换,就像普通的IP头部被转换一样。转换错误消息中的IP头部可能导致数据包的长度变化,那么正常的IPv6头部的有效载荷长度也需要更新。如图一所示:
ICMP错误消息中的IP头部的转换能够第归调用转换外部IP头部的转换函数。只不过转换之前,内部的IP头部中,源地址、目的地址和上层协议(TCP,UDP)的源端口号、目的端口号需要互换。只有这样才能保证ICMP ERROR报文的正确转换。
四、应用层网关(ALG)
4.1、DNS-ALG
在组网的时候,如果处于V6网络的主机需要连接到V4网络中的主机,V6主机可以认为V4主机的所对应的IPv6地址为NATPT前缀+IPv4主机地址。如:V4主机地址为10.18.34.1,NATPT设备设定的前缀为2222::/64,则V4主机对应的IPv6地址就是2222::10.18.34.1或2222::0a12:2201。
但是当V4网络中的主机需要访问V6网络中的主机的时候就不能按照这种方法来做,V4主机可以按照V6主机所对应的域名来访问,这就需要用到DNS-ALG功能。如(图二)所示:
V4端主机10.18.34.117需要访问V6端主机2000::1,V4主机所对应的域名为www.ipv4.com.cn,V6主机所对应的域名为www.ipv6.com.cn。
首先V4主机发送DNS请求1给它的DNS服务器,请求www.ipv6.com.cn这个域名所对应的IPv4地址,V4的DNS服务器发现没有这个资源记录,于是它转发这个DNS请求给V6的DNS服务器。需要注意到,NATPT设备上必须配置两个DNS服务器的地址映射关系,如:10.18.34.252 => 2000::2,即V6的DNS服务器所对应的IPv4地址为10.18.34.252。
NATPT发送经过转换的DNS请求2给V6的DNS服务器。
V6的DNS服务器收到经过NATPT设备转换之后的DNS请求之后,它作出响应,发送DNS应答3给V4的DNS服务器。NATPT在收到应答3之后,对之进行转换。因为www.ipv6.com.cn这个域名对应的IPv6地址为2000::1,所以应答报文中的资源记录为AAAA,地址为2000::1,经过转换之后,资源记录变为A,2000::1这个IPv6地址所对应的IPv4地址就从地址池中获取。假如获取的IPv4地址为10.18.34.11,则在地址映射表中增加了一条新的地址映射表项2000::1=>10.18.34.11,此记录为一动态记录,超时之后将被自动删除。
NATPT设备发送经过转换之后的DNS应答报文给V4的DNS服务器。
V4的DNS服务器收到应答报文之后在它的DNS缓存中增加一条记录,表明www.ipv6.com.cn这个域名所对应的IPv4地址为10.18.34.11。在此之后,IPv4主机要和IPv6主机进行通信,只需要访问IPv6主机的域名即可。
从V6端访问V4端主机的域名也按照同样的步骤。
4.2、FTP-ALG
当IPv4网络中的用户需要访问IPv6网络中的FTP服务器的时候,对应的FTP请求报文和相应报文需要进行转换,FTP-ALG就是解决此问题的。一般来说,我们只需要对目的端口或源端口为21的TCP报文进行转换,因为这些报文属于FTP的控制报文,只有FTP控制报文中包含了地址和端口的信息。我们只需要转换这些地址和端口。
FTP的请求分很多类型,如PORT 、PASV、EPRT、EPSV等等。对于大多数支持IPv4的FTP客户端来说,它们一般都只支持PORT和PASV请求模式,经过升级之后可能支持EPRT和EPSV请求模式。但是现在支持IPv6的FTP客户端一般是支持EPRT和EPSV这两种请求模式。
从上面的描述中我们可以知道,对于IPv4网络中的FTP客户端来说,它们即可以支持PORT和PASV请求模式也可以支持EPRT和EPSV请求模式。对于IPv6网络中的FTP客户端来说,它们肯定都支持EPRT和EPSV请求模式。但是,这时将会出现一个问题,如(图三)所示:
IPv4的FTP请求转换成IPv6的FTP请求是二对一的关系,反之是一对二的关系。也就是说,我们现在需要考虑,在转换IPv6侧的FTP请求的时候我们应该怎么转换呢?两种都可以!但是两种都有不足的地方。
1、EPRT->PORT EPSV->PASV
这种转换中,FTP-ALG不能转换“ EPSVALL“这种指令。这样将导致FTP Server返回一个错误信息。
2、EPRT->EPRT EPSV->EPSV
这种转换要求IPv4侧的主机升级FTP软件以支持EPRT和EPSV两种请求模式。
鉴于这种情况,我们建议在缺省情况下采用第一种转换方式,因为第一种转换方式不需要IPv4侧的主机进行升级,虽然有个指令不能转换,但是我们认为该指令出现的几率不是很频繁,就算出现该指令,大多数情况下我们的FTP连接还是能够建立起来,不影响文件的传输。我们还建议在NATPT转换设备上设置一条命令,把IPv6侧的FTP请求的转换方式当作可配置的。
在经过FTP-ALG模块转换之后FTP报文的数据部分长度可能发生变化,此时TCP头部的校验和需要重新计算,同时TCP包中的Seq Number和Ack Number需要调整。
六、NATPT设备应用范围的考虑
NATPT只是作为IPv4网络向IPv6网络过渡的时候采用的一种手段,NATPT自身有一定的局限性,由于转换相当耗费系统资源和时间,所以NATPT设备注定不能作为核心的设备,只能用于边缘协议和地址的转换。而且NATPT对于系统安全不能够很好的支持,而系统安全这一点对于下一代网络来将非常重要。所以网络中采用NATPT设备只能暂时作为一种解决问题的方案。
七、总结
本文简单地描述了NAT-PT转换中所需要注意的几个方面,但要从真正实现NAT-PT协议的角度来讲,这些远远不够。武汉邮科院烽火网络公司的Fengine系列路由器已经实现了NATPT转换,包括DNS-ALG、FTP-ALG、SIP-ALG等。能够为用户提供从IPv4到IPv6网络平滑进行过渡的解决方案。众所周知,在进行NATPT转换之后,系统的性能将大大降低,但是烽火网络公司的R8000系列路由器能够实现硬件的转换,大大提高了NATPT的转换性能和可靠性。
参考资料:
[FTP-IPV6] Allman, M., Ostermann, S. and C. Metz, "FTP Extensions for IPv6 and NATs", RFC 2428, September 1998.
[DNS-ALG] Srisuresh, P., Tsirtsis, G., Akkiraju, P. and A. Heffernan, "DNS extensions to Network Address Translators (DNS_ALG)", RFC 2694, September 1999.
[NAT-PT] George Tsirtsis., "Network Address Translation - Protocol Translation", RFC 2766, February 2000.
[SIIT] Nordmark, E., "Stateless IP/ICMP Translator (SIIT)", RFC 2765, February 2000.
[ICMPv4] Postel, J., "Internet Control Message Protocol", STD 5, RFC 792, September 1981.
[ICMPv6] Conta, A. and S. Deering, "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6)", RFC 2463, December 1998.