如何在 VPS 上运行 obfs4 Tor 网桥
一台低价 VPS 部署 obfs4 Tor 网桥:配置 torrc 指令、选择两个 TCP 端口、设置防火墙,并通过日志确认运行正常,最后获取并分享网桥信息。
Tor 网桥是什么,以及它为何存在
Tor 网桥是进入 Tor 网络的入口点,但其地址不会发布在公开中继列表中。该列表称为共识,是任何人都可以下载的签名文档,审查者也会下载它。阻断其中列出的 Tor 节点只需一个下午:获取共识,然后在边界处丢弃其中的每个地址。网桥之所以存在,是因为公开列表是薄弱环节。网桥地址会分批少量发放,因此单次请求不会交出全部地址。
未列出的地址只是解决方案的一半。深度数据包检测(DPI)根据流量内容而不是地址对流量分类,它可以通过 TLS(传输层安全)握手的特征识别 Tor 连接。即使没有地址列表,审查者仍然可以判断“这看起来像 Tor”,然后丢弃该连接。可插拔传输可以移除这一特征。它在客户端将 Tor 流包装成其他流量,然后由您的网桥将其解包。
obfs4 是大多数网桥运行的传输协议。它会将流转换为不带标头且没有固定握手的数据,因此 DPI 没有可匹配的模式。它还会对客户端进行身份验证。网桥线路中的 cert= 值是一个密钥,客户端必须证明自己持有该密钥,网桥才会响应。这可以阻止主动探测:审查者连接到您的地址,以测试该地址是否运行 Tor 时,不会收到任何响应,也无法获取任何信息。
应运行哪种可插拔传输?
- obfs4 需要1台 VPS、2个 TCP 端口,且不需要域名。这是最容易部署且实用的方案,也是本指南的主题。
- WebTunnel 将连接隐藏在发往真实网站的普通 HTTPS 流量中。Tor Project 列出的要求包括:尽可能使用静态 IPv4 地址、拥有一个由您控制的域名、运行正常的 Web 服务器(例如 NGINX 或 Apache)、有效的 TLS 证书,以及至少 1 GB RAM,推荐使用 4 GB。它适用于随机特征流量本身就会引起怀疑的网络,因为即使某个国家几乎只允许网页浏览,通常仍会允许 HTTPS。
- Snowflake 是另一种参与方式。志愿者运行短期 WebRTC 代理,因此入口点会不断变化,不存在审查者可以封锁的稳定地址。您无需为它运行 bridge,而是运行 proxy;它不需要固定地址。
请从 obfs4 开始。之后可以在第2个地址上添加 WebTunnel bridge:如果两者运行在同一个 IP 上,封锁这个地址就会同时导致两者不可用。
运行网桥的成本是什么?
此图表背后的数据
[
{
"label": "Bridge, minimum",
"min_upstream_mbit": 1
},
{
"label": "Guard or middle relay, minimum",
"min_upstream_mbit": 10
},
{
"label": "Guard or middle relay, recommended",
"min_upstream_mbit": 16
}
]截至 2026 年 10 月,Tor Project 要求网桥至少提供 1 Mbit/s 的上行和下行带宽。对于 guard 或 middle relay,要求为 10 Mbit/s,建议为 16 Mbit/s。这些是公布的要求,不是实际测量值。新网桥通常会连续数周远低于自身的最低要求。同一要求页面还要求 relay 每月产生至少 100 GByte 的出站流量,而最小规格的方案已经能够满足这一要求。因此,在选择更大规格之前,请先阅读小型 VPS 的实际月成本。
网桥的滥用风险面很小,这一点经常被误解。网桥是第一个跳点。离开服务器的流量会发送到另一个 Tor relay,而不会直接发送到用户选择的网站。用户请求的来源不会在陌生网站的 Web 日志中显示为你的 IP 地址,因此出口 relay 运营者需要处理的投诉邮件不会发送到这里。不过,仍应检查提供商的可接受使用政策,因为部分主机会将任何 Tor 服务视为特殊情况。网桥和 onion service 在这一点上正好相反:网桥只有在其地址可访问并最终分发给用户后才有用,而同类 VPS 上的 v3 onion service甚至可以完全隐藏你的公网 IP。
不要将现有的公网 relay 在同一地址上改成网桥。Tor Project 对这种情况的建议是更改“IP address、name and fingerprint”,因为旧地址已经存在于审查者下载的 consensus 中。上周还是公网 relay 的网桥,通常已经出现在封锁列表中。
在线时间比速度更重要。relay 要求指出:“如果 relay 每天运行时间不超过 2 小时,其作用将受到限制。”在这一点上,网桥的情况比 relay 更差,因为客户端只知道获得的网桥线路。Tor Browser 可以接受多条线路,每行一条;但当这些线路全部停止响应后,用户必须重新申请。你的网桥重启一次,就会断开其上的所有用户。请设置Uptime Kuma 中的 TCP 端口检查,监控 obfs4 端口,以便在端口停止响应当天发现问题。
从 Tor Project 软件仓库安装 Tor
发行版软件包通常滞后,而网桥属于安全软件,应保持最新。请先添加项目自己的软件仓库。
sudo apt update
sudo apt install -y apt-transport-https gnupg wget lsb-release
wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/null现在创建源文件。Suites: 行必须包含您的发行版代号,因此请从系统读取该值,不要凭记忆填写。
sudo tee /etc/apt/sources.list.d/tor.sources >/dev/null <<EOF
Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: $(lsb_release -cs)
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg
EOF
sudo apt update
sudo apt install -y tor deb.torproject.org-keyring obfs4proxy如果 apt update 报告该软件仓库没有适用于您的发行版代号的 Release 文件,说明 Tor Project 不提供该发行版。删除 /etc/apt/sources.list.d/tor.sources,再次运行 sudo apt update,然后安装发行版提供的 tor 软件包。下文内容完全相同。
obfs4proxy 软件包由 Debian 和 Ubuntu 官方提供(截至 2026 年 10 月,Debian 13 中的版本为 0.0.14)。请确认二进制文件的安装位置,因为其路径需要写入配置:
command -v obfs4proxy || command -v lyrebird上游已将项目重命名为 lyrebird,因此较新的软件包可能会安装 /usr/bin/lyrebird。请使用该命令输出的路径。
在 /etc/tor/torrc 中配置网桥
BridgeRelay 1
ORPort 8443
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ServerTransportListenAddr obfs4 0.0.0.0:9443
ExtORPort auto
ContactInfo you@example.com
Nickname PickANickname
BridgeDistribution any这些行中的每一行都可能导致故障,因此请逐行处理。
BridgeRelay 1告诉 tor 将 descriptor 发送给网桥 authority,而不是发送到公共 consensus。正是这一行使 relay 不会被列出。
ORPort是实际的 Tor 端口。它必须可从互联网访问,因为 tor 会测试该端口;测试通过前,tor 不会发布 descriptor。
ServerTransportPlugin指定 tor 要运行的命令。tor 会将 obfs4proxy 作为子进程启动,并通过管道与其通信,因此 obfs4proxy 没有自己的服务单元。不过,它仍会显示在 systemctl status tor@default 中,并与 tor 一起列在该单元的 CGroup 中。
ServerTransportListenAddr固定 obfs4proxy 监听的端口。省略这一行后,obfs4proxy 会在启动时选择一个空闲端口;大多数重启后都会选择不同的端口。这样,你已经分发出去的每条网桥线路都会指向一个没有进程监听的端口。客户端会收到连接被拒绝的错误,随后停止尝试。
ExtORPort auto打开扩展 ORPort。这是 obfs4proxy 用于将已建立的连接连同客户端地址交还给 tor 的回环通道。Tor Project 的配置指南要求每个网桥都包含这一项,因为没有它,该传输无法将客户端地址报告给 tor。
ContactInfo和 Nickname都是公开信息。请使用你会查看的地址,因为 Tor Project 会通过它联系你,通知你网桥发生故障。如果不希望暴露身份,请选择一个不会识别你的昵称。
BridgeDistribution选择向用户分发网桥地址的 distributor。可接受的值为 https、email、telegram、settings、none 和 any。首次配置网桥时使用 any,让系统自动决定。对于由你自行分发的私有网桥,使用 none,这样地址不会进入公共分发流程。
为什么端口选择很重要
不要在两个端口上都使用 9001。Tor Project 明确建议避免这样做,因为 9001 是传统的 ORPort,审查者会在互联网上扫描该端口。两个端口也必须不同,因为 tor 和 obfs4proxy 各自绑定一个监听端口。
obfs4 最合适的端口是 443。几乎所有受限网络都允许出站 443,因此即使过滤器只放行 Web 端口,443 通常也能通过。该端口不会隐藏协议:obfs4 流量仍然表现为随机数据,而不是 HTTPS。让连接看起来像网站访问是 WebTunnel 的职责。在 1024 以下的端口上绑定需要额外执行一步,因为 obfs4proxy 不以 root 身份运行:
sudo setcap cap_net_bind_service=+ep /usr/bin/obfs4proxy
sudo systemctl edit tor@.service tor@default.service在每个打开的编辑器中添加以下两行:
[Service]
NoNewPrivileges=no仅设置 capability 还不够。systemd 的 NoNewPrivileges 会阻止进程获得其父进程没有的任何权限,而文件 capability 正属于这种权限。因此,启用该设置后,obfs4proxy 仍无法绑定 443。
如果不想执行这一步,请选择一个普通的高位端口并记录下来。无论选择哪个端口,之后都不要修改 obfs4 端口。网桥线路会将地址、端口、fingerprint 和证书绑定在一起,因此端口一旦变更,用户浏览器中已经保存的每一份线路都会立即失效。
在两层防火墙上开放端口
sudo ufw allow 8443/tcp
sudo ufw allow 9443/tcp
sudo ufw status两个端口都必须开放。大多数服务商还会在控制面板中运行另一层防火墙,而 ufw 无法感知该防火墙。如果服务器上存在规则,但控制面板中没有对应规则,桥接将无法访问,也不会发布描述符。如果其中任何一部分对您来说是新的,请参阅新 VPS 所需的 ufw 规则和Linux 上监听端口的实际含义。同时,您还可以参阅使用密钥和强化的 sshd 配置锁定 SSH。服务器上未列出的桥接,并不能改变该服务器仍使用密码 SSH 的事实。
启动服务,然后查看日志
sudo systemctl enable --now tor.service
sudo systemctl restart tor.service
sudo journalctl -e -u tor@defaultDebian 和 Ubuntu 提供两个单元。tor.service 是一个小型包装单元,tor@default.service 才是实际执行工作的进程。因此,journalctl -u tor 看起来几乎为空,而所需日志位于 tor@default 下。
以下两行表示运行成功:
Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.
Registered server transport 'obfs4' at '0.0.0.0:9443'第一行表示可达性测试通过,描述符已发送到桥接机构。如果该行始终不出现,说明互联网与服务器之间的某个环节正在丢弃发往 ORPort 的流量。第二行必须显示您配置的端口。如果其中显示的是其他端口,说明 tor 从未应用 ServerTransportListenAddr。通常原因是传输名称不一致:两个指令都必须写成 obfs4。
确认两个监听器均已存在:
sudo ss -lntp | grep -E 'tor|obfs4|lyrebird'我的桥接线路在哪里?
obfs4proxy 会在 tor 的数据目录中写入一个模板:
sudo cat /var/lib/tor/pt_state/obfs4_bridgeline.txt该目录归 tor 用户所有,权限为 700,因此不使用 sudo 会得到 Permission denied。文件中包含以下格式的线路:
Bridge obfs4 <IP ADDRESS>:<PORT> <FINGERPRINT> cert=<CERTIFICATE> iat-mode=0将 <IP ADDRESS> 替换为服务器的公网地址,将 <PORT> 替换为 obfs4 端口,而不是 ORPort,再将 <FINGERPRINT> 替换为 tor 写入其数据目录的身份指纹:
sudo cat /var/lib/tor/fingerprint
sudo cat /var/lib/tor/hashed-fingerprint第一个文件包含昵称和应写入桥接线路的身份指纹。第二个文件包含哈希后的指纹。将该指纹粘贴到 中继搜索 中,即可查看桥接是否正在运行,以及大致有多少客户端连接到它。这两个值不能互换。包含哈希值的桥接线路与桥接所提供的身份密钥不匹配,因此客户端会拒绝刚建立的连接。
桥实际上如何触达用户?
您不应将桥接线路交给任何人。描述符到达桥接权威服务器后,分发系统 rdsys(BridgeDB 的后继系统)会将您的桥接分配给一个分发器,用户再向该分发器请求桥接。截至 2026 年 10 月,分发渠道如下:
- bridges.torproject.org/options(https://bridges.torproject.org/options)上的桥接网站。在该页面选择“直接给我桥接!”后,会立即返回 obfs4 线路。这里没有验证码:Tor Project 在 rdsys 取代 BridgeDB 后移除了验证码,并于 2024 年 12 月宣布了这一变更。
- 使用 Gmail 或 Riseup 地址向 bridges@torproject.org 发送邮件,系统会回复桥接线路。限制服务商的原因是,无限制的免费账户会让单个审查者枚举出所有桥接。
- Telegram 机器人 @GetBridgesBot。发送
/start,然后发送/obfs4或/webtunnel。 - Tor Browser 本身。依次打开 Settings 和 Connection,选择“请求桥接”后,Tor Browser 会通过 moat 通道获取桥接。
新桥接完成设置后,大约 3 小时会出现在 Relay Search 中。用户出现所需的时间要长得多。Tor Project 的原话是:“可能需要数天或数周,才能看到一组稳定的用户。” 开始两周用户很少是正常现象,不表示存在故障。
设置 BridgeDistribution none 后,桥接将退出所有这些分发渠道。此时,您可以通过审查者无法读取的渠道,将桥接线路发送给需要它的人。
出现问题时
日志中没有自检行。 ORPort 无法访问。使用 nc -vz your.ip 8443 从另一台机器测试。连接长时间无响应表示数据包被丢弃,因此检查 ufw 和云服务商控制面板。连接被拒绝表示 tor 未监听,因此检查 ss -lntp,并查看日志中是否存在配置错误。
已注册的传输显示的端口不是你设置的端口。 tor 忽略了 ServerTransportListenAddr。传输名称必须与 ServerTransportPlugin 中的名称完全一致,并且两者都必须是 obfs4。
obfs4proxy 无法绑定 443 端口。 使用 getcap /usr/bin/obfs4proxy 确认权限,再使用 systemctl show tor@default -p NoNewPrivileges 确认覆盖配置已应用到该单元。如果输出 NoNewPrivileges=yes,说明你的 drop-in 配置应用到了一个未运行的单元。
/var/lib/tor/pt_state/ 中没有任何内容。 tor 从未启动该传输,这表示 ServerTransportPlugin 中的路径错误。将其与 command -v obfs4proxy 的输出进行比较。
修改后客户端停止连接。 修改地址或 obfs4 端口后,之前分发的所有网桥配置行都会失效。同时检查服务器的公网 IP 是否也发生了变化;某些云服务商在重建服务器时会出现这种情况。
tor 完全无法启动。 运行 sudo -u debian-tor tor --verify-config -f /etc/tor/torrc。该命令会解析文件,输出存在问题的行,并保持正在运行的服务不变。
FAQ
我的 VPS 提供商会因运行 Tor bridge 而投诉吗?
bridge 是入口,因此从服务器发出的流量会前往其他 Tor relay,而不会前往用户选择的网站。您的 IP 地址不会作为请求源地址出现在任何网站日志中,而这正是 exit relay 运营者需要处理投诉的原因。托管规则仍然各不相同,部分提供商会将任何 Tor 服务视为特殊情况,因此请在开始前阅读可接受使用政策,并将您查到的地址填入 ContactInfo。
Tor bridge 会使用多少带宽?
公布的最低要求是上下行 1 Mbit/s,而 guard 或 middle relay 的要求是 10 Mbit/s。实际使用量从接近 0 开始,因为您的 bridge 只承载 distributor 发送给它的用户流量。如果需要设置硬性上限,请在 torrc 中设置 RelayBandwidthRate 和 RelayBandwidthBurst。
为什么没有人连接到我的新 bridge?
bridge 大约需要三小时才会出现在 Relay Search 中。Tor Project 的指导是,形成稳定的用户群需要数天或数周。请确认 descriptor 已发布;该信息就是 journalctl -u tor@default 中的自检行。然后在 Relay Search 中查询经过哈希处理的 fingerprint,并确认 BridgeDistribution 未设置为 none。
我应该运行 obfs4 还是 WebTunnel?
如果这是您的第一个 bridge,请运行 obfs4:只需要一台 VPS、2 个端口、一个域名和一个证书。对于随机特征流量本身会被阻断的环境,请运行 WebTunnel,因为它需要您控制的域名、真实的 Web 服务器、有效的 TLS 证书,以及至少 1 GB 内存。如果同时运行两者,请将它们放在不同的地址上,否则一个 IP 被阻断就会同时使两个 bridge 不可用。
如果之后更改 obfs4 端口,会发生什么?
已经分发的每一行 bridge line 都会停止工作。bridge line 会将地址、端口、fingerprint 和证书绑定在一起,因此持有旧 bridge line 的客户端会连接到没有进程监听的端口,然后放弃连接。服务器的公网 IP 发生变化时,情况也相同。请在设置期间选择端口,之后不要更改。