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 那个包。
架构三个组件:
- Teredo client —— 在一个或多个 NAT 后面想要 IPv6 的主机。维护隧道,把出站 IPv6 包封装在 IPv4/UDP/3544 里。
- Teredo server —— 无状态的 IPv4 rendezvous 点。给 client 分配一个 Teredo IPv6 地址(地址编码了 client 的公网 IPv4 + cone NAT flag),并反射初始的 bubble exchange 在 client 路径上创建 NAT mapping。
- 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 上逐步禁用。重新启用方式:
# 看当前状态
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:
- 用 Hurricane Electric 的 tunnelbroker.net。 免费、6in4、要求你有一个可控的公网 IPv4 endpoint。拿一个 /48 或 /64,配置 routed prefix,完成。
- 用 Cloudflare WARP。 免费、加密、双栈、大多数设备能跑、无 server 要管理。
- WireGuard 隧道到一个原生 IPv6 的 VPS。 Vultr / DigitalOcean / Linode / BandwagonHost 等便宜的 VPS 默认就带 IPv6。
- 如果你在 CGNAT 后没公网 IPv4,向 ISP 申请 DS-Lite 或 464XLAT。都不提供就用 WARP。
- 别跑 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)。
评论