IPv6 第 12 章
12.4 IPv6 和 IPv4 共存
在目前以 IPv4 为基础的网络技术如此成熟的情况下,不可能马上抛开原有的 IPv4 网络来创建 IPv6 网络,只能通过分步实施的方法来逐步过渡。因此,在今后相当长的一段时间内,IPv6 网络 将和 IPv4 网络共存。如何以合理的代价逐步地将 IPv4 网络过渡到 IPv6、解决好 IPv4 与 IPv6 互相 共存将是我们需要迫切考虑的。针对以上问题,目前提出了三种主要的过渡技术:双协议栈
(DualStack)、隧道技术(Tunnel)、地址协议转换(NAT-PT)。当然,这些过渡技术都不是普遍适 用的,每一种技术都只适用于某种或几种特定的网络情况,在实际应用时需要综合考虑各方面的现 实情况,然后选择合适的转换机制进行设计和实施。本节以图 12-10 为例介绍各种情况下 IPv4 到 IPv6 的过渡方案。
▲图 12-10 IPv4 到 IPv6 的过渡方案
12.4.1 双协议栈技术
双协议栈是指在单个节点同时支持 IPv4 和 IPv6 两种协议。由于 IPv6 和 IPv4 是功能相近的网 络层协议,两者都基于相同的物理平台,而且加载于其上的传输层协议 TCP 和 UDP 也没有区别,
所以可以在一台主机上同时支持 IPv4 协议和 IPv6 协议。
双协议栈技术的工作原理是一台主机同时支持 IPv6 和 IPv4 两种协议,该主机既能与支持 IPv4 协议的主机通信,又能与支持 IPv6 协议的主机通信。双协议栈是其他 IPv4 或 IPv6 互通技术的基 础,当 IPv6 可用时,双协议栈节点将优先使用 IPv6,双协议栈主机的协议结构如表 12-1 所示。
▲表 12-1 双协议栈主机的协议结构 应用程序
TCP/UDP 协议
IPv6 协议 IPv4 协议
接入网络
12Chapter
同样,双栈主机相应的网关也支持双栈协议,如图 12-11 所示。
▲图 12-11 双栈路由器
双协议栈主机在通信时首先通过支持双协议的 DNS 服务器查询与目的主机名对应的 IP 地址,
然后根据指定的 IPv6 或 IPv4 地址开始通信,双协议栈通信方式如图 12-12 所示。
▲图 12-12 双协议栈通信示意图
将 IPv4 应用程序过渡到 IPv6 的经验表明,对于大多数应用程序,只需要对源代码内的某些局 部地方做极少量的修改,该应用程序可以逐步升级到 IPv6。Windows Server 2008 默认是双协议栈,
它的 DNS 服务器支持 IPv4 和 IPv6 的名称解析。
参照拓扑如图 12-10 所示,我们可以将路由器 R1 的 Fas0/1 和服务器 Server10 的 E0 口设置为 双栈模式,配置和验证过程如下:
R1(config)#ipv6 unicast-routing R1(config)#interface fastEthernet 0/1
R1(config-if)#ip address 10.10.2.1 255.255.255.0 R1(config-if)#ipv6 address fec0:10:2::/64 eui-64 R1(config-if)#end
12 Chapter
R1#show running-config interface fastEthernet 0/1 Building configuration...
Current configuration : 130 bytes
!
interface FastEthernet0/1 ip address 10.10.2.1 255.255.255.0 ipv6 address FEC0:10:2::/64 eui-64 end
R1#
R1#show ipv6 interface brief FastEthernet0/1 [up/up]
FE80::C801:16FF:FE6C:6 FEC0:10:2:0:C801:16FF:FE6C:6
Ser_10> ip 10.10.2.10/24 10.10.2.1 ---设置节点的 IPv4 地址和网关--- Checking for duplicate address...
PC1 : 10.10.2.10 255.255.255.0 gateway 10.10.2.1
Ser_10> ip auto ---设置节点通过自动的方式获得 IPv6 地址--- GLOBAL SCOPE : fec0:10:2:0:2050:79ff:fe66:6803/64
ROUTER LINK-LAYER : ca:01:16:6c:00:06
Ser_10> show ---验证节点的 IPv4 和 IPv6 地址信息---
84 bytes from 10.10.2.1 icmp_seq=1 ttl=255 time=19.001 ms 84 bytes from 10.10.2.1 icmp_seq=2 ttl=255 time=5.001 ms 84 bytes from 10.10.2.1 icmp_seq=3 ttl=255 time=9.000 ms 84 bytes from 10.10.2.1 icmp_seq=4 ttl=255 time=9.000 ms 84 bytes from 10.10.2.1 icmp_seq=5 ttl=255 time=9.001 ms Ser_10> ping FEC0:10:2:0:C801:16FF:FE6C:6
FEC0:10:2:0:C801:16FF:FE6C:6 icmp6_seq=1 ttl=64 time=21.001 ms FEC0:10:2:0:C801:16FF:FE6C:6 icmp6_seq=2 ttl=64 time=9.000 ms FEC0:10:2:0:C801:16FF:FE6C:6 icmp6_seq=3 ttl=64 time=9.001 ms FEC0:10:2:0:C801:16FF:FE6C:6 icmp6_seq=4 ttl=64 time=9.000 ms FEC0:10:2:0:C801:16FF:FE6C:6 icmp6_seq=5 ttl=64 time=9.000 ms Ser_10>
12Chapter
包的源地址和目的地址分别是隧道入口和出口的 IPv4 地址。在隧道的出口处再将 IPv6 数据包取出 转发给目的站点。隧道技术只要求隧道两端的节点(路由器)都支持 IPv4 或 IPv6 两种协议,而无 需将中间网络转换成 IPv6。当使用 IPv4 封装 IPv6 数据包时,IPv4 的协议类型为 41,其通信方式 如图 12-13 所示。
▲图 12-13 IPv6 over IPv4 手工隧道
参照拓扑如图 12-10 所示,我们可以在路由器 R1 和 R2 之间做 IPv6 over IPv4 手工隧道,前提 需要保证 R1 的 Serial1/1(IP:172.16.1.1)和 R2 的 Serial1/2(IP:172.16.12.2)接口之间可以相互通 信。R1、R2、ISP 串口地址的配置不再详细介绍,隧道的配置和验证过程如下:
R1(config)#ip route 0.0.0.0 0.0.0.0 serial 1/1 R1(config)#ipv6 unicast-routing
R1(config)#interface tunnel 12 ---配置隧道接口--- R1(config-if)#ipv6 address fec0:12:12::1/64 ---隧道的 IPv6 地址--- R1(config-if)#tunnel source 172.16.1.1 ---隧道的源--- R1(config-if)#tunnel destination 172.16.2.2 ---隧道的目的地--- R1(config-if)#tunnel mode ipv6ip ---隧道的模式--- R1(config-if)#end
R1#show ipv6 interface brief ---省略部分输出---
Tunnel12 [up/up]
FE80::AC10:101 FEC0:12:12::1 R1#
R2(config)#ip route 0.0.0.0 0.0.0.0 serial 1/2 R2(config)#ipv6 unicast-routing
R2(config)#interface tunnel 12
R2(config-if)#ipv6 address fec0:12:12::2/64 R2(config-if)#tunnel source 172.16.2.2 R2(config-if)#tunnel destination 172.16.1.1 R2(config-if)#tunnel mode ipv6ip R2(config-if)#end
R2#show ipv6 interface brief ---省略部分输出---
Tunnel12 [up/up]
FE80::AC10:202 FEC0:12:12::2 R2#
12 Chapter
在 R1 上通过 ping 命令测试隧道是否成功建立,操作过程如下:
R1#ping fec0:12:12::2 Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FEC0:1:1::2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/26/32 ms R1#
如需 PC10 和 PC20 这两个 IPv6 主机直接通过建立的隧道通信,在网络中部署路由即可。
12.4.3 6to4 隧道
手工隧道虽然简单,但它需要为每对路由器都配置一条独立的隧道,如果企业路由器的数量比 较多,手工配置的管理成本将会非常大,因此这种方式难以满足大量隧道扩展性的需求。IETF 定 义了一种称为 6to4 的隧道机制,这是一种自动构造隧道的方式,它的好处在于只需要一个全球唯 一的 IPv4 地址便可以使得整个站点获得 IPv6 的连接。
6to4 隧道不是点到点的,而是点到多点的。国际地址分配机构 IANA 专门为 6to4 隧道分配了一个 永久性的 IPv6 的地址范围,对应的网络前缀是 2002::/16,称为 6to4 地址,其结构如图 12-14 所示。
▲图 12-14 6to4 地址结构
6to4 地址的网络前缀有 64 位,前 48 位(2002:a.b.c.d)由分配给路由器上的 IPv4 地址决定,
用户不能改变;后 16 位 SLA ID 是子网标识,由用户自己定义,PortID 是接口标识。利用 6to4 地 址,隧道的 IPv4 地址可以从相应的 IPv6 地址的 48 比特前缀中自动提取出来,假设隧道的 IPv4 地 址为 136.214.1.10,转换成十六进制 84d6:010a,则 6to4 地址前缀为 2002: 84d6:010a::/48,其隧道 的数据交互如图 12-15 所示。
▲图 12-15 6to4 隧道数据通信过程
报头 报头 报头 报头
12Chapter
参照拓扑如图 12-10 所示,我们可以在路由器 R1 和 R2 之间做 6to4 隧道,前提需要保证 R1 的 Serial1/1 和 R2 的 Serial1/2 接口之间可以相互通信,配置过程如下:
R1(config)#ip route 0.0.0.0 0.0.0.0 serial 1/1 R1(config)#ipv6 unicast-routing
R1(config)#interface tunnel 12
R1(config-if)#ipv6 address 2002:ac10:101:12::/128
R1(config-if)#tunnel source 172.16.1.1 ---172.16.1.1 对应的十六进制值为 ac10:0101--- R1(config-if)#tunnel mode ipv6ip 6to4
R2(config)#ip route 0.0.0.0 0.0.0.0 serial 1/2 R2(config)#ipv6 unicast-routing
R2(config)#interface tunnel 12
R2(config-if)#ipv6 address 2002:ac10:202:12::/128 R2(config-if)#tunnel source 172.16.2.2
R2(config-if)#tunnel mode ipv6ip 6to4
由于隧道连接的每个节点地址都属于不同的子网,所以需要在每个路由器上设置到 6to4 网络 的路由和到远端 IPv6 网络的路由:
R1(config)#ipv6 route 2002::/16 tunnel 12 ---设置 6to4 网络的静态路由--- R1(config)#ipv6 route fec0:20:1::/64 2002:ac10:202:12:: ---下一跳为 R2 的 Tunnel 地址--- R2(config)#ipv6 route 2002::/16 tunnel 12 ---设置 6to4 网络的静态路由--- R2(config)#ipv6 route fec0:10:1::/64 2002:ac10:101:12:: ---下一跳为 R1 的 Tunnel 地址--- 验证 R1 的路由表并使用 ping 命令从 Host10 测试到 Host20 的连通性:
R1#show ipv6 route static IPv6 Routing Table - 9 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
fec0:20:1:0:2050:79ff:fe66:6801 icmp6_seq=1 ttl=60 time=73.004 ms fec0:20:1:0:2050:79ff:fe66:6801 icmp6_seq=2 ttl=60 time=49.003 ms fec0:20:1:0:2050:79ff:fe66:6801 icmp6_seq=3 ttl=60 time=39.002 ms fec0:20:1:0:2050:79ff:fe66:6801 icmp6_seq=4 ttl=60 time=49.003 ms fec0:20:1:0:2050:79ff:fe66:6801 icmp6_seq=5 ttl=60 time=49.003 ms PC10>
12 Chapter
然后需要有一台支持 ISATAP 的路由器,该路由器可以在网络中的任何位置,只要终端 PC 能够通 过 IPv4 的网络与它通信即可。当使用 PC 访问 IPv6 资源时,可以与 ISATAP 路由器建立起 ISATAP 隧道,PC 根据 ISATAP 路由器下发的 IPv6 前缀构造自己的 IPv6 地址,并且将这台 ISATAP 路由器 设置为自己的 IPv6 默认网关,如此一来,后续的这台主机就能够通过这台 ISATAP 路由器去访问 IPv6 的资源,ISATAP 通信过程如图 12-16 所示。
▲图 12-16 ISATAP 隧道
ISATAP 在主机上启用后,会产生一个 ISATAP 虚拟网卡,该虚拟网卡会产生一个 64bits 的特 殊接口标识,有点类似 EUI-64,但是产生机制不同,它是由专为 ISATAP 保留的 32 位的 0200:5EFE 加上主机上配置的 IPv4 地址构成,如图 12-17 所示,其中假设 ISATAP 主机配置的 IPv4 地址为 1.1.1.1。
另一方面,在路由器上部署 ISATAP 后,路由器也会产生一个 tunnel 接口,用于响应 ISATAP 主机的隧道建立请求,这个 tunnel 接口同样会产生接口标识。地址的格式是 IANA 保留给 ISATAP 的 32bits 的 0000:5EFE 后追加 32bits 的 IPv4 地址,如图 12-18 所示,其中假设 ISATAP 路由器配置 的 IPv4 地址是 2.2.2.2。
▲图 12-17 ISATAP 主机接口标识 ▲图 12-18 ISATAP 路由器接口标识 ISATAP 路由器
PC0 到 PC1 使用 PC0 的 IPv4 地址作为源 IP 地址,ISATAP 路由器的 IPv4 地址 作为目标 IP 地址去掉 IPv4 的数据报头进入 IPv6 网络
从 IPv6 的数据包提取出 IPv4 的地址作为目标地址,Tunnel Source 地址作为 IPv4 的源地址将 IPv6 的数据包封装到 IPv4 的数据包中进入 IPv4 的网络
12Chapter
参照拓扑如图 12-10 所示,我们在路由器 R1 的 Serial1/1 接口部署 ISATAP 隧道(IPv6 网络前 缀为 FEC0:13:13::/64),使 ISATAP 主机 Host30(Windows XP 系统)能通过 ISATAP 路由器 R1 与 Host10 或 Server10 通信,ISATAP 路由器的配置和验证过程如下:
R1(config)#ip route 0.0.0.0 0.0.0.0 serial 1/1 R1(config)#interface tunnel 13
R1#show ipv6 interface brief ---省略部分输出---
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . : IP Address. . . : 10.3.1.30 Subnet Mask . . . : 255.255.255.0 Default Gateway . . . : 10.3.1.3 C:\Documents and Settings\Administrator>ping 172.16.1.1 Pinging 172.16.1.1 with 32 bytes of data:
Reply from 172.16.1.1: bytes=32 time=44ms TTL=254 Reply from 172.16.1.1: bytes=32 time=18ms TTL=254 Reply from 172.16.1.1: bytes=32 time=22ms TTL=254 Reply from 172.16.1.1: bytes=32 time=13ms TTL=254 Ping statistics for 172.16.1.1:
Packets: Sent=4, Received=4, Lost=0 (0% loss), Approximate round trip times in milli-seconds:
Minimum=13ms, Maximum=44ms, Average=24ms C:\Documents and Settings\Administrator>
在 ISATAP 主机 Host30 上启用 IPv6 协议并设置 ISATAP 隧道,操作过程如下:
C:\Documents and Settings\Administrator>ipv6 install ---启用 IPv6 协议--- Installing...
Succeeded.
C:\Documents and Settings\Administrator>netsh interface ipv6 ISATAP set router 172.16.1.1 ---建立 ISATAP 隧道--- 验证获取的 IPv6 地址信息,操作过程如下:
C:\Documents and Settings\Administrator>ipconfig ---省略部分输出---
Tunnel adapter Automatic Tunneling Pseudo-Interface:
Connection-specific DNS Suffix . :
IP Address. . . : fec0:13:13::5efe:10.3.1.30%1 IP Address. . . : fe80::5efe:10.3.1.30%2 Default Gateway . . . : fe80::5efe:172.16.1.1%2
使用 ping 命令测试 Host30 到 Server10(fec0:10:2:0:2050:79ff:fe66:6803)的连通性:
C:\Documents and Settings\Administrator>ping fec0:10:2:0:2050:79ff:fe66:6803
12 Chapter
Pinging fec0:10:2:0:2050:79ff:fe66:6803 with 32 bytes of data:
Reply from fec0:10:2:0:2050:79ff:fe66:6803: time=46ms Reply from fec0:10:2:0:2050:79ff:fe66:6803: time=22ms Reply from fec0:10:2:0:2050:79ff:fe66:6803: time=22ms Reply from fec0:10:2:0:2050:79ff:fe66:6803: time=23ms Ping statistics for fec0:10:2:0:2050:79ff:fe66:6803:
Packets: Sent=4, Received=4, Lost=0 (0% loss), Approximate round trip times in milli-seconds:
Minimum=22ms, Maximum=46ms, Average=28ms C:\Documents and Settings\Administrator>
12.4.5 NAT64
在 IPv6 网络的发展过程中,面临的最大问题应该是 IPv6 与 IPv4 的不兼容性,因此无法实现 两种不兼容网络之间的互访。为了实现 IPv6 与 IPv4 的互访,IETF(互联网工程任务组)在早期 设计了 NAT-PT 的解决方案 RFC2766。NAT-PT 通过 IPv6 与 IPv4 的网络地址与协议转换,实现 了 IPv6 网络与 IPv4 网络的双向互访。但 NAT-PT 在实际网络应用中面临各种缺陷,IETF 建议不 再使用,因此已被 RFC4966 废除。为了解决 NAT-PT 中的各种问题,同时实现 IPv6 与 IPv4 之间 的网络地址与协议转换技术,IETF(互联网工程任务组)重新设计了一项新的解决方案:NAT64 与 DNS64 技术。
NAT64 是一种有状态的网络地址与协议转换技术,一般用于 IPv6 网络侧用户发起连接访问 IPv4 侧网络资源,但也支持手工配置静态映射关系,实现 IPv4 网络主动发起连接访问 IPv6 网络。
NAT64 是一种有状态的网络地址与协议转换技术,一般用于 IPv6 网络侧用户发起连接访问 IPv4 侧网络资源,但也支持手工配置静态映射关系,实现 IPv4 网络主动发起连接访问 IPv6 网络。