ping6.net
迁移

IPv6 迁移:双栈、隧道和 NAT64

使用正确的策略规划你的 IPv6 迁移。比较双栈、隧道和转换方法以适应你的网络。

ping6.net2024年2月15日5 min read
IPv6迁移双栈隧道NAT646to4

为什么现在迁移#

IPv4 地址耗尽是真实的。所有区域互联网注册机构都已耗尽其池。组织为小型 IPv4 块支付高价,而 IPv6 地址空间仍然是免费的。除了地址之外,IPv6 消除了 NAT 复杂性,简化了路由,并且随着主要平台优先处理 IPv6 流量,它越来越成为竞争要求。

商业案例很简单:你的用户已经在 IPv6 网络上(移动运营商、云提供商、现代 ISP),但你可能还没有准备好有效地为他们提供服务。Apple 要求 iOS 应用支持 IPv6。Google 对启用 IPv6 的网站排名略高。IPv6 流量每年增长 25-30%。

TL;DR - 快速摘要

要点:

  • 双栈(同时运行 IPv4 和 IPv6)是大多数网络的推荐方法
  • 隧道(6in4、6rd)是临时的——仅在原生 IPv6 不可用时使用
  • 转换(NAT64/DNS64)使仅 IPv6 客户端能够访问仅 IPv4 服务
  • 从低风险服务的双栈开始,逐步扩展到生产
  • 永远不要使用已弃用的 6to4 或 Teredo——现代替代方案更好

跳转至: 双栈部署 | 隧道 | 转换 | 决策框架


三种迁移方法#

IPv6 迁移不是一刀切的。你有三种基本策略:

方法工作原理最适合
双栈同时运行 IPv4 和 IPv6具有 ISP IPv6 支持的生产网络
隧道在 IPv4 数据包内封装 IPv6没有原生 IPv6 连接的网络
转换在 IPv4 和 IPv6 之间转换数据包连接仅 IPv6 到仅 IPv4 系统

大多数生产网络使用双栈。隧道作为临时桥梁。转换处理协议必须互操作的边缘情况。

双栈部署#

双栈意味着每个网络设备都使用两种协议。服务器有一个 IPv4 地址(192.0.2.10)和一个 IPv6 地址(2001:db8::10)。应用程序根据目标和偏好选择使用哪个协议。

┌─────────────────────────────────┐
│      应用层                      │
├─────────────────────────────────┤
│  TCP/UDP(协议无关)             │
├──────────────┬──────────────────┤
│  IPv4 栈     │   IPv6 栈        │
│  192.0.2.10  │  2001:db8::10    │
└──────────────┴──────────────────┘
         │              │
    IPv4 网络      IPv6 网络

优势#

双栈不会产生兼容性问题。仅 IPv4 客户端继续正常工作。IPv6 客户端获得原生连接。你可以按照自己的节奏进行迁移,而不会中断服务或与外部方协调。

随着时间的推移,网络架构会简化。随着 IPv6 采用率的增长,你可以逐渐弃用 IPv4 服务。没有标志日。没有迁移周末。只是稳定的进步。

实施步骤#

1. 验证硬件支持

检查路由器、交换机和防火墙是否支持 IPv6。过去十年的大多数企业设备都支持,但要验证固件版本。一些较旧的设备需要更新。

2. 设计你的地址方案

从你的 ISP(或大型组织的 RIR)请求 /48 或更大的前缀。规划你的子网结构。与 IPv4 的严格子网划分不同,对所有 LAN 使用 /64,这是启用 SLAAC 的标准子网大小。

/48 分配示例:

2001:db8:0100::/48  - 从 ISP 收到
2001:db8:0100:0001::/64  - 数据中心服务器
2001:db8:0100:0002::/64  - 办公室 LAN
2001:db8:0100:0003::/64  - 访客网络
2001:db8:0100:0010::/64  - DMZ

3. 配置网络基础设施

在边界路由器上启用 IPv6 路由。配置路由器通告(SLAAC)或 DHCPv6 进行地址分配。更新防火墙规则,这很关键且经常被遗忘。

4. 部署到服务器

从低风险服务开始。添加 AAAA DNS 记录。在迁移到生产服务之前彻底测试。监控 IPv4 和 IPv6 流量模式。

5. 启用客户端连接

现代操作系统自动处理双栈。SLAAC 无需 DHCP 即可配置地址。客户端接收 IPv4(通过 DHCP)和 IPv6(通过 SLAAC)地址并适当选择。

安全漏洞

最常见的双栈故障:忘记配置 IPv6 防火墙规则。攻击者扫描没有过滤的启用 IPv6 的主机。对两种协议应用相同的安全策略。

Happy Eyeballs:协议选择#

