源地址:http://blog.sina.com.cn/s/blog_5ec353710101e8mb.html

一、机制概述

RFC2766、RFC2765。
NAT-PT(网络地址转换-协议转换)是一种地址转换技术,它可以把IPv6地址转换成IPv4地址,反之亦然。NAT-PT基于RFC2766中定义的无状态IP/ICMP转换器(SIIT)算法。SIIT算法互译IPv4和IPv6数据包头部,也包括ICMP头部。
需要注意的是,在IPv6环境中,不建议像IPv4对待NAT的态度哪样,去使用NAT。仅仅在V4单协议与V6单协议网络需要互相通信的时候,才建议使用NAT-PT。
NAT-PT for IPv6机制详解及实验_第1张图片

我们看上面的例子,对于IPv6单协议网络而言,首先它有访问IPv6因特网的需求,因此默认的IPv6流量全部交给R1,另外,它可能还有访问IPv4因特网的需求,这时候,就需要借助R2这台NAT-PT设备。
2001:2::/96,这个长度为96位的前缀是我们为了NAT-PT操作预定义的前缀,可以自定义,但是长度必须是96bits。
在IPv6单协议网络中产生的、去往2001:2::/96这个目的地的流量被路由到R2也就是NAT-PT设备,然后数据包中的IPv6地址被转换为IPv4地址并传送给IPv4因特网中的IPv4单协议节点。
二、NAT-PT配置及原理
2.1 静态NAT-PT
1、静态NAT-PT(单向)
NAT-PT for IPv6机制详解及实验_第2张图片

A和B的配置都极其简单
A的配置:
interface FastEthernet0/0
ipv6 enable
ipv6 address 2001:1::1/64
ipv6 route ::/0 2001:1::FFFF
B的配置如下:
interface FastEthernet0/0
ip address 202.101.100.2 255.255.255.0
ip route 0.0.0.0 0.0.0.0 202.101.100.1
R2的配置如下:
ipv6 unicast-routing
!
interface FastEthernet0/0 !! 连接A的接口
ipv6 enable
ipv6 address 2001:1::FFFF/64
ipv6 nat
!
interface FastEthernet1/0
ip address 202.101.100.1 255.255.255.0
ipv6 nat
!
ipv6 nat prefix 2001:2::/96 !! 是一个为NAT-PT预留的池
ipv6 nat v6v4 source 2001:1::1 202.101.100.100 !! 相当于将2001:1::1这个IPv6的节点,“告知”给IPv4单协议网络中的用户知道,可以以202.101.100.100的方式访问。
在上述配置中,我们将A节点,也就是2001:1::1映射到了IPv4网络,映射到202.101.100.100这个IPv4地址。这样一来B可以主动去访问A,例如B 去ping 202.101.100.100,能够ping通,这个过程如下:
NAT-PT for IPv6机制详解及实验_第3张图片

1) 首先B去ping 202.101.100.100,数据包如图所示。
2) 数据包到达R2后,R2本地是已经存在了一个映射:2001:1::1映射到202.101.100.100
由于存在这个映射,因此R2将B发过来的这个数据包的目的地址202.101.100.100替换成2001:1::1,同时B的源地址是个IPv4地址,咋办呢?还记得我们配置了NAT-PT预留的前缀么?也就是2001:2::/96这个玩意儿,R2将B的IPv4地址映射到这个前缀上,构成一个临时的IPv6地址:2001:2:CA65:6402,同时在本地生成一条新的映射条目:2001:2::CA65:6402映射到202.101.100.1,如上图所示。
3) R2将原始的IPv4数据包的包头替换成IPv6的包头,然后转给A。
4) A回包,数据包送给R2,R2由于已经有了2001:2::CA65:6402到202.101.100.1的映射,因此R2将IPv6包头替换成IPv4包头,然后再转发给B。
注意在此时,A是可以去主动访问B的,也就是说A可以主动ping 2001:2::CA65:6402这个临时的地址来达到访问B的目的。但是如果我们在R2上去clear ipv6 nat translation * ,如此2001:2::CA65:6402到202.101.100.1的映射条目就被清空了,A就无法主动访问B了,只能B先主动访问A。
2、静态NAT-PT(双向)
NAT-PT for IPv6机制详解及实验_第4张图片

R2的配置如下:
ipv6 unicast-routing
!
interface FastEthernet0/0
ipv6 enable
ipv6 address 2001:1::FFFF/64
ipv6 nat
!
interface FastEthernet1/0
ip address 202.101.100.1 255.255.255.0
ipv6 nat
!
ipv6 nat prefix 2001:2::/96
ipv6 nat v4v6 source 202.101.100.2 2001:2::2
ipv6 nat v6v4 source 2001:1::1 202.101.100.100
如此一来,A主动发起访问连接到B,或者B主动发起访问到A都可以。
NAT-PT#show ipv nat translations
Prot IPv4 source IPv6 source
IPv4 destination IPv6 destination
--- --- ---
202.101.100.2 2001:2::2
--- 202.101.100.100 2001:1::1
202.101.100.2 2001:2::2
--- 202.101.100.100 2001:1::1
--- ---
2.2动态NAT-PT
1、V6可以主动访问V4(使用V4地址池)
NAT-PT for IPv6机制详解及实验_第5张图片

