Teredo 本来是给每个 IPv4 NAT 后的用户一个全球可路由 IPv6 地址的方案。2026 年它基本是博物馆展品了——微软默认关、公开 Teredo 服务器几乎全没、Linux 内核也移除了。本文讲 Teredo 是什么、协议怎么工作、现在替代它的是什么。

Teredo 协议定义在 RFC 4380(2006-02,C. Huitema / 微软,Proposed Standard)。它解决一个具体问题:主机在一个或多个 IPv4 NAT 后,不依赖网络运营商配合,就能拿到全球可路由 IPv6 地址和 IPv6 互联网通路。

到 2026 年这个问题基本消失了——大多数 ISP 和内容方是双栈——但协议本身和安全教训仍值得知道。

Teredo 解决的问题(以及为什么现在不重要了)

2000 年代中早期:世界上相当比例的互联网用户在 NAT 后面(多数家用路由器),而越来越比例的内容是 IPv6-only 或 IPv6 优先。IPv4-only ISP 加 SOHO NAT 的用户不换 ISP 就拿不到 IPv6——通常也没法换。IETF 花了 2002-2005 年设计 Teredo,专门作为”通过 NAT 工作、不需要用户做任何事”的最坏情况兜底隧道。

到 2026 年:

  • Google IPv6 统计全球 40-50%+ 用户(Google 测量)
  • 大多数主流内容方(Google、Meta、Cloudflare、Akamai-fronted)双栈或 IPv6 优先
  • 大多数 transit 网络和 IXP 有原生 IPv6
  • “IPv4-only ISP” 现在是少数派
  • Teredo 设计要解决的那个 case 缩小到”少数几个地区的旧设备”

这就是 Teredo 失宠的原因。2019-12-30 MaxMind GeoLite2 license 变化、2021 Miredo 项目终结、2024 Linux 内核陆续移除,都是同一件事的下游结果:Teredo 解决的那个问题已经少见到不值得维护代码了

协议实际怎么工作

Teredo 是 IPv6-in-IPv4-in-UDP。外层 UDP 端口 3544(RFC 4380 §2.7)。Teredo IPv6 前缀 2001:0000::/32——一个 Teredo 客户端拿到的地址长这样 2001:0:xx:yy:zzzz:aaaa:bbbb:cccc,其中嵌入的 IPv4 和 NAT cone 标记位让 relay 能 de-NAT 那个包。

架构三个组件:

  1. Teredo client —— 在一个或多个 NAT 后面想要 IPv6 的主机。维护隧道,把出站 IPv6 包封装在 IPv4/UDP/3544 里。
  2. Teredo server —— 无状态的 IPv4 rendezvous 点。给 client 分配一个 Teredo IPv6 地址(地址编码了 client 的公网 IPv4 + cone NAT flag),并反射初始的 bubble exchange 在 client 路径上创建 NAT mapping。
  3. Teredo relay —— IPv6 路由器,从 client 那里 decapsulate UDP/3544 然后把 IPv6 包转发到原生 IPv6 互联网,反向同理。

“bubble” 是一个小 ICMPv6 echo 包(Router Solicitation + Router Advertisement + 一个额外的 “bubble” ICMPv6 echo),server 反射回 client。bubble 整个目的就是在 NAT mapping 上戳个洞——多数 NAT 盒在看到出站 UDP 包时创建一个临时的出站 mapping,bubble 做这件事——但包从 server 来,不是 peer。一旦 NAT mapping 存在,后续来自 peer 的包可以 peer-to-peer 流过 relay,绕过 server。

这对 cone NAT 有效——那种不管 peer 是谁、相同外部端口都映射到同一内网主机的 NAT。对 symmetric NAT(mapping 依赖目的)无效。对称 NAT 的用户 Teredo client 退到 “Teredo relay” 模式——所有流量都过 relay——这就是为什么 Teredo 一直是 worst-case fallback,不是主连接方式。

RFC 4380 元数据