RFC 8305 定义了「Happy Eyeballs」,现代系统用来在 IPv4 和 IPv6 之间选择的算法。理解这有助于调试连接问题。

过程:

  1. DNS 查找返回 A(IPv4)和 AAAA(IPv6)记录
  2. 系统首先尝试 IPv6 连接
  3. 50-250 毫秒后(特定于实现),并行启动 IPv4 尝试
  4. 第一个成功的连接获胜
  5. 结果缓存用于后续连接到同一主机

这确保用户获得最佳可用连接,而没有明显的延迟。IPv6 获得优先权,但 IPv4 仍然是后备。

你可以使用我们的 IPv6 ping 工具测试此行为。比较双栈目标的响应时间。

隧道机制#

隧道将 IPv6 数据包包装在 IPv4 内,允许通过仅 IPv4 基础设施进行 IPv6 连接。将其视为临时解决方法,而不是永久解决方案。

原始:[IPv6 头部 | 数据]
隧道:[IPv4 头部 | IPv6 头部 | 数据]

6in4:手动隧道#

最简单的隧道方法。手动配置两个端点,IPv6 数据包通过 IPv4 网络作为协议 41(不是 UDP 或 TCP,原始 IP 协议 41)流动。

Linux 配置示例:

# 创建隧道接口
ip tunnel add he-ipv6 mode sit remote 209.51.161.14 local 203.0.113.50 ttl 255
 
# 分配 IPv6 地址(从隧道代理)
ip addr add 2001:470:1f0a:1ab::2/64 dev he-ipv6
 
# 设置链接
ip link set he-ipv6 up
 
# 添加默认 IPv6 路由
ip route add ::/0 dev he-ipv6
 
# 验证
ping6 google.com

要点:

  • 协议 41 必须通过防火墙/NAT(经常被阻止)
  • 隧道端点需要静态 IPv4 地址
  • Hurricane Electric 和其他隧道代理提供免费端点
  • 根据隧道代理位置增加约 10-30 毫秒延迟

6rd:ISP 快速部署#

6rd 允许 ISP 通过现有 IPv4 基础设施向客户提供 IPv6。ISP 运行中继服务器,客户路由器自动隧道 IPv6 流量。

与 6to4 不同,6rd 使用 ISP 特定的前缀和 ISP 控制的中继,使其更可靠和安全。你不会手动配置这个,如果你的 ISP 支持,它会自动提供。

DS-Lite:IPv4 over IPv6#

DS-Lite 反转了典型场景:它通过仅 IPv6 网络提供 IPv4 连接。由过渡到仅 IPv6 基础设施同时维护 IPv4 服务的 ISP 使用。

客户 ----[IPv4-in-IPv6]----> ISP AFTR ----[IPv4]----> 互联网

客户设备(B4 元素)将 IPv4 隧道到 ISP 的 AFTR(地址族转换路由器)内的 IPv6,后者在转发到 IPv4 互联网之前执行 NAT44。

最终用户通常不配置 DS-Lite,它由 ISP 管理。

已弃用:6to4 和 Teredo

**不要在新部署中使用 6to4(2002::/16)或 Teredo。**由于可靠性和安全问题,两者都已正式弃用。

6to4 依赖于可用性差的任播中继。Teredo 引入了 NAT 穿越的安全问题。现代隧道代理或原生双栈是更好的解决方案。

转换技术#

转换在网络层在 IPv6 和 IPv4 之间转换数据包。当一侧是仅 IPv6,另一侧是仅 IPv4 时,这使通信成为可能。

NAT64 与 DNS64#

NAT64 将 IPv6 数据包转换为 IPv4,反之亦然。与 DNS64 结合使用,它提供从仅 IPv6 网络对仅 IPv4 服务的透明访问。

工作原理:

  1. 仅 IPv6 客户端查询 ipv4only.example.com 的 DNS
  2. DNS64 服务器仅看到 A 记录(IPv4),没有 AAAA 记录(IPv6)
  3. DNS64 使用 NAT64 前缀合成 AAAA 记录:64:ff9b::198.51.100.5
  4. 客户端向合成的 IPv6 地址发送数据包
  5. NAT64 网关转换为 IPv4 并转发
  6. 返回流量转换回 IPv6
┌─────────────┐         ┌─────────────┐         ┌─────────────┐
│ IPv6 客户端 │         │   NAT64     │         │ IPv4 服务器 │
│             │─────────│   网关      │─────────│             │
│2001:db8::1  │  IPv6   │  + DNS64    │  IPv4   │198.51.100.5 │
└─────────────┘         └─────────────┘         └─────────────┘

众所周知的 NAT64 前缀:64:ff9b::/96(RFC 6052)

NAT64 需要有状态转换,网关维护会话状态,就像传统的 NAT44 一样。这引入了与 IPv4 NAT 相同的扩展问题。

