如何运行 Tor 出口节点:运营者实战指南
运行 Tor 出口节点并非匿名行为。本指南详细解析如何选择出口友好型主机商、配置 ContactInfo、设置反向 DNS 以及处理滥用投诉邮件。了解为何通用 VPS 不适合托管出口流量,并掌握确保节点合规运行的关键技术细节。
Tor 出口节点的作用及其身份定义
Tor 出口节点是电路中的最后一个中继:该机器负责发起通往目标地址的连接,因此目标服务器记录的是您的服务器地址,而非用户的真实地址。本指南中的所有决策均基于此事实。由于所有经过该节点的数据流量均被视为源自该地址,因此该地址必须是专用的,且必须位于已同意承载此类流量的服务商处。
运行出口节点与隐藏身份恰恰相反。该中继会被列入任何人均可下载的公共目录中。您的联系地址会出现在该目录的 ContactInfo 下,您的反向 DNS(域名系统)名称会宣告该机器的用途,80 端口会提供一个说明相同内容的页面,且您需以个人名义亲自处理滥用投诉邮件。在此系统中,没有任何人比出口节点运营者更具可识别性。这就是该工作的本质,也是其能够发挥作用的原因。
我们运营这些节点。SSD Nodes 在多个国家/地区运营出口中继,以此为自由表达做出贡献。我们从明确同意承载出口流量的服务商处租用这些机器,且我们本身并非这些机器的服务提供商。这是有意为之,下一节将解释其原因。
出口节点应部署在何处,以及不应部署在何处
出口节点不应部署在通用型 VPS(虚拟专用服务器)上,这同样适用于我们的产品。通用型网络承载着成千上万互不相关的客户的网站、邮件、备份和控制面板,且这些客户共享相邻的 IP 地址。出口流量会导致其中某个地址出现在扫描报告和垃圾邮件黑名单中,从而波及邻近的客户。能够妥善托管出口节点的供应商通常为此进行了专门构建:预留了专门的地址空间,并设有了解 Tor 机制的滥用处理部门。
因此,编写本指南的主机商建议您在其他地方购买此类机器。这是最有价值的建议。我们深知出口流量对 IP 地址的影响,因为我们付费请他人承载我们的出口流量;我们之所以付费,是因为妥善处理这些流量与销售通用型服务器是完全不同的业务。
Tor Project 也以更直白的措辞表达了同样的观点。其 中继类型 页面指出,出口中继“在所有中继中面临最大的法律风险和责任”,并且“您不应在家中运行 Tor 出口中继”。对于您而言,托管个人项目的通用型 VPS 在性质上与家庭网络并无二致。它是您所关心的机器,且其 IP 地址需要保持纯净。
如果您拥有一台普通的 VPS 并希望在本周为网络做出贡献,请在其上运行非出口中继或网桥。这并非退而求其次的选择。这是一项具有不同风险特征的工作,而网络两者皆需。非出口中继从不向目标地址发起连接,因此几乎不会引发投诉;Tor 的指南建议其双向带宽至少达到 2 MByte/s(每秒兆字节)才具有列入列表的价值。网桥 是为受审查网络中的用户提供的未公开入口点。它需要 24/7 全天候连接并开放一个 TCP(传输控制协议)端口,这使其成为小型设备所能提供的最高价值服务。这两者都适合部署在您现有的硬件上,而出口节点则不然。
如何寻找支持出口节点的供应商?
下单前请以书面形式咨询,并保留回复。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 年 8 月,当前的稳定版本系列为 0.4.9。
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 预设了一份精选列表,涵盖了约 70 个常用的 Web、邮件提交、聊天和 git 端口,并剔除了最容易引发投诉的端口。这是初次配置出口节点时的最佳起点。
有两条规则需要特别注意。ExitPolicyRejectPrivate 默认开启,它禁止出口节点连接私有地址段及中继节点自身的地址,这能防止您的出口节点被指向服务商的内部网络。25 端口(SMTP,简单邮件传输协议)默认被拒绝,且应保持此状态;因为一旦开放,中继节点就会沦为垃圾邮件源,其 IP 地址会在几天内被列入黑名单。
出口节点必须开放 80 和 443 端口才具备实际价值。Tor 的出口中继文档对此有明确的最低要求。如果您的服务商要求比精简策略更严格的限制,仅开放 Web 端口的出口节点依然是有意义的贡献:
ExitPolicy accept *:80
ExitPolicy accept *:443
ExitPolicy reject *:*请在列表末尾添加 reject *:*,以确保您的策略完整且不继承任何后续规则。精简策略允许 22 端口(SSH),这是暴力破解举报的常见来源;如果您不想处理此类通知,可以在列表上方添加 ExitPolicy reject *:22。6881-6999 范围内的文件共享端口是版权投诉的常见来源,精简策略已将其排除。
策略变更在您的中继节点发布新描述符并经由目录服务器同步后才会对客户端生效,因此请等待数小时后再评估效果。
联系信息、家族密钥与中继注册
注册出口中继意味着将其与一个陌生人可验证的名称绑定。为此,系统提供了两种协同工作的机制。
第一种是知名文件机制。在您控制的域名下发布您的家族身份,然后在 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,其中包含您的家族 ID。现在,任何人都可以确认声称拥有这些中继的人同时也控制着该域名。这就是联系地址与已验证地址之间的区别。
第二种是家族机制。如果您运行多个中继,网络需要知道它们由同一运营商管理,以确保客户端不会同时通过您的两台机器构建链路。当前的 tor 通过名为 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 的文档明确指出,在项目宣布不再需要之前,您仍必须设置传统的 MyFamily 选项并列出每个中继的指纹,因此请同时配置这两项。每个中继的指纹位于 /var/lib/tor/fingerprint 中。
从第二台和第三台机器开始,运维工作变得至关重要,而 同时管理多台 Linux 服务器 在此处面临的问题与其他场景相同。请务必将 /var/lib/tor/keys 备份到服务器之外的地方。一旦丢失,该中继将以陌生身份重新加入网络,并需要从零开始重新获取所有标志和声誉。
同时,请订阅 tor-relays 邮件列表。影响运营商的变更会首先在该列表中发布。
反向 DNS 与 80 端口的出口声明
在转发流量之前,请先设置反向 DNS 记录。Tor 的出口节点指南建议通过类似 tor-exit-01.example.org 的名称来标识服务器用途。这样做具有实际意义:当管理员在日志中发现陌生地址时,第一反应通常是进行反向查询。如果主机名中包含 "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 is reachable from the outside. Excellent.如果该行始终未出现,说明 ORPort 不可达。请使用 sudo ss -lntp | grep 443 确认 tor 正在监听,并从另一台机器使用 nc -vz your.address.here 443 测试该端口。通常原因是 VPS 前端的防火墙(无论是你配置的还是服务商控制面板中的)拦截了流量。
使用 systemctl is-enabled tor 检查服务是否在重启后自动恢复,该命令应输出 enabled。
中继节点在启动约 3 小时后会出现在 中继搜索 中,显示为你选择的昵称。由于网络带宽测量机制需要时间来评估你的中继,流量会在几天内逐渐上升,客户端才会分配更多权重。新出口节点在第一天几乎没有流量是正常现象。
滥用处理手册及邮件样本
请在收到第一份投诉前编写好处理手册,因为通常在上线的第一周内就会收到投诉。此类邮件大多由机器自动生成。根据 Tor 的出口节点准则,自动化报告约占总量的 80%,而一份标准回复即可解决剩余的大部分问题。
实际收到的邮件通常包括:由入侵检测系统生成的扫描或暴力破解报告,其中会引用您的 IP 地址和时间戳;若您的策略允许文件共享端口,则会收到版权侵权通知;来自网站所有者的论坛或评论垃圾信息投诉。偶尔也会收到执法部门发出的数据保留请求或传票,这属于不同类别,此时应咨询律师,而非使用模板回复。
回复内容应简短,且每次几乎相同:
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>以下四个习惯能确保流程高效:在一个工作日内回复,使用 ContactInfo 中的地址发送,并署上您的真实姓名。切勿承诺识别用户身份,因为您无法做到;若运营者暗示可以识别,后续将不得不违背承诺。将所有回复保存在同一个文件夹中,以便针对同一事件的后续邮件能给出一致的答复。如果服务商转发了附带停机警告的投诉,请先回复服务商,再回复投诉方。
回复中两个链接起到了关键作用。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 出口节点吗?
不可以,这一点必须严格遵守。出口节点需要一个专用的 IP 地址,该地址不能托管其他任何服务。此外,必须选择一家预先同意承载出口流量,并将滥用投诉邮件原封不动转发给你的服务商。在通用 VPS(包括我们的产品)上,该 IP 地址已承担其他任务,且与运行常规服务的客户共享同一网段。你可以在现有机器上运行非出口中继或 obfs4 网桥。这些服务非常有价值,几乎不会引发投诉,且无需额外资源,使用你现有的服务器即可。
Tor 出口中继会收到多少滥用投诉邮件,由谁接收?
这取决于你的出口策略。如果使用 ReducedExitPolicy 1,并拒绝 25 端口以及排除文件共享端口,收到的邮件大多是自动扫描和暴力破解报告。根据 Tor 的出口指南,自动报告约占总量的 80%。邮件会发送至服务商滥用处理部门转发的地址,因此在购买前务必确认服务商是否会将包含原始举报人地址的邮件转发给你。在 ContactInfo 和 80 端口的通知页面上发布相同的联系地址,并确保在一个工作日内回复。
我必须发布真实姓名和电子邮件地址吗?
是的。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.,因为如果中继未通过可达性测试,它将不会被发布,也不会承载任何流量。如果该行已存在,通常只需要等待。中继在启动约三小时后会出现在 Relay Search 中,但只有当网络带宽测量机制观察到它之后,客户端才会发送有效流量,这一过程需要几天时间。此外,必须设置允许 80 和 443 端口的策略,中继才会被视为出口节点。