字段
标题 Teredo: Tunneling IPv6 over UDP through Network Address Translations (NATs)
作者 C. Huitema(微软)
日期 2006-02
状态 Proposed Standard(Standards Track)
DOI 10.17487/RFC4380
更新 RFC 5765(安全 errata)、RFC 6081(扩展)、RFC 9601(ECN)
IANA 端口 UDP 3544
前缀 2001:0000::/32

安全问题(这些是为什么生产网不信任 Teredo)

  • Teredo relay 能看到所有 client 流量,明文。 两个 Teredo client 之间没有 E2E 保密,relay 能读每个包。对”我就想 IPv6″的场景没问题,但碰到凭据或 PII 立即放弃。
  • 公开 Teredo relay 经常被滥用做 IPv6→IPv4 SSRF 和 DDoS 反射。 Relay 会把任何封装的 IPv6 包转发到任何 IPv4 目的,配置错的 relay 变成攻击者的免费包走私服务。
  • Symmetric NAT 击破 bubble exchange。 这种 NAT 下的用户只能走 relay 模式,滥用向量加重。
  • RFC 4380 自己的 errata 107 注明原 spec 在 MAC 算法(MD5 vs SHA-1)上不一致。

2026 年现状

Windows 10 / 11

Windows 还带。有原生 IPv6 时自动 “dormant”。微软从 Windows 10 21H1 时代起在默认消费版 SKU 上逐步禁用。重新启用方式:

Powershell
# 看当前状态
Get-NetTeredoConfiguration
# 启用
Set-NetTeredoConfiguration -Type Enterpriseclient
netsh interface teredo set state enterpriseclient
# 或 Group Policy
Computer Configuration → Administrative Templates → Network → TCPIP Settings → IPv6 Transition Technologies

微软自己推荐原生 IPv6 或 6to4-disabled-only 配置。Teredo 在 Windows 上的剩余用户基本是传统 DirectX / Xbox Live 点对点应用——这些早于原生 IPv6 时代。

Linux kernel

Linux 内核里 in-kernel Teredo client 支持(实验性的 CONFIG_NET_TUN 配 Teredo 封装)历史上是 Miredo——主要的 userland 实现。Miredo 的作者 2021-06 终止了项目(remlab.net/miredo 上公布)。CZ.NIC(捷克 NIC)公开 Teredo 服务器 2021-10 / 11 关停(en.blog.nic.cz/2021/10/25 上公布)。Hurricane Electric 在 2021 年被记录为”最后几个”公开 Teredo 运营商之一;它 2026 年作为 2001::/32 下公开 anycast Teredo relay 的状态未公开验证

“2026 年在 Linux 上要 IPv6” 的实际答案不是 Teredo

macOS、iOS、Android

从未有原生 Teredo client 支持。 Apple 的 IPv6 过渡走 464XLAT(iOS / 蜂窝运营商用)。Android 一样。Teredo client 只在 Windows、BSD、(userland)Linux 通过 Miredo 上出现过。

公开 Teredo servers

2026 年实际为零。Miredo 作者 2021 年没通知就关了他公开的 server。CZ.NIC 跟着关了。Hurricane Electric 状态未验证,但它的主要公开服务是 tunnelbroker.net(6in4 协议,比 Teredo 简单得多)不是 Teredo。

2026 年替代 Teredo 的方案

协议 用途 在哪用
原生双栈 默认。主机同时有 IPv4 和 IPv6。 大多数现代网络。终态。
464XLAT(RFC 6877) 移动 / 运营商。客户侧 translator(CLAT)让 IPv4-only 应用跑在 IPv6-only 蜂窝链路上。 现代 LTE/5G 主流。iOS 和 Android 用这个。
DS-Lite(RFC 6333) ISP 侧。CPE 把 IPv4 封装在 IPv6 里到 ISP 网络的 AFTR(Address Family Transition Router)。 很多 DSL / 电信运营商(美国 Comcast、法国 Free 等)。
MAP-E(RFC 7597) 运营商级 NAT + 端口范围 + IPv6 前缀共享。 CGNAT 和 IPv6 在同一运营商共存时用。
MAP-T(RFC 7599) IPv4 和 IPv6 之间的无状态翻译。不用 NAT。 小众,少部署。
6rd(RFC 5969) ISP 运营的 6in4 快速部署。替代 6to4。 ISP 全双栈成本太高时用。
6to4(RFC 3056) 更老的 6in4 + 公开 anycast relay。基本废弃。 微软 Windows 用过很久。
Cloudflare WARP 终端用户隧道”给我 IPv6″。QUIC/UDP,加密。 严格说不算 IPv6 过渡机制,但功能上替代了 Teredo 给 NAT 后的终端用户。
WireGuard 站点到站点或 road-warrior VPN。把一个 routed 子网 over UDP 隧道。 在严格 NAT 后要全功能 IPv6(和 IPv4)连通性时替代 Teredo。

