IPv6 过渡技术
过渡的背景与挑战
IPv6 是未来的方向,但 IPv4 已经部署了 40 多年,不可能一夜切换。过渡期的核心挑战:
- IPv4-only 设备 如何访问 IPv6 服务?
- IPv6-only 网络 如何访问 IPv4 互联网?
- 双栈运营 成本高昂,如何平滑演进?
过渡技术分三大类:双栈、隧道、协议转换。
双栈(Dual Stack)
最简单粗暴的方案:主机/路由器同时运行 IPv4 和 IPv6,两个协议栈独立工作。
主机 A:
IPv4 地址:192.168.1.10
IPv6 地址:2001:db8::10
访问 www.example.com:
DNS 返回 A 记录(IPv4)和 AAAA 记录(IPv6)
优先尝试 IPv6(现代系统默认)
如果 IPv6 不通,回退 IPv4(Happy Eyeballs 算法)
优点:最干净,无转换开销 缺点:
- 需要同时维护两套地址、两套路由、两套安全策略
- 运营商需要同时采购 IPv4 和 IPv6 带宽
现状:企业和数据中心的主流方案,但运营商在探索 IPv6-only 以降低成本。
隧道技术:IPv6 over IPv4
把 IPv6 包封装在 IPv4 包里传输,像把中文信装进英文信封。
6to4(RFC 3056):自动隧道,已淘汰
- 任何有公网 IPv4 的主机自动生成 6to4 地址:
2002:IPv4::/48 - 例如 IPv4 203.0.113.1 → IPv6 前缀
2002:cb00:7101::/48 - 通过 6to4 中继路由器(Anycast 192.88.99.1)访问 IPv6 互联网
淘汰原因:
- 依赖公网 IPv4,CGNAT 环境下失效
- 中继路由器性能瓶颈
- 可靠性差
6rd(RFC 5969):ISP 版 6to4
运营商部署的改进版:
- 使用 ISP 自己的 IPv6 前缀,而非固定的 2002::/16
- 由 ISP 运营中继,可靠性高
- 光猫/路由器自动建立隧道
现状:曾广泛用于光纤宽带接入,现逐渐被双栈和原生 IPv6 替代。
ISATAP / Teredo:已淘汰
- ISATAP:内网 IPv6 over IPv4,企业内网场景,已废弃
- Teredo:UDP 隧道穿越 NAT,Windows 早期内置,已废弃
协议转换:IPv6 ↔ IPv4
隧道解决"IPv6 孤岛穿越 IPv4 海洋",但无法解决"IPv6-only 客户端访问 IPv4-only 服务器"。协议转换直接修改包的头部,实现两个协议的互通。
过渡技术的选择取决于具体场景:企业和数据中心目前以双栈为主;运营商光纤宽带用 DS-Lite 或向 IPv6-only + NAT64 演进;移动蜂窝网络用 464XLAT;大规模运营商正在部署 MAP-T/E 替代有状态的 CGNAT。
NAT64 + DNS64(RFC 6146/6147)
最主流的 IPv6-only 访问 IPv4 方案。
DNS64:合成 AAAA 记录
IPv6-only 客户端查询 www.example.com 的 AAAA 记录:
如果 example.com 只有 A 记录(IPv4):203.0.113.10
DNS64 服务器合成 AAAA 记录:
前缀: 64:ff9b::/96(Well-Known Prefix)
+ IPv4: 203.0.113.10
= 64:ff9b::cb00:710a
客户端收到 AAAA:64:ff9b::cb00:710a,以为是真正的 IPv6 地址
NAT64:有状态转换
客户端发送包到 64:ff9b::cb00:710a
↓
NAT64 网关截取
↓
提取嵌入的 IPv4 地址:cb00:710a = 203.0.113.10
↓
创建会话表:
[IPv6 客户端, IPv6 端口] ↔ [NAT64 公网 IPv4, IPv4 端口] ↔ [目标 IPv4, 目标端口]
↓
把 IPv6 头换成 IPv4 头,发给 203.0.113.10
↓
收到回复后,反向转换,发给 IPv6 客户端
NAT64 + DNS64 的巧妙之处在于对客户端完全透明:客户端以为自己访问的是一个普通 IPv6 地址(64:ff9b::/96 前缀),实际上 DNS64 在后台把 A 记录合成为 AAAA 记录,NAT64 网关负责 IPv6↔IPv4 的头部转换和会话状态维护。整个过程中客户端无需任何修改。
优点:IPv6-only 网络可以访问几乎所有 IPv4 服务 缺点:
- 有状态,需要维护会话表(和 NAT44 一样)
- 某些协议在载荷中嵌入 IP 地址(如 SIP、FTP),需要 ALG
- 无法支持 IPv4-only 客户端访问 IPv6-only 服务器(单向)
DS-Lite(RFC 6333):双栈精简
运营商光纤接入的主流方案:
家庭光猫(B4, Basic Bridging Broadband)
→ 只分配 IPv6 地址
→ IPv4 流量通过 IPv6 隧道发送到运营商 AFTR 设备
AFTR(Address Family Transition Router)
→ 解封装 IPv4-in-IPv6 隧道
→ 做 NAT44(IPv4 地址转换)
→ 发送到 IPv4 互联网
核心:光猫不需要公网 IPv4,只需要 IPv6;IPv4 流量走隧道到运营商集中做 NAT。
优点:运营商节省 IPv4 地址(只需 AFTR 有公网 IPv4) 缺点:
- IPv4 流量多一层隧道封装,MTU 降低(通常 1460 字节有效载荷)
- AFTR 是集中瓶颈,NAT 表压力大
464XLAT(RFC 6877):移动网络主流
手机蜂窝网络(4G/5G)广泛采用:
手机(CLAT, Customer-side Translator)
→ 手机本地做 NAT46:把 App 的 IPv4 请求转成 IPv6
→ 发送到 IPv6-only 核心网
运营商 PLAT(Provider-side Translator)
→ 做 NAT64,访问 IPv4 互联网
为什么手机用 464XLAT 而不是 DS-Lite?
- 手机 App 很多是 IPv4-only(尤其是老旧 App)
- CLAT 在手机本地做,App 无感知
- 移动核心网(EPC/5GC)正在向 IPv6-only 演进
MAP-T / MAP-E(RFC 7597/7598):无状态替代 CGNAT
运营商级 NAT(CGNAT)的问题:
- 有状态,会话表巨大,单点故障
- 日志记录压力大(法规要求记录 NAT 映射)
MAP(Mapping of Address and Port) 用算法替代状态表:
规则:IPv4 地址 + 端口范围 ↔ IPv6 前缀 是固定算法映射
例如:
公网 IPv4 203.0.113.1 + 端口 1536~2047
↔ 固定映射到 IPv6 前缀 2001:db8:1:2::/64
不需要会话表!路由器用算法实时计算映射关系
| 技术 | 机制 | 状态 | 场景 |
|---|---|---|---|
| MAP-T | 无状态 IPv4/IPv6 翻译 | 无状态 | 大规模运营商 |
| MAP-E | 无状态 IPv4-in-IPv6 封装 | 无状态 | 大规模运营商 |
优点:无状态,可扩展性好,故障恢复简单 缺点:配置复杂,端口范围受限(每个用户只能分到部分端口)
现代部署趋势
| 场景 | 主流方案 | 趋势 |
|---|---|---|
| 企业/数据中心 | 双栈 | 长期共存 |
| 运营商光纤宽带 | DS-Lite / 双栈 | 向 IPv6-only + NAT64 演进 |
| 移动蜂窝网络 | 464XLAT | 核心网 IPv6-only |
| 大规模运营商 | MAP-T/E | 替代 CGNAT |
| 云服务 | 双栈 + IPv6-only VPC | IPv6-only 内部网络 |
本篇小结
- 过渡技术三类:双栈(最干净)、隧道(穿越)、协议转换(互通)
- 6to4/ISATAP/Teredo 已淘汰;6rd 曾用于宽带接入
- NAT64+DNS64 让 IPv6-only 访问 IPv4,是当前主流
- DS-Lite 用于光纤宽带,光猫 IPv6-only,IPv4 走隧道到 AFTR
- 464XLAT 用于移动网络,手机本地 CLAT + 运营商 PLAT
- MAP-T/E 是无状态替代 CGNAT 的方案,适合大规模部署
动手实践
访问 https://test-ipv6.com/,测试你的网络支持哪些过渡技术
查看本机是否获取了 IPv6 地址,尝试
ping -6 2001:4860:4860::8888(Google IPv6 DNS)在 Linux 上配置 NAT64 测试环境(使用 tayga 或 jool)
思考:为什么 MAP-T/E 能做到"无状态"?端口范围受限对普通用户有什么影响?(P2P 联机更困难)