IPv6 - 从 IPv4 到 IPv6
从 IPv4 过渡到 IPv6
Section titled “从 IPv4 过渡到 IPv6”IPv6 与 IPv4 不向后兼容(backward-compatible),这意味着仅支持 IPv6 的设备无法直接与仅支持 IPv4 的设备通信,除非有转换机制(translation mechanism)。从以 IPv4 为主的互联网过渡到广泛部署 IPv6 的互联网是一个长期过程。目前已开发出几种机制来促进这种共存和逐步迁移。
这些机制允许网络和应用程序同时支持这两种协议,或在它们之间进行隧道(tunneling)/转换(translation)。
双栈 (Dual Stack)
Section titled “双栈 (Dual Stack)”最常用且推荐的过渡策略是双栈(Dual Stack)。在双栈部署中,主机(hosts)和路由器(routers)上的接口(interfaces)同时配置有 IPv4 和 IPv6 地址。应用程序(applications)可以根据目的地(destination)和网络路径(network path)的能力选择通过 IPv4 或 IPv6 进行通信。
例如,一个 Web 服务器(web server)可以同时拥有 IPv4 地址(例如,198.51.100.10)和 IPv6 地址(例如,2001:db8::10)。双栈客户端(client)如果可能,可以使用 IPv6 连接到此服务器,否则回退(fall back)到 IPv4。域名系统(DNS)通过为这些主机提供 A (IPv4) 和 AAAA (IPv6) 记录发挥着关键作用。
图示说明:路由器或主机拥有独立的 IPv4 和 IPv6 网络协议栈(network stacks)。它可以在其 IPv4 接口/地址上发送和接收 IPv4 数据包(packets),并在其 IPv6 接口/地址上发送和接收 IPv6 数据包。这使其能够与 IPv4 和 IPv6 网络/主机进行原生(natively)通信。
隧道技术 (Tunneling)
Section titled “隧道技术 (Tunneling)”隧道技术(Tunneling)将 IPv6 数据包封装(encapsulates)在 IPv4 数据包内(或反之),以穿越仅支持单一协议的网络段(network segment)。这使得隔离的 IPv6 网络(有时称为“孤岛 islands”)可以通过 IPv4 骨干网(backbone)进行通信,或者 IPv4 网络通过 IPv6 骨干网进行通信。
存在几种隧道技术,包括:
- 手动配置隧道(例如,GRE 隧道):通过在两个端点(endpoints)之间进行显式配置建立的点对点(Point-to-point)隧道。
- 6to4 (RFC 3056):一种较旧的自动隧道机制,它将 IPv4 地址嵌入 IPv6 前缀(prefixes)中。由于可靠性问题已基本弃用(deprecated)。
- Teredo (RFC 4380):另一种旨在工作在 NAT(网络地址转换 Network Address Translation)之后的自动隧道机制。目前也不太受欢迎。
- ISATAP (Intra-Site Automatic Tunnel Addressing Protocol - RFC 5214):用于单个组织网络内部,以便 IPv6 主机通过 IPv4 基础设施(infrastructure)进行连接。
- 6rd (IPv6 Rapid Deployment - RFC 5969):允许互联网服务提供商(ISPs)在其现有 IPv4 基础设施上快速为客户提供 IPv6 连接(connectivity)。
图示说明:想象两个独立的 IPv6 网络需要跨越仅支持 IPv4 的互联网进行通信。来自网络 A 的一个 IPv6 数据包被边界路由器(border router)封装在一个 IPv4 数据包内。这个 IPv4 数据包穿越 IPv4 互联网。网络 B 的边界路由器对 IPv6 数据包进行解封装(decapsulates),并将其转发(forwards)到网络 B。
转换 (NAT64/DNS64)
Section titled “转换 (NAT64/DNS64)”转换机制(Translation mechanisms)允许仅支持 IPv6 的主机与仅支持 IPv4 的主机/服务之间进行通信。最常见的现代转换技术是 NAT64 结合 DNS64。
- DNS64 (RFC 6147):一种 DNS 服务器,当仅支持 IPv6 的客户端请求一个仅支持 IPv4 的主机名(hostname)时,它会从 A (IPv4) 记录合成(synthesizes)一个 AAAA (IPv6) 记录。这个合成的 IPv6 地址通常在一个特定的 NAT64 前缀(例如,知名前缀 64:ff9b::/96)内嵌入原始的 IPv4 地址。
- NAT64 (RFC 6146):一个网关(gateway),它将来自客户端的 IPv6 数据包(目标地址是合成的 IPv6 地址)转换为 IPv4 数据包,并反之将响应数据包进行转换。它会维护这些转换的状态,类似于传统的 IPv4 NAT。
工作原理:一个仅支持 IPv6 的客户端想要访问一个仅支持 IPv4 的服务器(例如,ipv4.example.com)。
- 客户端查询其 DNS64 服务器以获取
ipv4.example.com的信息。 - DNS64 服务器只找到
ipv4.example.com的一个 A 记录(例如,192.0.2.100)。 - DNS64 服务器合成一个 AAAA 记录(例如,64:ff9b::192.0.2.100 或十六进制的 64:ff9b::c000:0264),并将其返回(returns)给客户端。
- 客户端将 IPv6 数据包发送到这个合成的 IPv6 地址。
- NAT64 网关接收这些数据包,将 IPv6 头部(headers)转换为 IPv4 头部(提取(extracting)目标 IPv4 地址),然后将它们转发到 IPv4 服务器。
- 来自 IPv4 服务器的响应数据包由 NAT64 网关转换回 IPv6 并发送给客户端。
注意:NAT-PT (Network Address Translation - Protocol Translation, RFC 2766) 是一种早期的转换机制,但由于存在重大的操作问题(operational issues)和限制(limitations)现已弃用(deprecated)。