如何运行 Tor 出口节点:运营实战指南
运行 Tor 出口节点不仅是技术配置,更是处理滥用投诉的长期工作。本指南详解如何选择出口友好型主机、配置反向 DNS、设置 ContactInfo 以及应对各类法律与合规风险,助您避开通用 VPS 的常见陷阱,稳健维护中继节点。
Tor 出口节点的作用及其身份定义
Tor 出口节点是电路中的最后一个中继:该机器负责发起通往目标地址的连接,因此目标服务器记录的是您的服务器地址,而非用户的真实地址。本指南中的所有决策均基于此事实。由于所有经过该节点的数据流量均被视为源自该地址,因此该地址必须是专用的,且必须位于已同意承载此类流量的服务商处。
运行出口节点与隐藏身份恰恰相反。该中继会被列入任何人均可下载的公共目录中。您的联系地址会出现在该目录的 ContactInfo 下,您的反向 DNS(域名系统)名称会宣告该机器的用途,80 端口会提供一个说明相同内容的页面,且您需以个人名义亲自处理滥用投诉邮件。在此系统中,没有任何人比出口节点运营者更具可识别性。这就是该工作的本质,也是其能够发挥作用的原因。
我们运营这些节点。SSD Nodes 在多个国家/地区运营出口中继,以此为自由表达做出贡献。我们从明确同意承载出口流量的服务商处租用这些机器,且我们本身并非这些机器的服务提供商。这是有意为之,下一节将解释其原因。
出口中继适合放在哪里,不适合放在哪里
出口中继不适合部署在通用型 VPS(虚拟专用服务器)上,我们的服务器也不例外。通用型网络承载着数千名互不相关客户的网站、邮件、备份和控制面板,这些客户使用相邻的地址。出口流量会使其中一个地址出现在扫描报告和垃圾邮件黑名单中,影响也会波及相邻客户。能够妥善托管出口中继的服务商,通常已为此做好准备:预留专用地址空间,并配备熟悉 Tor 的滥用处理团队。
因此,撰写本指南的主机是在建议您将出口中继部署到其他地方。这正是有用之处。我们知道出口流量会对地址造成什么影响,因为我们会付费让其他人承载自己的出口流量;之所以付费,是因为妥善承载出口流量与销售通用型服务器是两种不同的业务。
Tor Project 也以更直接的方式表达了相同观点。其中继类型页面指出,出口中继“在所有中继中面临最大的法律风险和责任”,并且“您不应在家中运行 Tor 出口中继”。承载您自己项目的通用型 VPS,实际上与家庭网络的性质更接近。它是一台您需要保护的服务器,使用的是您希望保持良好信誉的地址。
如果您有一台普通 VPS,并希望在本周帮助 Tor 网络,可以在其上运行非出口中继或网桥。这不是退而求其次,而是不同的工作,风险特征也不同;Tor 网络两者都需要。非出口中继不会与目标建立连接,因此几乎不会引发投诉。Tor 的中继要求规定,每个方向最低需要 10 Mbit/s(兆比特每秒)的带宽,并建议达到 16 Mbit/s,即 2 MByte/s。网桥是面向受审查网络用户的未公开入口。它需要 24/7 连接能力和两个开放的 TCP(传输控制协议)端口,分别用于 ORPort 和 obfs4,因此是小型服务器能够提供的最高价值服务。两者都适合部署在您已有的硬件上。出口中继不适合。
如何寻找支持出口节点的供应商?
下单前请以书面形式咨询,并保留回复。Tor 的出口节点指南建议分两步询问:首先确认供应商是否允许运行 Tor 出口节点,然后再询问是否能为其分配专用 IP 地址或地址段。一次性提出这两点往往会招致对方条件反射式的拒绝。
通过以下四个问题,可以判断供应商是否真正具备支持条件:
- 你们是否会分配一个仅供该节点使用的专用 IP 地址,并设置我指定的反向 DNS 记录?
- 滥用投诉邮件由谁接收?你们是否会将其原封不动地转发给我,并保留举报人的原始地址,以便我直接回复?
- 收到首次投诉时会如何处理:是先转发给我,还是直接封禁该 IP 地址后再询问?
- 该网络中目前已存在多少个出口节点?Tor 的指南对此有明确建议:“如果我们在同一家友好的 ISP 中集中过多出口节点,并无益处”。
最后一个问题的重要性超乎预期。出口节点的价值部分取决于其在网络中的位置。如果一个网络中已经存在 50 个出口节点,那么在此处新增一个节点带来的价值,远低于在全新的网络中部署。Relay Search 可以显示哪些网络已经承载了出口节点,因此在下单前请务必核实。
请在付款前获得明确答复,并为该机器单独注册账户,不要将其添加到托管其他服务器的账户下。VPS 托管的安全性很大程度上取决于你如何规划资源隔离,这正是该原则最典型的体现。
单一地址,单一职责
出口节点的 IP 地址不得承载任何其他服务。禁止运行网站、邮件服务器、VPN、监控仪表板或个人 SSH 跳板机。该地址会被列入黑名单,若其上运行其他服务,会导致难以排查的故障。使用单一职责的地址,在收到投诉时回复也更简单:此地址仅为 Tor 出口中继,不提供其他服务。
在安装 Tor 之前,先完成基础配置。禁用密码登录,仅允许密钥认证的 SSH 访问,并配置防火墙仅开放必要的端口。加固 VPS 的 SSH 配置 涵盖了第一部分,ufw 防火墙基础 涵盖了第二部分。出口节点仅向公网开放两个端口:用于传输 Tor 流量的 ORPort,以及用于显示出口公告页面的 80 端口。其余端口必须全部关闭。
开启自动安全更新(unattended upgrades),因为运行旧版本 Tor 的出口节点会影响所有经由该节点路由的用户。
sudo apt update && sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades不要添加日志记录功能。从技术上讲,捕获出口节点的明文流量非常容易,但这是运营商绝对不能做的事情。EFF Tor 法律常见问题解答建议运营商不要记录流量,因为美国及其他地区的窃听相关法律规定,检查此类流量可能会导致法律责任。请保持 Tor 默认的 notice 级别日志,不要进行任何额外记录。
从 Tor Project 软件源安装 tor
发行版软件包通常滞后。使用 Tor Project 自己的软件源,以便在安全修复发布当天获取更新。截至 2026 年 10 月,当前稳定系列为 0.4.9。Tor Project 将 2026 年 9 月 1 日定为停止支持 0.4.8 及更早版本的目标日期。此后,使用这些版本的中继将完全无法在网络上运行。因此,旧软件包不仅更新缓慢,而且无法正常工作。
sudo apt update
sudo apt install -y apt-transport-https gnupg wget
lsb_release -cs写入 /etc/apt/sources.list.d/tor.sources,将 noble 替换为 lsb_release -cs 输出的代号:
Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg添加签名密钥,然后安装:
wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/null
sudo apt update
sudo apt install -y tor deb.torproject.org-keyring
tor --versiondeb.torproject.org-keyring 软件包会自动维护该密钥,因此密钥轮换当天软件源不会失效。如果 apt update 报告配置了相同的软件源两次,说明同时存在引用该软件源的 .list 文件和 .sources 文件;deb822 重复软件源错误说明了如何清理该配置。
DNS:出口节点为所有用户解析域名
出口节点负责处理所有经由该节点建立的链路的域名解析请求,因此其解析器会接收到大量属于他人的域名查询流。若将这些请求指向大型公共解析器,等于将整个查询流交给单一公司,这违背了 Tor 建议出口节点运营商避免中心化的原则。请在服务器本地运行一个具备验证功能的缓存解析器。
sudo apt install -y unbound bind9-dnsutils
sudo cp /etc/resolv.conf /etc/resolv.conf.backup
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
sudo chattr +i /etc/resolv.conf
sudo systemctl enable --now unboundchattr +i 会将文件标记为不可更改,因为 DHCP(动态主机配置协议)客户端和 resolvconf 会按照各自的计划重写 /etc/resolv.conf。若不执行此操作,重启可能会导致解析请求回退至服务商的解析器,且该过程不会有任何提示。Tor 的 Debian 和 Ubuntu 指南还启用了查询名称最小化(query name minimisation)功能,该功能仅向每个名称服务器发送其解析所需的域名部分:
server:
qname-minimisation: yes将上述内容放入 /etc/unbound/unbound.conf.d/ 下的文件中,然后确认解析器是否正常响应:
sudo systemctl restart unbound
dig +short example.com @127.0.0.1回复中包含地址即表示 unbound 正在工作。如果 unbound 因 address already in use 无法启动,说明其他进程占用了 53 端口:请运行 sudo ss -lntup | grep :53 查看占用该端口的进程。在 Ubuntu 上,systemd-resolved 监听在 127.0.0.53,因此它不会与监听在 127.0.0.1 的 unbound 发生冲突。
出口中继的 torrc 配置
Debian 软件包读取 /etc/tor/torrc。以下是与出口中继相关的所有配置。
Nickname exampleExit01
ORPort 443
ExitRelay 1
SocksPort 0
ContactInfo email:tor[]example.org abuse:abuse[]example.org url:https://example.org ciissversion:3
ReducedExitPolicy 1
Log notice syslog其中的每一行都至关重要,请逐一配置。
ORPort 443 是其他中继连接您的端口。端口 443 可以穿透那些屏蔽非常规端口的受限网络,因此相比传统的 9001 端口,您的中继能被更多用户访问。您之所以能占用 443 端口,是因为该服务器上没有其他服务需要它,这也是使用独立 IP 地址的又一理由。
SocksPort 0 用于关闭本地 SOCKS 代理。中继不需要此功能,且监听在公网地址上的 SOCKS 端口会成为开放代理,数小时内就会被发现并遭到滥用。
ExitRelay 1 是将节点设为出口中继的开关。请显式设置该项,不要依赖默认值,这样配置文件能清晰地说明该机器的功能。
ContactInfo 会发布在公共目录中供任何人查看。请按照 ContactInfo 信息共享规范 格式填写,这是网络工具所解析的格式,并确保其中包含 ciissversion:3。按照该规范的惯例,使用 [] 替换 @ 可以减缓地址抓取工具的扫描速度。请使用您每天都会查阅的邮箱,因为滥用投诉邮件会发送到此地址。
如果服务器具备可用的 IPv6 网络,请添加 IPv6 ORPort 并启用 IPv6 出口流量。如果不支持,请勿添加这两项,因为中继如果宣告了一个无法实际使用的地址,将无法通过自身的连通性测试。
ORPort [2001:db8::1]:443
IPv6Exit 1退出策略:各端口允许的连接
退出策略是中继愿意连接的目标列表。Tor 按从上到下的顺序读取该列表,第一条匹配的规则生效。ReducedExitPolicy 1选择了一个经过筛选的端口列表,约包含 100 个端口,涵盖 Web、邮件提交、聊天和 Git,同时排除了大多数投诉所针对的端口。对于首次运行退出中继,这是合适的起点。
有两条规则值得记住。ExitPolicyRejectPrivate默认启用,可阻止退出中继连接到私有地址范围和中继自身的地址。这样可以防止有人通过你的退出中继访问服务商的内部网络。端口 25(SMTP,简单邮件传输协议)会被拒绝,而且应保持拒绝状态,因为允许该端口会使中继成为垃圾邮件来源,并且该地址通常会在数天内被列入阻止列表。
退出中继至少必须允许端口 80 和 443,才具有实际用途。Tor 的退出中继文档直接说明了这一最低要求。如果服务商要求的策略比精简策略更严格,仍可运行仅允许 Web 流量的退出中继,这同样是有效的贡献:
ExitPolicy accept *:80
ExitPolicy accept *:443
ExitPolicy reject *:*请用 reject *:* 结束列表,使策略本身完整,不再继承后续规则。精简策略允许端口 22(SSH),该端口通常会产生暴力破解报告。如果你不想处理这类邮件,可在其他规则之前添加 ExitPolicy reject *:22。6881-6999 范围内的文件共享端口通常会产生版权通知,而精简策略已经排除了这些端口。
策略变更只有在中继发布新的描述符并由目录完成传播后,才会对客户端生效。因此,请等待数小时后再评估效果。
联系信息、family key 和注册中继
注册出口中继,就是将其绑定到一个陌生人可以验证的名称。两种机制可以完成这项工作,并且需要配合使用。
第一种机制是 well-known 文件。在您控制的域名上发布 family identity,然后在 ContactInfo 中指定该证明:
ContactInfo email:tor[]example.org url:https://example.org proof:uri-familyid-ed25519 ciissversion:3文件位于 https://example.org/.well-known/tor-relay/ed25519-family-id.txt,其中包含 family ID。现在,任何人都可以确认,声称控制这些中继的人同时控制该域名。这就是联系地址和已验证联系地址之间的区别。
第二种机制是 family 本身。如果您运行多个中继,网络需要知道它们由同一名操作员运行,这样客户端就不会通过您的两台机器构建同一条电路。当前版本的 tor 通过 family key 实现此功能,该功能称为 Happy Families,适用于运行 0.4.9.2-alpha 或更高版本的中继:
tor --keygen-family exampleFamily该命令会写入 exampleFamily.secret_family_key,并输出一行 FamilyId。将密钥文件复制到每个中继的密钥目录中(Debian 和 Ubuntu 上为 /var/lib/tor/keys),保留文件名末尾的 .secret_family_key,将输出的 FamilyId 行添加到每个 torrc,然后重新加载 tor。Tor 手册说明,目前 relay family 应同时配置 FamilyId 和旧版 MyFamily 选项,并在其中列出每个中继的指纹,以便旧版客户端仍能识别该 family。请同时配置这两个选项。每个中继的指纹位于 /var/lib/tor/fingerprint。
第二台和第三台机器上线后,运维工作就开始变得重要;这里和其他场景一样,同时管理多台 Linux 服务器需要解决相同的问题。将 /var/lib/tor/keys 备份到服务器之外的位置。如果丢失该文件,中继会以陌生身份重新加入,并需要从零开始重新获得所有标志和声誉。
另外请订阅 tor-relays 邮件列表。影响操作员的变更会首先在那里发布。
反向 DNS 与 80 端口的出口声明页面
在节点开始转发流量前,请务必设置反向 DNS 记录。Tor 的出口节点指南建议通过主机名明确标识该服务器的用途,例如 tor-exit-01.example.org。这样做具有实际意义:当管理员在日志中发现陌生 IP 时,通常会首先执行反向查询。如果主机名中包含 "tor-exit",对方在发送投诉邮件前就能获知该地址的用途,这能减少一部分潜在的投诉。请联系主机商设置 PTR(指针)记录,并在你的一侧添加对应的正向解析记录。
此外,请在 80 端口提供一个页面,用文字说明相同的信息。旧版指南建议使用 Tor 的 DirPortFrontPage 设置,但这依赖于 DirPort。自 Tor 0.4.6.5 版本起,中继节点的 DirPort 功能已被弃用,因此请改用轻量级 Web 服务器实现。
sudo apt install -y nginx
sudo install -d -m 755 /srv/tor-exit-notice编写 /srv/tor-exit-notice/index.html:
<!DOCTYPE html>
<html>
<head><title>This is a Tor exit relay</title></head>
<body>
<h1>This is a Tor exit relay</h1>
<p>Traffic from this address was sent by a user of the Tor network. It did not
come from the operator of this machine, and this machine keeps no record of
who sent it.</p>
<p>Operator: Example Org. Abuse reports: abuse@example.org. Every report gets a
reply from a person.</p>
<p>To check whether this address was a Tor exit at a given date and time:
https://metrics.torproject.org/exonerator.html</p>
</body>
</html>将以下 server 块写入 /etc/nginx/sites-available/tor-exit-notice:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /srv/tor-exit-notice;
index index.html;
access_log off;
}启用该配置,移除 Nginx 的默认站点,并检查结果:
sudo ln -sf /etc/nginx/sites-available/tor-exit-notice /etc/nginx/sites-enabled/tor-exit-notice
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
curl -s http://127.0.0.1/ | head -n 5nginx -t 若输出 syntax is ok 和 test is successful,说明文件语法正确。curl 应打印出你所编写声明页面的前几行内容。如果输出的是 Nginx 的欢迎页面,说明默认站点仍处于启用状态,且你的配置块未生效。
启动它,然后查看日志内容
sudo systemctl restart tor@default
sudo journalctl -u tor@default -n 50 --no-pager几分钟内,日志中应出现一行表示其他中继可以连接到你的消息,其中包含你的地址和端口:
Self-testing indicates your ORPort 203.0.113.10:443 is reachable from the outside. Excellent. Publishing server descriptor.如果始终没有出现该行,说明 ORPort 无法访问。使用 sudo ss -lntp | grep 443 确认 tor 正在监听,然后从另一台机器使用 nc -vz your.address.here 443 测试该端口。VPS 前面的防火墙通常是原因,可能是你自己的防火墙,也可能是服务商控制面板中的防火墙。
使用 systemctl is-enabled tor 检查服务是否会在重启后恢复,该命令应输出 enabled。
中继启动约三小时后,会以你选择的昵称显示在 中继搜索 中。随后几天内,流量会逐步增加,因为网络需要先测量并观察你的中继,之后客户端才会给予它较高的权重。新出口中继在第一天几乎没有流量属于正常情况。
滥用处理手册,以及邮件的实际内容
请在收到第一封投诉之前写好处理手册,因为第一封投诉通常会在第一周内到达。这类邮件大多由机器自动生成。Tor 的出口节点指南引用大型出口节点运营商 TorServers.net 的数据称,其收到的投诉约有 80% 是自动生成的,其余大部分通过默认回复即可解决。具体比例取决于您自己的策略,但标准回复通常可以处理大多数情况。
实际收到的邮件通常包括以下几类:由对方入侵检测系统生成的扫描或暴力破解报告,其中包含您的地址和时间戳;如果您的策略允许文件共享端口,则可能收到版权通知;网站所有者发来的论坛或评论垃圾邮件投诉。您还可能偶尔收到执法部门的证据保全请求或传票。这属于另一类事项,此时应咨询律师,而不是直接套用模板。
回复应简短,而且几乎每次都相同:
Hello,
Thank you for the report. The address 203.0.113.10 is a Tor exit relay,
operated by <your name> at <your organisation>. The connection you saw was
made by a user of the Tor network. It did not originate on this machine.
This relay keeps no record of which user made which connection, so I cannot
identify the sender and there are no logs for me to hand over.
You can confirm that this address was a Tor exit at the date and time in
question here: https://metrics.torproject.org/exonerator.html
If you would prefer to stop Tor traffic reaching your service, the current
list of exit addresses is published here:
https://check.torproject.org/torbulkexitlist
I read this mailbox personally and will answer any follow-up.
<your name>以下 4 个习惯可以让这种方式有效。请在 1 个工作日内回复,使用 ContactInfo 中的地址,并署上您自己的姓名。不要承诺识别用户,因为您无法做到;如果运营者暗示自己可以识别,之后就必须违背这个承诺。将所有回复保存到同一个文件夹中,这样针对同一事件的第二封邮件也能得到相同答复。如果服务提供商转发投诉,并附带暂停服务警告,请先回复服务提供商,再回复投诉方。
以下 2 个链接在这些回复中最有用。ExoneraTor回答调查人员真正关心的问题:该地址在这个时间点是否是 Tor 出口节点。批量出口节点列表是当前出口地址的纯文本列表,每行一个地址,适合已经决定屏蔽 Tor、希望准确执行而不是凭猜测操作的人员。
带宽、成本与第二个中继
出口节点负责传输实际流量。在下单前请确定每月的流量上限,并询问服务商在超出配额后的计费方式,因为 VPS 的实际成本 主要取决于流量配额,而非标价。Tor 可以从你这一端强制执行限制:
AccountingMax 4 TBytes
AccountingStart month 1 00:00
RelayBandwidthRate 20 MBytes
RelayBandwidthBurst 25 MBytesAccountingMax 可使 Tor 在计费周期内达到指定流量后进入休眠状态,并在下一个周期开始时唤醒。在完全信任该数值前,请先将第一个月的统计数据与服务商自带的计数器进行对比,因为两者的统计口径并不总是相同。RelayBandwidthRate 用于限制持续速率,这能确保上行链路可用,并让服务商保持放心。
当你添加第二个出口节点时,请将其部署在不同的网络中,而不是与第一个节点放在同一个机架上。多样性是出口节点贡献价值的核心,而位于同一地点的两台机器往往会同时故障。将它们关联到同一个家族(family),为两者发布相同的验证联系方式,并回复来自两者的邮件。无人能联系上的出口节点会被视为匿名故障;而运营者能当天回复的出口节点,则会被视为有专人维护的服务器,这才是其应有的状态。
FAQ
我可以在现有的 VPS 上运行 Tor 出口节点吗?
不可以,这一点必须严格遵守。出口节点需要一个专用地址,该地址不能承载其他服务;提供商还必须事先同意承载出口流量,并将滥用邮件未经修改地转发给您。在通用 VPS 上(包括我们的 VPS),该地址通常已经承担其他用途,并且与运行普通服务的客户共享网络环境。请在现有机器上运行非出口中继或 obfs4 网桥。这些节点同样有实际价值,几乎不会收到投诉,而且只需要您已经付费使用的这台机器。
Tor 出口中继会收到多少滥用邮件,谁会收到这些邮件?
这取决于您的出口策略。启用 ReducedExitPolicy 1、拒绝端口 25 并排除文件共享端口后,大多数邮件来自自动扫描和暴力破解报告。Tor 的出口指南引用大型出口运营商 TorServers.net 的数据称,其约 80% 的投诉是自动生成的。这只是单个运营商的经验,并不代表整个网络的情况。邮件会发送给提供商滥用处理部门转发的对象。因此,在订购前应询问提供商是否会将邮件转发给您,并保留报告者的地址。将同一地址发布在 ContactInfo 和端口 80 的通知页面上,并在 1 个工作日内回复。
我必须公开真实姓名和电子邮件地址吗?
是。ContactInfo 会发布在公开中继目录中,任何人都可以下载;反向 DNS 名称会表明这台机器的用途,端口 80 上的通知页面也会重复显示这些信息。这种透明性是设计要求,而不是副作用。没有可用联系信息的出口节点会被视为匿名骚扰源,一些客户端还会排除未发布联系信息的出口节点。请在您控制的域名上添加 proof:uri-familyid-ed25519 和 /.well-known/tor-relay/ed25519-family-id.txt 文件,使联系信息可验证,而不只是单方面声明。
为什么我的新出口中继几乎没有流量?
首先检查 journalctl -u tor@default 是否包含以 Self-testing indicates your ORPort 开头、以 is reachable from the outside. Excellent. 结尾的行,因为未通过可达性测试的中继不会被发布,也完全不会承载流量。如果该行存在,通常只是需要等待。中继启动约 3 小时后会出现在 Relay Search 中。只有网络带宽测量完成观测后,客户端才会向其发送有意义的流量,而这需要数天。在中继被视为出口节点之前,还必须允许端口 80 和 443。