2026 年主流模式是“默认双栈、蜂窝侧 CGNAT+464XLAT fallback、ISP 没原生 IPv6 时用 DS-Lite 或 MAP-E”。Teredo 是历史好奇心。

2026 年实用建议

如果真要 IPv6:

  1. 用 Hurricane Electric 的 tunnelbroker.net。 免费、6in4、要求你有一个可控的公网 IPv4 endpoint。拿一个 /48 或 /64,配置 routed prefix,完成。
  2. 用 Cloudflare WARP。 免费、加密、双栈、大多数设备能跑、无 server 要管理。
  3. WireGuard 隧道到一个原生 IPv6 的 VPS。 Vultr / DigitalOcean / Linode / BandwagonHost 等便宜的 VPS 默认就带 IPv6。
  4. 如果你在 CGNAT 后没公网 IPv4,向 ISP 申请 DS-Lite 或 464XLAT。都不提供就用 WARP。
  5. 别跑 Teredo。 公开 Teredo server 几乎全没了、Linux 内核 in-kernel client 也移除了、安全故事也差。

如果为了学习 Teredo(论文、课程、或者维护一个传统应用),读 RFC 4380 然后跑历史 Miredo(有些发行版 archive 还在)配你自建的私有 lab Teredo server。Wireshark 抓 UDP/3544 上的 bubble 交换。30 分钟 lab 你比读任何文章学得多。

TL;DR

Teredo 是 2006 年的 tunnel-over-UDP/3544 协议,给 IPv4-NAT 后主机一个全球可路由 IPv6 地址。它通过三方 “bubble” exchange 在 NAT 上戳洞,之后 peer-to-peer 流量直走。到 2026 年它解决的问题(IPv4-only ISP、IPv6-only 内容)基本没了——多数网络双栈、多数 ISP 给一些原生 IPv6、464XLAT / DS-Lite / WireGuard / WARP 把剩下 CGNAT 场景覆盖得更好。Linux userland client(Miredo)2021 年终止。Linux 内核的 in-kernel native Teredo client 在近期 LTS 里逐步剥除。公开 Teredo server 实际全没了。微软还为传统 DirectX / Xbox Live 兼容在 Windows 上带 client,但默认关。Teredo 给的教训——关于 bubble punching、NAT 透明性可以靠 UDP 封装来换、2006 年的隧道协议在 2026 年看起来多古怪——仍值得知道,但协议本身在 2026 年不再是任何事的答案。


参考资料(2026 年 7 月核对):rfc-editor.org/info/rfc4380(RFC 4380 元数据,2006-02,Proposed Standard,C. Huitema);dl.acm.org/doi/book/10.17487/RFC4380(DOI);rfc-editor.org/errata_search.php?rfc=4380(errata 107);remlab.net/miredo/(Miredo 2021-06 终止、公开 server 关停);en.blog.nic.cz/2021/10/25/on-october-25-we-will-try-to-turn-off-ipv6-transition-technologies-teredo-and-6to4/(CZ.NIC 2021-11 关停);kernelnewbies.org/Linux_6.12(6.12 发布日 2024-11-17);现代替代 RFC 6877 (464XLAT)、RFC 6333 (DS-Lite)、RFC 7597 (MAP-E)、RFC 5969 (6rd)。

最后修改: 2026年7月14日

作者

评论

发表评论

您的邮箱地址不会被公开。