公众号旧文
为什么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 在任何网络环境都能稳定工作。