IPv6 迁移:双栈、隧道和 NAT64
使用正确的策略规划你的 IPv6 迁移。比较双栈、隧道和转换方法以适应你的网络。
为什么现在迁移#
IPv4 地址耗尽是真实的。所有区域互联网注册机构都已耗尽其池。组织为小型 IPv4 块支付高价,而 IPv6 地址空间仍然是免费的。除了地址之外,IPv6 消除了 NAT 复杂性,简化了路由,并且随着主要平台优先处理 IPv6 流量,它越来越成为竞争要求。
商业案例很简单:你的用户已经在 IPv6 网络上(移动运营商、云提供商、现代 ISP),但你可能还没有准备好有效地为他们提供服务。Apple 要求 iOS 应用支持 IPv6。Google 对启用 IPv6 的网站排名略高。IPv6 流量每年增长 25-30%。
三种迁移方法#
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 - DMZ3. 配置网络基础设施
在边界路由器上启用 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 之间选择的算法。理解这有助于调试连接问题。
过程:
- DNS 查找返回 A(IPv4)和 AAAA(IPv6)记录
- 系统首先尝试 IPv6 连接
- 50-250 毫秒后(特定于实现),并行启动 IPv4 尝试
- 第一个成功的连接获胜
- 结果缓存用于后续连接到同一主机
这确保用户获得最佳可用连接,而没有明显的延迟。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 服务的透明访问。
工作原理:
- 仅 IPv6 客户端查询
ipv4only.example.com的 DNS - DNS64 服务器仅看到 A 记录(IPv4),没有 AAAA 记录(IPv6)
- DNS64 使用 NAT64 前缀合成 AAAA 记录:
64:ff9b::198.51.100.5 - 客户端向合成的 IPv6 地址发送数据包
- NAT64 网关转换为 IPv4 并转发
- 返回流量转换回 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 网络访问 IPv4 | NAT64/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 采用继续加速。现在开始,即使是逐步进行,也会使你的网络为未来做好准备,而你的竞争对手稍后争先恐后地赶上。
相关文章#
- 如何在 Windows、macOS、Linux 和路由器上启用 IPv6 - 在你的设备和网络上实施 IPv6 的实用指南。
- AWS、Azure 和 GCP 中的 IPv6 - 了解如何在主要云平台上部署 IPv6。
亲自尝试
使用我们的 IPv6 Ping 和 Traceroute 工具测试你的迁移进度。