464XLAT:启用 IPv4 应用程序#

464XLAT 通过添加客户端转换(CLAT)扩展 NAT64,允许仅 IPv4 应用程序在仅 IPv6 网络上工作。

┌──────────────┐      ┌──────────────┐      ┌──────────────┐
│ IPv4 应用    │      │              │      │ IPv4 服务器  │
│              │      │ 仅 IPv6      │      │              │
│ 192.0.0.1    │      │ 网络         │      │ 198.51.100.5 │
└──────┬───────┘      └──────────────┘      └──────────────┘
       │                                             │
    CLAT(设备)                                PLAT(ISP)
    NAT46                                       NAT64

移动网络广泛使用 464XLAT。你的手机运行仅 IPv6 栈,但传统的仅 IPv4 应用程序仍然可以透明工作。Android 和 iOS 都原生支持 CLAT。

选择你的策略#

基于网络特征的决策框架:

从 ISP 获得原生 IPv6?

   ├─ 是 ──> 部署双栈(推荐)
   │          1. 在边界路由器上启用 IPv6
   │          2. 配置 SLAAC/DHCPv6
   │          3. 更新防火墙规则
   │          4. 向 DNS 添加 AAAA 记录

   └─ 否 ──> 立即需要 IPv6?

              ├─ 是 ──> 使用隧道代理
              │          (Hurricane Electric 等)

              └─ 否 ──> 从 ISP 请求 IPv6
                        或计划迁移时间表

策略选择矩阵#

你的情况推荐方法实施工作量
具有 IPv6 ISP 的企业双栈中等(一次性配置)
具有 IPv6 ISP 的家庭/小型办公室双栈低(在路由器上启用)
ISP 仅提供 IPv4隧道代理(临时)低(但增加延迟)
仅 IPv6 网络访问 IPv4NAT64/DNS64中等(网关部署)
移动运营商464XLAT(自动)不适用(运营商管理)
需要从 IPv6 访问你的仅 IPv4 服务双栈你的服务中等

常见陷阱#

1. 不完整的防火墙配置#

IPv6 流量通常绕过 IPv4 防火墙规则。安全团队配置广泛的 IPv4 策略,但完全忘记 IPv6。结果:未过滤的 IPv6 连接。

**解决方案:**对两种协议应用等效的安全策略。如果你在 IPv4 上阻止端口 23(telnet),请在 IPv6 上阻止它。对两者使用状态检查。

2. DNS 配置错误#

在没有工作的 IPv6 连接的情况下发布 AAAA 记录会破坏启用 IPv6 客户端的访问。Happy Eyeballs 有帮助,但会导致延迟和回退到 IPv4。

**解决方案:**仅在验证 IPv6 连接工作后才发布 AAAA 记录。监控 A 和 AAAA 查询模式。为 IPv6 地址配置反向 DNS(PTR 记录)。

3. 应用程序兼容性问题#

硬编码 IPv4 假设的应用程序在 IPv6 上失败:

  • 将 IP 地址存储在 32 位整数中
  • 仅匹配 IPv4 格式的正则表达式模式
  • 未在 URL 中用括号括起 IPv6 地址:http://[2001:db8::1]:8080/
  • 绑定到 0.0.0.0 而不是 ::(IPv6 通配符)

**解决方案:**使用仅 IPv6 连接彻底测试应用程序。使用双栈测试环境。检查代码中的 IPv4 假设。

4. 监控盲点#

网络监控通常跟踪 IPv4 指标但忽略 IPv6。如果 IPv6 连接降级或完全失败,你不会注意到。

解决方案:

  • 分别监控 IPv6 和 IPv4 流量
  • 设置 IPv6 特定的健康检查
  • 跟踪协议偏好分布(使用 IPv6 的流量百分比)
  • 对 IPv6 可用性问题发出警报

使用我们的 IPv6 子网计算器规划地址和我们的 ping 工具验证连接。

从简单开始#

在非关键系统上从双栈开始。测试服务器、开发环境或内部工具。验证 IPv6 连接工作。添加 AAAA 记录。监控流量。

一旦熟悉,扩展到生产服务。大多数现代基础设施以最少的配置支持 IPv6。技术迁移很简单,组织变革和彻底测试需要更长时间。

如果你无法立即获得原生 IPv6,隧道可以作为临时桥梁。但要向你的 ISP 推动原生支持。转换处理边缘情况,但不应该是你的主要策略。

IPv6 采用继续加速。现在开始,即使是逐步进行,也会使你的网络为未来做好准备,而你的竞争对手稍后争先恐后地赶上。

相关文章#

亲自尝试

使用我们的 IPv6 PingTraceroute 工具测试你的迁移进度。