R2的配置如下:
ipv6 unicast-routing
!
interface FastEthernet0/0
ipv6 enable
ipv6 address 2001:1::FFFF/64
ipv6 nat
!
interface FastEthernet1/0
ip address 202.101.100.1 255.255.255.0
ipv6 nat
!
Ipv6 access-list ipv6only-network permit 2001:1::/64 any
ipv6 nat prefix 2001:2::/96
ipv6 nat v6v4 pool v6v4-pool 202.101.100.10 202.101.100.20 prefix-length 24
ipv6 nat v6v4 source list ipv6only-network pool v6v4-pool
ipv6 nat v4v6 source 202.101.100.2 2001:2::2
来分解一下关键命令:
Ipv6 access-list ipv6only-network permit 2001:1::/64 any
上面的命令是定义允许被IPv6 nat的源地址,用一个IPv6 ACL进行匹配。
ipv6 nat v6v4 pool v6v4-pool 202.101.100.10 202.101.100.20 prefix-length 24
上面的命令是,创建一个供v6tov4使用的地址池,这个地址池当然是IPv4的地址池,当IPv6 only的用户,如A要访问IPv4 only网络的时候,就从池中取一个空闲的IPv4地址。
ipv6 nat v6v4 source list ipv6only-network pool v6v4-pool
将ACL所允许的IPv6网络与这个v6v4地址池进行关联
ipv6 nat v4v6 source 202.101.100.2 2001:2::2
最后这条命令是将202.101.100.2这个IPv4网络的主机“放进来”到IPv6网络,使得IPv6 only的用户有访问目标,否则,你让IPv6 only的用户用什么目标地址去访问IPv4 only网络?
完成上述配置后,A即可主动发起访问到B了, 使用目标地址 2001:2::2即可访问B
2、V4可以主动访问V6(使用V6地址池)
NAT-PT for IPv6机制详解及实验_第6张图片
R2的配置如下:
ipv6 unicast-routing
!
interface FastEthernet0/0
ipv6 enable
ipv6 address 2001:1::FFFF/64
ipv6 nat
!
interface FastEthernet1/0
ip address 202.101.100.1 255.255.255.0
ipv6 nat
!
access-list 1 permit 202.101.100.0 0.0.0.255
ipv6 nat v4v6 pool v4v6-pool 2001:2:: 2001:2::FFFF:FFFF prefix-length 96
ipv6 nat v4v6 source list 1 pool v4v6-pool
ipv6 nat prefix 2001:2::/96
ipv6 nat v6v4 source 2001:1::1 202.101.100.111
思路和V6访问V4是一样的。
这里我们用一个access-list 1 匹配202.101.100.0/24网络,同时将其与v4v6-pool这个IPv6地址池做了捆绑。使得B访问IPv6网络的时候,可以从池中拿IPv6地址。另外,为了让V4网络访问V6网络有目标,还做了一条静态映射,将2001:1::1映射到202.101.100.111,这样,B就能够使用202.101.100.111这个IP来访问IPv6主机A。
3、IPv4-Mapped NAT-PT
NAT-PT for IPv6机制详解及实验_第7张图片

回顾一下前面IPv6 only网络访问IPv4 only网络使用V4地址池的情况。
V4地址池使得V6用户在穿越NAT-PT设备之后,可以从池中拿一个地址当做源地址。但是,V6用户如何访问V4网络呢? 总不能让V6 only主机去ping 202.101.100.2吧?因此,不得不在配置上增加命令:
ipv6 nat v4v6 source 202.101.100.2 2001:2::2
这条命令,将202.101.100.2 这个V4主机映射到V6网络,使得V6网络用户能够使用地址2001:2::2去访问这个V4主机。那么如果我们这样的V4主机有很多呢?难道需要手工去添加静态映射么?
当然不用,使用IPv4-mapped功能即可,机制非常简单,我们在R2上修改配置,关键配置如下:
ipv6 access-list v4map permit 2001:1::/64 2001:2::/96
ipv6 nat prefix 2001:2::/96 v4-mapped v4map
首先用一条IPv6 ACL来匹配需要进行IPv4-mapped的流量,上面的ACL源是IPv6 only网络,目的是保留给NAT-PT的IPv6前缀。然后使用ipv6 nat prefix 2001:2::/96 v4-mapped v4map命令关联这条ACL。这样一来当A访问B时,可以直接使用2001:2::CA65:6402这个地址来访问处于V4网络的B,注意,这里前缀2001:2::/96是保留给NAT-PT 的IPv6前缀,后面的CA65:6402将被翻译成IPv4地址,也就是202.101.100.2。因此R2收到这个IPv6数据包的时候,发现数据包匹配上了v4map这个IPv6ACL,因此将目的IPv6地址的最后32bits翻译成IPv4格式(这就是IPv4目的地址),然后从V4地址池中取出一个地址替换掉IPv6地址。完美。
R2的配置如下:
ipv6 unicast-routing
!
interface FastEthernet0/0
ipv6 enable
ipv6 address 2001:1::FFFF/64
ipv6 nat
!
interface FastEthernet1/0
ip address 202.101.100.1 255.255.255.0
ipv6 nat
!
Ipv6 access-list ipv6only-network permit 2001:1::/64 any
ipv6 nat v6v4 pool v6v4-pool 202.101.100.10 202.101.100.20 prefix-length 24
ipv6 nat v6v4 source list ipv6only-network pool v6v4-pool
ipv6 access-list v4map permit 2001:1::/64 2001:2::/96
ipv6 nat prefix 2001:2::/96 v4-mapped v4map
红茶三杯
网络工程 | 项目管理 | IT服务管理 | CCIE培训
学习 沉淀 成长 分享
微博: http://weibo.com/vinsoney
博客: http://blog.sina.com.cn/vinsoney
站点: http://ccietea.com