I2P 代理
什么是 I2P
I2P(Invisible Internet Project)是为安全通信设计的匿名覆盖网络。I2P 使用一种独有的技术,称为 garlic routing(大蒜路由),它是 Tor 所用 onion routing 的演进版本。
与专注于匿名访问普通互联网的 Tor 不同,I2P 主要是为网络内部的服务(eepsite)设计的。不过,I2P 也可以通过 outproxy 当作普通代理使用。
Garlic routing 与 onion routing 的对比
Onion routing(Tor)
每条消息被逐层加密,并沿着节点链单独发送。一个数据包——一条链路。
Garlic routing(I2P)
多条消息被打包进一个"蒜瓣"(garlic clove)中一起发送。这样做:
- 使流量分析更困难(无法判断包里有多少条消息)
- 提高效率(开销更小)
- 允许把回复指令放进同一个数据包中
I2P 架构
隧道
I2P 建立单向隧道:
- Outbound tunnel —— 用于发送数据
- Inbound tunnel —— 用于接收数据
每条隧道由 1-3 跳组成。发送和接收使用独立隧道可提升匿名性——攻破一条隧道并不会同时暴露两个方向。
Floodfill router
存储网络数据库(netDb)信息的特殊节点——相当于 I2P 中的 DNS。
LeaseSet
每个 I2P 服务的"入口点"(入站隧道)集合。客户端从 netDb 获取 LeaseSet 并连接到该服务。
把 I2P 用作代理
Outproxy
Outproxy 是把流量转发到普通互联网的 I2P 节点。它类似于 Tor 中的出口节点,但 I2P 中的数量要少得多。
通过 outproxy,您可以访问普通网站,把自己的 IP 隐藏在 I2P 隧道链之后。
Outproxy 的限制
- 可用的 outproxy 极少(屈指可数)
- 速度比 Tor 还要低
- 没有可用性保障
- Outproxy 运营者能看到您的流量(如果是没有 TLS 的 HTTP)
- 并非为大规模使用而设计
Eepsite(隐藏服务)
I2P 的主要用途是访问内部服务(.i2p 域名)。这些服务完全隐藏在网络内部。
I2P 与 Tor 对比
| 参数 | I2P | Tor |
|---|---|---|
| 路由方式 | Garlic(基于数据包) | Onion(基于数据流) |
| 隧道 | 单向 | 双向 |
| 侧重点 | 网络内部服务 | 通往普通互联网 |
| Outproxy/出口节点 | 很少 | 数千个 |
| 速度 | 非常低 | 低 |
| 隐藏服务 | Eepsite(.i2p) | Onion 服务(.onion) |
| 协议 | UDP(SSU)+ TCP(NTCP2) | TCP |
| 抗 DPI 能力 | 高 | 中(bridge 有帮助) |
I2P 的优点
1. 基于数据包的路由
UDP 传输更适合对延迟敏感的应用,也更抗封锁。
2. 单向隧道
发送与接收路径分离——更难分析流量。
3. Garlic 打包
把数据包捆绑在一起会使关联分析更困难。
4. 抗 DPI
I2P 协议在 ISP 层面更难被识别和封锁。
5. 隧道快速轮换
隧道每 10 分钟重建一次,妨碍长期监控。
缺点
1. 规模非常小
活跃路由器约 5 万个(Tor 有数十万)。节点越少,匿名性越弱。
2. 几乎无法用作 HTTP 代理
Outproxy 少、速度低、不可靠。
3. 配置复杂
需要运行 Java 路由器、等待接入网络(bootstrap)并配置隧道。
4. 依赖 Java
主要实现是用 Java 编写的——占用大量资源。
5. 文档和社区有限
与 Tor 相比,I2P 的文档和支持明显更少。
何时使用 I2P
适合:
- 访问 eepsite 和 I2P 隐藏服务
- 在 I2P 内部进行匿名通信(邮件、聊天)
- 文件共享(I2P Snark —— 匿名 BitTorrent)
- 研究和试验匿名网络
不适合:
- 用作访问普通网站的代理(缺少像样的 outproxy)
- 数据抓取与自动化
- 任何对速度有要求的任务
- 日常浏览
结论
I2P 是一个具备独特技术方案(garlic routing、单向隧道)的专用匿名网络。作为访问普通互联网的代理,由于 outproxy 数量少、速度低,它明显落后于 Tor。I2P 的主要价值在于其自有的隐藏服务生态,以及为网络内部通信提供的高水平匿名性。
