IPv6 过渡隧道实战:双栈、6in4、NAT64 与 DS-Lite 到底怎么选
IPv4 地址早已耗尽,但 IPv6 又不可能一夜之间替换掉整个互联网。于是长达十几年的“过渡期”里,IPv4 海洋中漂浮着 IPv6 小岛,两者必须长期共存、互相打通。这个“打通”靠的就是过渡技术:双协议栈、隧道、协议翻译三大类。本文不堆 RFC 编号,只讲运维在真实网络里怎么选、怎么配、会踩什么坑。
1. 先定调:双协议栈永远是第一选择
如果设备、操作系统、上游链路都支持,直接跑双协议栈——同一台机器同时拥有 IPv4 和 IPv6 地址,应用按自己的支持情况选路。它不需要任何封装开销,两端原生互通,是 IETF 和所有主流运营商的首选迁移路径。隧道和翻译都是“上游不给 IPv6”或“想彻底 IPv6-only”时的妥协方案。所以动手前先确认:我的 ISP/云厂商给 IPv6 了吗?给了就双栈,别折腾隧道。
2. 隧道机制:把 IPv6 包塞进 IPv4
当两端之间夹着一段只认 IPv4 的网络时,隧道把 IPv6 数据包整个封装进 IPv4 包里传过去,到对端再拆出来。常见几种:
- 6in4(手动隧道):你在两端手动配置隧道端点,最稳定可靠。Hurricane Electric 的 tunnelbroker.net 免费提供,适合 ISP 不给 IPv6 的个人和小型网络。它不依赖公共中继,延迟和稳定性都可控。
- 6to4(RFC 3056):用嵌入在特殊前缀里的 IPv4 地址自动建隧道,不用注册。但依赖公共中继路由器,这些中继往往不可靠、延迟高,还能被任意中继拦截,安全性差。RFC 7526 已正式将其废弃,新部署不要用。
- Teredo(RFC 4380):为穿透 NAT 设计,把 IPv6 藏在 UDP/IPv4 里。代价是延迟高、绕开安全策略,且大多数现代操作系统默认禁用。属于遗留方案,避免。
- ISATAP(RFC 5214):用于 IPv4 站内自动给主机分配 IPv6,主要在大型企业内网过渡期用过,现已不推荐。
选型口诀:用 6in4,别碰 6to4 和 Teredo。
3. 实战:用 Hurricane Electric 建一条 6in4 隧道
ISP 没给 IPv6 时的标准做法。在 tunnelbroker.net 申请后,Linux 上建立隧道接口:
ip tunnel add he-ipv6 mode sit remote 216.66.22.2 local 你的IPv4地址
ip link set he-ipv6 up
ip addr add 2001:470:xxxx::2/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
sit 模式即 6in4 封装;remote 是 HE 的隧道服务器,local 必须是你面向公网的 IPv4(CGNAT 环境下这条会失败,因为 HE 看不到你的真实出口)。打通后用 ping6 测连通,再在 HE 面板把你的 /48 或 /64 段路由进来,内网就能分配 IPv6 了。两个工程要点:第一,MTU 必须调小(见第 6 节);第二,隧道是单点,HE 服务器宕机你 IPv6 就断,要监控。
4. NAT64 + DNS64:让 IPv6-only 访问 IPv4
这是方向相反的工具:当你的网络已经是 IPv6-only(常见于手机运营商、现代化数据中心),但互联网上仍有大量只有 IPv4 的服务器,就需要翻译而非隧道。NAT64 在网关把 IPv6 包翻译成 IPv4 包发出去,DNS64 则在解析时把只有 A 记录的域名“合成”出一个 IPv6 地址(标准前缀 64:ff9b::/96),让 IPv6-only 主机以为对方也是 IPv6。
组合工作流程:主机查 example.com,DNS64 发现只有 A 记录(IPv4),就构造 64:ff9b::<IPv4> 这种 IPv6 地址返回;主机把包发往这个地址,NAT64 网关拆出内嵌的 IPv4,转成 IPv4 出去。代价:翻译是有状态的,部分不支持 NAT 的应用(某些 VoIP、FTP 主动模式)会出问题;且它是单向的——IPv4-only 主机无法主动访问 IPv6 资源。
5. 运营商方案:DS-Lite / 464XLAT / MAP-E / MAP-T
普通用户不直接配置这些,但会“躺在上面”。当运营商 IPv4 耗尽,就给用户只发 IPv6,把 IPv4 流量封装进 IPv6 送到运营商的 CGNAT:DS-Lite 是 IPv4-in-IPv6 隧道到运营商;464XLAT 给 IPv4-only 应用做客户端侧 NAT64;MAP-E/MAP-T 是无状态的端口受限 NAT 映射。对用户的影响是:拿不到公网 IPv4、入站连接基本不可能、部分 P2P 和游戏联机受影响。理解它们能解释“为什么家里没公网 IP、为什么端口映射不灵”。
6. MTU 黑洞:隧道最经典的坑
IPv6 包外加一层 IPv4 头,封装后总字节变大。如果链路 MTU 没相应调小,大于 MTU 的包被丢弃,而 PMTUD(路径 MTU 发现)又常因防火墙拦截 ICMP 而失效,表现就是:小请求正常,大文件或某些 HTTPS 资源卡死。排查:把隧道接口 MTU 设到 1480 或 1420,并放行 ICMPv6/ICMP 让 PMTUD 生效;用 ping6 -s 逐步加大包大小定位断点。配置任何隧道,MTU 必须同步调。
7. 上线后的巡检与防退化纪律
IPv6 过渡配置看似一次配好,实则会退化:HE 隧道凭证过期、ISP 哪天突然给了 IPv6 导致双栈和隧道冲突、NAT64 网关故障让 IPv6-only 网络突然访问不了 IPv4。建立纪律:
- 每日:监控隧道端点到 HE 的连通性、NAT64 网关存活,断了 IPv6 出口会无声降级。
- 每月:确认 HE 账户与隧道状态未过期;检查内网 IPv6 地址分配是否正常(SLAAC/DHCPv6)。
- 每次 ISP 变更前:若 ISP 开始提供原生 IPv6,优先切双栈并拆除用户隧道,避免两套出口互相干扰路由。
- 红线:禁止在生产用 6to4/Teredo 这类已废弃或默认禁用的机制;禁止开了隧道却忘了调 MTU;禁止 IPv6-only 网络不配 NAT64 兜底就直接关掉 IPv4。
FAQ
ping -s 逐步加大包大小定位断点。这是隧道最经典的坑,配置隧道时 MTU 必须同步调。