5 个版本

0.1.3 2021年7月19日
0.1.2 2021年2月22日
0.1.1 2021年2月21日
0.1.0 2021年2月20日
0.0.1 2020年10月16日

#1250 in 网络编程

每月35次下载
用于 allium-daemon

MIT 许可证

140KB
3K SLoC

crates.io docs

logo

洋葱 🧅

洋葱是一种单子叶植物属,包括数百种物种,包括栽培的洋葱、大蒜、青葱、葱、韭菜和香葱。 — Wikipedia

Allium 是洋葱路由的 Rust 实现。它可以在加密隧道中实现匿名通信。除了用作 Rust 库外,Allium 还可以作为独立的守护进程运行,可以通过 TCP 套接字进行控制。

特性

  • 基于 Tokio 运行的异步设计
  • 定期、无缝的隧道重建
  • 固定大小的数据包
  • 覆盖流量

入门

文档中包含有关如何开始使用 Allium 库的简短部分。

守护进程

可以使用以下命令安装守护进程

$ cargo install allium-daemon

安装后,可以像这样运行守护进程

$ allium-daemon [config file path]

Allium 守护进程需要配置文件,默认情况下在当前工作目录中为 config.ini。可以通过可选的命令行参数指定不同的路径。配置文件必须是 *.ini*.toml 格式。示例 ini-配置

[onion]
; The address and port on which the daemon listening for API connections
api_address = 127.0.0.1:4200
; The port on which connections from other peers in the onion network are accepted
p2p_port = 4201
; The address on which connections from other peers in the onion network are accepted
p2p_hostname = 127.0.0.1
; The path to a PEM-encoded RSA keypair used for signing messages
hostkey = testkey.pem
; The number of hops (excluding the destination) in each tunnel (should be at least 2)
hops = 2
; Enable or disable cover traffic
cover_traffic = true
; Duration of each round in seconds.
round_duration = 120 

[rps]
; The address and port the random-peer-sampling module is listening on
api_address = 127.0.0.1:4100

命令行界面示例

出于测试目的,提供了一个命令行界面,可以像这样运行

$ cargo run --example cli

此外,可以像这样指定日志级别

$ RUST_LOG=trace cargo run --example cli

测试

可以使用以下命令运行测试

cargo test

已知问题

  • 在切换过程中,我们不清理任何可能遗留的数据消息,这可能导致数据包丢失。
  • 电路 ID(以及在某种程度上隧道 ID)是随机生成的。尽管不太可能,但可能会有重复。
  • 我们没有清理来自 RPS 的输出,因此可能存在循环隧道或以我们自己为目标的自定义覆盖隧道,这取决于 RPS 的实现。

未来工作

  • 编写基准测试并调整性能
    • 减少分配和复制操作的次数
  • 隧道通常被强制拆除而不是迭代地拆解,尽管部分必要的功能已经实现

依赖项

~5–16MB
~232K SLoC