贡献自己服务器作为 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

参考资料