过渡技术选型:双栈、隧道与 NAT64
IPv4 与 IPv6 是两套不兼容的协议,而现实中它们必须长期共存。用于连接两者的技术统称过渡技术。理解它们的分工,才能做出正确的选型——很多"IPv6 部署事故"源于选错了过渡方案。
一、三大类别
① 双栈(Dual Stack) 设备同时跑 v4 和 v6,各走各的
② 隧道(Tunneling) 把 v6 包封装在 v4 里(或反之)穿过不支持的网段
③ 转换(Translation) 在两种协议之间做地址/头部转换
选型总原则:能用双栈就用双栈;隧道只作过渡或特定链路;转换只在"必须让 v6-only 客户端访问 v4 服务"时使用。
二、双栈:首选方案
RFC 4213 描述的经典机制。设备同时拥有 v4 与 v6 地址,按 DNS 解析结果(Happy Eyeballs)选择使用哪一栈。
| 优点 | 代价 |
|---|---|
| 协议原生,无封装无转换 | 需要维护两套地址与路由 |
| 支持"渐进式"启用,随时可回滚 | 安全策略要写两遍(最容易漏的地方) |
| 应用几乎无需改造 | 双栈资产发现与监控工作翻倍 |
这就是当前互联网的主流形态:不是"IPv4 换成 IPv6",而是"两者并存,v6 占比逐渐上升"。
三、隧道:过渡期的临时手段
隧道把一种协议的报文封装进另一种协议,用于"中间有段网络不支持 IPv6"的场景。
| 技术 | 原理 | 现状 |
|---|---|---|
| 手工隧道(GRE、6in4) | 管理员在两台设备间配置固定封装 | 仍可用,适合可控的点对点 |
| 6to4 | 用 2002::/16,从 v4 地址自动派生 v6 前缀 |
已弃用,不要新部署(RFC 7526) |
| Teredo | 把 v6 封装进 UDP,穿透 NAT,前缀 2001::/32 |
仅用于特定客户端场景(RFC 4380) |
| ISATAP | 在 v4 内部网络上做主机级隧道 | 已不推荐(RFC 5214 明确不建议广泛部署) |
| 6rd | 运营商级 6to4 改进版,由运营商统一参数 | 部分运营商早期使用(RFC 5969) |
为什么自动隧道不该长期用? 因为它们往往绕过边界安全策略:一条封装在 UDP 443 里的 Teredo 流量,看起来像普通网页访问。这也是安全加固清单里建议显式禁用自动隧道的原因。
四、转换:让 v6-only 客户端访问 v4 服务
当客户端只有 IPv6(典型如纯 v6 移动网络),而目标服务只有 IPv4 时,需要在网络侧做协议转换。
| 技术 | 作用 | 参考 |
|---|---|---|
| NAT64 | 有状态地址与协议转换,v6 客户端 ↔ v4 服务 | RFC 6146 |
| DNS64 | 把只有 A 记录的域名合成为 AAAA(用 NAT64 前缀) | RFC 6147 |
| 464XLAT | 客户端侧 CLAT + 网络侧 PLAT,移动网络大量使用 | RFC 6877 |
| SIIT | 无状态 IP/ICMP 转换 | RFC 6145 |
| NAT46 | 反向转换(v4 客户端访问 v6 服务),较少用 | — |
NAT64 + DNS64 的工作流程:
① v6-only 客户端查询 www.example.com(只有 A 记录)
② DNS64 发现无 AAAA,合成 AAAA:64:ff9b::192.0.2.10
③ 客户端连接这个 IPv6 地址
④ NAT64 网关把它转换成一个 IPv4 连接发往 192.0.2.10
⑤ 返回流量按反向规则转换回 IPv6
必须知道的三个限制:
- NAT64 之后,IPv6 的端到端优势失效。转换网关就是新的中间人,P2P 直连、来源认证都会受影响。
- DNSSEC 会被破坏。DNS64 合成的 AAAA 记录无法通过 DNSSEC 验证,这是该机制的固有矛盾。
- 应用若内嵌 IPv4 字面量会失效。例如代码里硬编码
192.168.1.1或直接解析 A 记录的应用,在纯 v6 环境下会出问题。这也提醒我们:写代码时应始终使用域名,而不是硬编码地址。
五、选型速查
| 你的情况 | 推荐方案 |
|---|---|
| 新建网络,终端与服务都支持双栈 | 双栈(唯一推荐) |
| 两处机房之间链路不支持 v6 | 手工隧道(可控、可审计) |
| 移动网络,客户端纯 v6 而互联网仍有大量 v4 服务 | 464XLAT / NAT64+DNS64 |
| 想让 v6 客户端访问内部只有 v4 的老系统 | NAT64 + DNS64(注意 DNSSEC 与硬编码问题) |
| 想"顺手试试 IPv6" | 不要用自动隧道;先在双栈环境里练手 |
选型三问:
- 客户端是双栈还是单栈?
- 服务端是双栈还是单栈?
- 中间有没有安全边界会被封装流量绕过?
六、给实施者的提醒
- 隧道方案要登记在册。未登记的隧道是审计盲区。
- 转换方案要评估来源识别能力。转换后,服务端看到的是网关地址,日志与限流口径需相应调整(例如 NAT64 前缀同样应按前缀归并计数)。
- 不要混用多套过渡技术。同时跑 6to4 + Teredo + NAT64 的环境,排障成本会迅速失控。
- 回滚路径要预先设计。双栈的最大优势就是"不想要了可以直接停掉 v6",不要为了过渡技术而丢掉这个优势。
小结
- 双栈是唯一推荐的长期方案,隧道与转换都是特定条件下的手段。
- 6to4 已弃用,ISATAP 不建议部署,自动隧道还是绕过安全策略的通道。
- NAT64 + DNS64 用于 v6-only 客户端访问 v4 服务,代价是端到端能力与 DNSSEC。
- 应用开发不要硬编码 IP 地址,否则在纯 v6 环境下必然出问题。
下一篇:《IPv6 的典型应用场景与落地路径》。