NAT-PT
NAT-PT技术是通过与SIIT协议转换和传统的IPv4下的动态地址翻译及应用层网关相结合,实现只安装IPv6的计算机和只安装IPv4计算机通信。NAT-PT是最常用的协议转换技术,它通过SIIT协议转换技术和IPv4网络中的动态地址翻译(NAT)技术适当地与应用层网关(Application Level Gateway,ALG)相结合,实现了IPv6主机和纯IPv4主机的大部分应用的相互通信。
NAT-PT通过IPv4和IPv6数据包之间报头和语义的翻译为IPv6结点与IPv4结点之间的通信提供透明的路由。它采用传统的IPv4下的NAT技术来分配IPv4地址,这样就可以用很少的IPv4地址构成自己的IPv4地址分配池,可以给大量的需要进行地址转换的应用使用协议转换技术服务。
NAT-PT可以分为静态和动态模式。
1)静态NAT-PT
静态模式提供一对一的IPv6地址和IPv4地址的映射。IPv6单协议网络域内的结点要访问IPv4单协议网络域内的每一个IPv4地址,都必须在NAT-PT设备中配置。每一个目的IPv4在NAT-PT设备中被映射成一个具有预定义NAT-PT前缀的IPv6地址。在这种模式下,每一个IPv6映射到IPv4地址需要一个源IPv4地址。
2)动态NAT-PT
在动态 NAT-PT中,NAT-PT网关向IPv6网络通告一个96位的地址前缀,并结合主机32位IPv4地址作为对IPv4网络中主机的标识。从IPv6网络中的主机向IPv4网络发送的报文,其目的地址前缀与NAT-PT发布的地址前缀相同,这些报文都被路由到NAT-PT网关,由NAT-PT网关对报文头进行修改,取出其中的IPv4地址信息,替换目的地址。同时,NAT-PT网关定义了IPv4地址池,它从地址池中取出一个地址来替换IPv6报文的源地址,从而完成从IPv6地址到IPv4地址的转换。
动态NAT-PT改进了静态NAT-PT配置复杂、消耗大量IPv4地址池的缺点。由于它采用上层协议映射方法,故只需用很少的IPv4地址就可以支持大量的IPv6到IPv4的转换。但是,动态NAT-PT只能由IPv6一侧首先发起连接,路由器把IPv6地址转换为IPv4地址后,IPv4主机才知道使用哪一个IPv4地址来标识IPv6主机。若从IPv4端首先发起连接,IPv4主机并不知道IPv6主机的IPv4地址,因为这个地址是NAT-PT网关从地址池中随机选择的,连接将无法进行。
3)结合ALG的动态NAT-PT
ALG即应用层网关,如图10-23所示。动态NAT-PT映射可以和DNS ALG联合使用来转换DNS传输,以自动建立目的结点的转换地址。NAT-PT可以截取由IPv6网络发往IPv4网络的DNS请求(A记录查询)。IPv6网络内的DNS服务器必须通过NAT-PT设备首先向IPv4的DNS服务器发送DNS查询,随后NAT-PT自动地将DNS响应(A记录)内容转换为一个IPv6地址(A6记录),外部IPv4地址和有NAT-PT前缀的IPv6地址的NAT-PT映射被动态的配置。然后,IPv6单协议网络结点就可以从NAT-PT设备获得一个可以到达IPv4目的的IPv6地址。
▲图10-23 应用程序网关
1.示例:配置静态NAT-PT
本实验使用的IOS是unzip-c3640-js-mz.124-10.bin,下载网址http://www.91xueit.com,使用Dynamips软件搭建的实验环境,网络拓扑如图10-24所示,PC0使用Windows XP模拟,IPv4的地址为10.0.1.122,网关为10.0.1.1,RA路由器Fa1/0接口的IPv4地址为10.0.1.1,Se2/0接口的IPv6的IP地址为2001:2::1,RB路由器的接口Se2/0为2001:2::2。
实验目标:现在需要在路由器RA上配置NAT-PT静态映射,使得PC0能够ping通路由器,RB的Se2/0接口。配置静态映射的结果是:PC0通过访问10.0.2.2访问路由器RB的Se2/0接口IPv6地址,路由器RB通过访问2001:3::122访问PC0的IPv4地址。
▲图10-24 静态NAT-PT实验环境
配置静态NAT-PT的步骤如下。
(1)在RA上配置静态NAT-PT。
RA(config)#ipv6 unicast-routing
RA(config)#interface fastEthernet 1/0
RA (config-if)#ip address 10.0.1.1 255.255.255.0
RA (config-if)#no shutdown
RA(config-if)#ipv6 NAT
RA(config-if)#exit
RA(config)#interface Serial 2/0
RA(config-if)#clock rate 64000
RA(config-if)#no shutdown
RA(config-if)#ipv6 address 2001:2::1/64
RA(config-if)#ipv6 NAT
RA(config-if)#exit
RA(config)#ipv6 NAT v6v4 source 2001:2::2 10.0.2.2
--该命令使IPv4的计算机通过访问10.0.2.2就能够访问到2001:2::2
RA(config)#ipv6 NAT v4v6 source 10.0.1.122 2001:3::122
--该命令使IPv6的计算机通过访问2001:3::122就能访问到10.0.1.122
RA(config)#ipv6 NAT prefix 2001:3::/96
--定义前缘长度,必须是96位,这就意味着IPv4中的计算机都被映射到IPv6网络中的
2001:3::/96网段中。
RA(config)#exit
RA#debug ipv6 NAT --启用IPv6 NAT的事件输出
(2)在RB上,配置接口IPv6地址和添加IPv6路由。
RB(config)#ipv6 unicast-routing
RB(config)#interface Se 2/0
RB(config-if)#no shutdown
RB(config-if)#ipv6 address 2001:2::2/64
RB(config-if)#exit
RB(config)#ipv6 route ::/0 2001:2::1 --添加IPv6的默认路由
(3)在PC0上ping 10.0.2.2,通过这个地址能够ping通2001:2::2。
(4)在RA上可以看到NAT-PT的输出,如图10-25所示。
▲图10-25 IPv6 NAT-PT输出
(5)在RB上输入debug ipv6 packet,可以看到IPv6数据包接收和转发产生的输出,如图10-26所示。
▲图10-26 显示IPv6数据包
2.示例:配置动态NAT-PT
动态NAT-PT实验环境如图10-27所示,使IPv6网络2001:2::/64的计算机能够访问IPv4网络中的计算机。路由器RB需要访问PC0时,目标IPv6地址中包括IPv4地址,10.0.1.122写成十六进制就是A00:17A。
▲图10-27 动态NAT-PT实验环境
需要定义一个IPv4的地址池10.0.2.100~10.0.2.200,这样只允许101个IPv6主机同时访问IPv4网络中的计算机。
需要创建一个IPv6访问控制列表,指定允许哪些IPv6访问IPv4网络。
指定将IPv4的地址映射到2001::/64 IPv6网段。
动态NAT-PT实验步骤如下。
(1)在RA上配置动态NAT-PT
RA(config)#ipv6 unicast-routing
RA(config)#interface fastEthernet 1/0
RA (config-if)#ip address 10.0.1.1 255.255.255.0
RA (config-if)#no shutdown
RA(config-if)#ipv6 NAT
RA(config-if)#exit
RA(config)#interface Serial 2/0
RA(config-if)#clock rate 64000
RA(config-if)#no shutdown
RA(config-if)#ipv6 address 2001:2::1/64
RA(config-if)#ipv6 NAT
RA(config-if)#exit
RA(config)#ipv6 access-list v4map permit 2001:2::/64 any
RA(config)#ipv6 access-list v6list permit 2001:2::/64 any
RA(config)#ipv6 NAT prefix 2001::/96 v4-mapped v4map
RA(config)#ipv6 NAT v6v4 pool v4pool 10.0.2.100 10.0.2.200 prefix-length 24
RA(config)#ipv6 NAT v6v4 source list v6list pool v4pool
RA(config)#exit
RA#debug ipv6 NAT
(2)在路由器RB上添加IPv6地址和默认路由的步骤省略,在路由器RB上ping PC0,该地址包含IPv4地址,PC0的IPv4地址写成十六进制就是A00:17A。
Ping 2001::A00:17A
(3)如图10-28所示是在路由器RA上的输出,可以看到源地址2001:2::2被10.0.2.100替换,目标地址A00:17A被10.0.1.122替换。现在10.0.2.100就和2001:2::2做了临时的映射。现在你需要在PC0上通过访问10.0.2.100访问2001:2::2。
▲图10-28 IPv6 NAT输出
(4)在PC0上就可以ping 10.0.2.100,通过路由器RA,将该数据包发送给2001:2::2。
(5)如图10-29所示,在路由器RB上,运行debug ipv6 packet命令。当PC0 ping 10.0.2.100时就有输出。
▲图10-29 IPv6数据包事件输出