去中心化网站发布¶
「网站如何发布」这件事,过去十年多了不少选择。传统的「自架服务器 + DNS」之外,CDN 把内容快取到全球节点降低延迟,IPFS 用内容定址让文件在多个节点之间流通,Tor Onion 服务则让网站直接以 .onion 域名运作于 Tor 网络。后两者常被一起讨论,但问题意识不同:IPFS 着重抵抗删除与审查,Onion 着重连线匿名与管制规避。这篇文章对照两者的设计差异、真实世界的合用组合,并以 anoni.net 文件站的部署作为实例。
「网站如何发布」的选择空间¶
网站发布的选项从「中心化 + 高效能」到「去中心化 + 抗审查」形成一道光谱:
- 自架服务器:自己有 IP、自己有 DNS。完全可控,也完全集中。被封 IP、被没收服务器就挂了。
- CDN(Cloudflare、Fastly、CloudFront):边缘节点代理流量。效能与抗 DDoS 强,但对 CDN 服务商与 root DNS 高度依赖。
- 静态站托管(GitHub Pages、Cloudflare Pages、Netlify):简化部署,但服务商可单方面下架。
- IPFS:内容用 hash 定址,理论上任何节点都可以代为提供。没有单一可下架的点,但内容存活靠 pin。
- Onion 服务:网站直接运作于 Tor 网络,不需要公开 IP、不需要 DNS。连线匿名、抗 IP 封锁,但效能差、跨设备连线有限。
实际选择多半是混搭:主站走 CDN 求效能,IPFS 镜像求抗删除,Onion 镜像求抗封锁。
IPFS 设计核心¶
IPFS(InterPlanetary File System)的核心是内容定址(content addressing)。
- CID(Content Identifier):每个文件算出一段 hash(内容的指纹,内容一样指纹就一样),hash 就是它的位址。同样的内容在任何节点都是同一个 CID。
- DHT(Distributed Hash Table,分布式哈希表):节点之间互相询问「谁拥有这个 CID」,用 Kademlia 算法快速定位,不需要中央服务器登记。
- IPNS(InterPlanetary Name System):把可变的「名字」对应到当前的 CID。内容更新时 CID 变,IPNS 记录更新。
对网站发布的意义:
- 没有单一可下架的位置:只要有任何节点 pin 着这个 CID,内容就存活。
- 内容窜改可被侦测:CID 是 hash,任何窜改都会改变 CID,可被验证。
- 跨节点重复利用:同一文件不管被多少站引用,CID 唯一,可共用快取。
设计上的限制:
- 内容存活靠 pin:没有节点主动 pin 的内容会在垃圾回收中消失。「上 IPFS」不等于「永久保存」。
- DHT 查询延迟:第一次取得内容比 HTTP 慢。
- 网关依赖:多数用户透过公开网关(ipfs.io、cf-ipfs.com)读取,网关被封等于连不上。
- 动态内容受限:IPFS 适合静态,动态功能需要额外层。
Onion 服务设计核心¶
Tor Onion 服务(v3)让网站直接运作于 Tor 网络:
- 自描述地址:.onion 地址(v3,56 字元)本身就是服务的 ed25519 公钥,不需要 DNS、不需要凭证授权(少了 DNS 这层,就少一个被拦截或窜改网域解析的点)1。
- Descriptor publishing:服务透过 Hidden Service Directories(HSDir)发布自己的位置描述。
- Rendezvous protocol:用户与服务透过 Tor 网络内的会合点建立加密连线,双方都不知道对方的 IP。
对网站发布的意义:
- 完整连线匿名:访客的 IP 对网站不可见,网站的 IP 对访客也不可见。
- 不依赖 DNS:.onion 地址自我验证,没有 CA 信任链问题。
- 抗 IP 封锁:流量都在 Tor 网络内,封 IP 没用。
- 不依赖公开 IPv4:可从 NAT 后、可从浮动 IP 启动。
设计上的限制:
- 效能受限:Onion 服务连线是 client 三跳 + service 三跳共六个节点的电路,加上会合点机制,延迟比直连高。
- 依赖 Tor 网络:Tor Project 与 Tor 中继网络被封禁时,整个 .onion 生态受影响。
- 不适合大量静态资产:图片、视频走 Tor 成本高。
- 用户门槛:访客需要 Tor Browser 或 Onion-aware 客户端。
两者解决不同问题¶
| 维度 | IPFS | Onion |
|---|---|---|
| 主要解的问题 | 抗删除、抗集中失效 | 连线匿名、抗 IP 封锁 |
| 访客匿名 | ❌ 无内建 | ✅ 默认提供 |
| 服务匿名 | ❌ 节点 IP 可见 | ✅ 默认提供 |
| 内容窜改检测 | ✅(CID hash) | 透过 TLS / 签章另外提供 |
| 抗下架 | ✅(多节点 pin) | 部分(单一服务可被人为关闭) |
| 大档效能 | 中等 | 差 |
| 动态内容 | 困难 | 跟一般网站类似 |
| 访客门槛 | 低(浏览器网关) | 高(要 Tor Browser) |
要抗删除选 IPFS,要连线匿名选 Onion,两者都需要就同站双镜像。
已知限制与风险¶
在挑选组合前,先认清两个技术各自有「去中心化」承诺无法完全兑现的地方:
- IPFS 的内容存活依赖主动 pin:没有 pin 就消失。Pinata 这类中心化 pin 服务商、或 Filecoin 这类需要代币激励的去中心化存储协议,都让「永久保存」重新依赖第三方。
- Onion 依赖 Tor 网络:Tor 中继节点若大量被封禁,或 Tor Project 停止维运,.onion 生态都会受影响。
- 两者的入口仍多半是中心化服务:用户透过 ipfs.io 或 Tor Browser 访问,这些入口本身仍是潜在攻击面。
- 法律灰色地带:架设 Tor exit node、提供 IPFS pin 服务在不同司法管辖下风险不同。
常见组合¶
Onion + IPFS 双镜像¶
主站发布到一般 Web,同时:
- IPFS 镜像:固定 CID 对应每次发布的内容,社群志工可协助 pin。
- Onion 镜像:跟主站同内容、提供匿名访问。
EFF、ProtonMail、纽约时报、BBC、CIA(美国中央情报局)都架设过官方 Onion 镜像2。Cloudflare 也提供 Onion Routing:使用 Cloudflare 的网站启用后,Tor Browser 访客会自动改走 Cloudflare 的 .onion 端点连入、不经 exit node3。
IPFS + ENS(以太坊网域系统)¶
把 IPFS 内容透过 ENS 给一个可记忆的名字(例如 vitalik.eth),用 ENS 上的记录指到当前 CID。每次更新内容更新 ENS 记录。
问题在 ENS 本身依赖以太坊链,且 ENS 名字需要付费,不是纯粹去中心化。
anoni.net 文件站的实际部署¶
anoni.net 文件站本身就是一个 IPFS + Onion 双镜像案例。简化的流程:
- Source:MkDocs Material 写的 markdown,repo 在 GitHub。
- Main build:
build_docs_anoni.sh生成 zh-TW / zh-CN / en 三语系静态网站,发布到 anoni.net。 - IPFS build:
build_docs_anoni_ipfs.sh把同一份内容调整为 IPFS 友善的相对路径,pin 到 IPFS 网络。 - Onion build:
build_docs_anoni_onion.sh调整为 .onion 域名相对路径,部署到 Tor 隐藏服务。
维运上的取舍:
- IPFS pin 与内容存活:社群成员可协助 pin 增加存活率,没有官方保证。
- Onion 镜像延迟:Tor 的延迟让 SPA 或大型 JS 套件 UX 较差,所以文件站走纯静态 + minimal JS。
- 三套域名的 SEO 与 trust 处理:搜寻引擎主要索引 anoni.net 主站,IPFS 与 Onion 是备援与抗封锁层。
实际运作的限制:
- IPFS gateway(ipfs.io)有时不稳定,影响第一次访问。
- Onion 镜像的更新频率比主站慢一拍(部署流程较重)。
- 多语系资源在 IPFS 上会放大 CID 数量,pin 列表变长。
关于 Tor 网络本身的设计与威胁,见 什么是 Tor。InterSecLab 对中国防火长城资料外泄的分析(网络政变报告)也说明了「集中化的审查基础建设」如何成为去中心化策略的对手。
一同了解¶
下一步可参与的项目¶
-
V3 onion services usage - The Tor Project ↩
-
EFF Now Has Tor Onions - Electronic Frontier Foundation ↩
-
Onion Routing - Cloudflare Docs ↩