贡献自己服务器作为 Tor 中继
Tor 网络由几千名志愿者无私贡献的中继节点构成,如果要研究 Tor,自然也有必要成为一个中继节点进行研究。
实验环境
使用德国的某厂商的服务器进行实验,配置信息如下:
-` .o+` ohyee@vmi471305.contaboserver.net `ooo/ OS: Arch Linux `+oooo: Kernel: x86_64 Linux 5.4.74-1-lts `+oooooo: Uptime: 20h 18m -+oooooo+: Packages: 165 `/:-:++oooo+: Shell: zsh 5.8 `/++++/+++++++: Disk: 2.8G / 397G (1%) `/++++++++++++++: CPU: Intel Xeon E5-2630 v4 @ 6x 2.2GHz `/+++ooooooooooooo/` RAM: 704MiB / 16015MiB ./ooosssso++osssssso+` .oossssso-````/ossssss+` -osssssso. :ssssssso. :osssssss/ osssso+++. /ossssssss/ +ssssooo/- `/ossssso+/:- -:/+osssso+- `+sso+:-` `.-/+oso: `++:. `-/+/ .` `/
(配置很好而且很便宜,就是中国直连肉眼可见地慢)
Tor 中继
Tor 通过重路由与分层加密来实现匿名通信,洋葱代理客户端(Onion Proxy, OP)根据各种路径选择算法(可参见博客另一篇文章 Tor 路由选择规范),选取出 3 个合适的节点,将自己要传输的数据倒序用这三个节点的公钥进行加密。
加密后的数据将会被发送至入口节点,入口节点使用自己的私钥解密数据,获得下一跳的地址及要发给下一跳的数据。中间节点和出口重复该工作,并由出口节点解密出要发送的数据原文,并发送给真正的接收者。
由木桶原理可知,实际通信的效率取决于质量最差的节点。因此一个节点想要称为一个合格的 Tor 中继需要经过严格的考验。
Tor 中继配置
Tor 中的志愿节点包含多种类型:
- 入口节点:由可信、性能优良的节点担任
- 中间节点:中转 Tor 流量,大部分的中继都属于中间节点
- 出口节点:实际访问目的网站,因此可能会有法律隐患
- 目录节点:为用户提供节点列表
- 网桥节点:为部分受审查的用户提供连入 Tor 网路的方法
当你的服务器被 Tor 网络接纳的同时,中国无法再直连你的服务区
成为中间节点
要成为一个中间节点,只需要配置一个洋葱中继(Onion Router, OR)端口ORPort
即可。一般来说,官方建议使用 443 端口(也即默认的 HTTPS 端口)。使用这个端口,流量在发送过程中形如正常的 HTTPS 通信,更难以被分析。但是用户也可以配置为诸如 9001 等端口,因为在通信中实际上没有别的区别。
成为入口节点
默认情况下,只有那些久经考验的优秀节点,才允许成为入口节点(Guard)。入口节点会从优秀的中间节点中挑选(一般网速快、性能好的节点会在 8~68 天左右被赋予Guard
标记,成为一名光荣的入口节点)
成为出口节点
出口节点并不像入口节点那样需要额外的审核,但贡献者可能需要考虑更多法律上的问题。入口节点、中间节点只是转发加密流量,在很多情况下并不需要承担任何网络访问的后果。但出口节点作为实际的访问者,对于网站服务提供者而言,是由出口节点执行的实际访问操作。
这也意味着,如果使用者使用 Tor 网络进行非法行为,在溯源追踪时只会被追踪到提供出口节点的用户。尽管在很多情况下并不会有实际影响,但是对于敏感问题仍然可能会对志愿者带来额外的损失。
配置文件
下面是一份可行的志愿中继(包括出口节点)及目录服务器的配置文件(对于准备长期提供服务的出口节点,还需要防止对应的说明信息以避免可能存在的法律责任)
# 启动 Tor 服务的用户 User tor # Tor 数据文件夹 DataDirectory /var/lib/tor # 作为中继对外显示的信息 Nickname OhYee Address tor.oyohyee.com ContactInfo OhYee <oyohyee@oyohyee.com> # OP 端口(供本地应用连接 Tor 网络用) SocksPort 9050 # 中继节点配置 ORPort 6666 ORPort [2a02:c207:2047:1305::1]:6666 RelayBandwidthBurst 31457280 RelayBandwidthRate 15728640 AccountingStart month 3 15:00 # 出口节点配置 ExitRelay 1 IPv6Exit 1 DirPort 8888 # 控制端口及控制配置 ControlPort 9051 HashedControlPassword 16:F8F179DABB741F1B60C5C27E360E351C7B1138DC7B0D97609F4116FE1C CookieAuthentication 1 # 统计信息 CellStatistics 1 ConnDirectionStatistics 1 EntryStatistics 1 ExitPortStatistics 1 # 日志 Log notice file /var/log/tor/notices.log Log debug file /var/log/tor/debug.log Log notice syslog