公众号旧文

为什么Tailscale用的是100.64.0.0/10,而不是10.0.0.0/8?

作者:胖子阅读 —

这是一个非常经典、也非常工程化的设计问题。 Tailscale 选择 100.64.0.0/10,而不是 10.0.0.0/8,核心原因只有一个:避免和用户自己的局域网冲突。

但这里面其实有几个很有意思的网络设计逻辑。

一、10.0.0.0/8 太常见了(冲突概率极高)

10.0.0.0/8 是三大私有网段之一(来自 RFC 1918):

私有网段 常见用途
10.0.0.0/8 企业网络、云 VPC
172.16.0.0/12 企业网络
192.168.0.0/16 家庭路由器

现实情况是:

  • AWS VPC:默认 10.0.0.0/16
  • GCP VPC:大量 10.x.x.x
  • 公司内网:10.0.x.x
  • Kubernetes:很多 Pod 网段也在 `10.x.x.x```

也就是说:

10.x.x.x 几乎到处都是

如果 Tailscale 也用这个网段:

你的 Tailnet IP:10.1.2.3
公司内网:10.1.0.0/16

那就会出现路由冲突

系统会不知道:

10.1.2.3 走:
- 本地局域网?
- 还是 WireGuard 隧道?

二、而100.64.0.0/10 是一个“几乎没人用”的网段

100.64.0.0/10 来自一个特殊标准:

RFC 6598

这个网段叫:CGNAT (Carrier Grade NAT)

范围是:

100.64.0.0 — 100.127.255.255

用途本来是:

运营商 NAT

例如:

用户手机
↓
100.70.x.x
↓
运营商 NAT
↓
公网

关键点:

普通局域网 几乎不会用这个网段,所以冲突概率非常低。

三、Tailscale 的一个聪明设计

Tailscale 的目标是:让不同网络的机器像在同一个局域网

但现实世界是:

家里
公司
云服务器
Kubernetes
手机热点

每个地方都可能有:

10.x.x.x
192.168.x.x

如果Tailscale再用这些网段,冲突概率非常大。

于是 Tailscale 选择:

100.64.0.0/10

优点:

优点 说明
几乎没人用 冲突极少
不是公网 不会泄露
地址很多 400万+
专门 NAT 设计 适合 overlay 网络

四、其实不止 Tailscale 在用

很多 现代 overlay 网络 都用了这个段:

产品 网段
Tailscale 100.64.0.0/10
Nebula 常见
Netmaker 推荐
ZeroTier 默认私有

原因一样:减少冲突。

五、一个非常有意思的现实问题

你如果在手机网络里抓包,经常能看到:

100.64.x.x
100.72.x.x

这说明:你的手机其实在 运营商 NAT 内网。

路径大概是:

手机
↓
100.72.x.x (运营商私网)
↓
运营商 NAT
↓
公网

所以很多人第一次看到 Tailscale IP:100.64.0.1

会误以为:这是不是运营商 NAT?

其实不是,它只是 借用了同一个地址段。

六、如果 Tailscale 真的用了 10.0.0.0/8 会怎样

举个真实例子:

你有:

公司网络:
10.0.0.0/16
Tailnet:
10.0.0.0/8

访问:

10.0.5.12

系统无法判断:

走公司 LAN?
还是 Tailnet?

结果就是:

网络乱套

所以:工程上最重要的是减少冲突。

✅ 一句话总结

Tailscale 使用 100.64.0.0/10,是为了避免和现实世界大量存在的 10.x.x.x / 192.168.x.x 内网冲突,从而让 Tailnet 在任何网络环境都能稳定工作。