搭建利用 obfs4 混淆的 Tor Bridge 的过程

Contents
  1. 1. Tor 的节点分为三种
  2. 2. 混淆插件
  3. 3. VPS 对于 Tor 的支持
  4. 4. 准备
  5. 5. 添加软件源
    1. 5.1. Debian 10
    2. 5.2. Ubuntu 18.04
  6. 6. 添加 key
  7. 7. 下载并安装 Tor 和 obfs
  8. 8. 配置 Tor Bridge
  9. 9. 防火墙配置
  10. 10. 重启 Tor 服务
  11. 11. 记录必要信息
  12. 12. 使用网桥
  13. 13. References

本文最后更新于 2019 年 9 月 20 日


本文以 Debian 10 和 Ubuntu 18.04 为例,说明如何搭建 Tor Bridge。

请先参照 Ubuntu (Debian) 服务器的初始化配置 一文对服务器进行各种必要的配置。本文以 sammy 用户为例,进行 Tor bridge 的搭建,并默认已按初始化配置文章对服务器进行了必要的安全配置。


Tor 的目的在其匿名性,众所周知,如果在特殊的网络环境下,想连接到 Tor 网络可能需要一个网桥,一般的网桥还不行,因为会被检测到 Tor 流量,ip 直接被 ban 掉。

Tor 的节点分为三种

  1. 作为出口节点,Exit Relays 。出口节点实际上是暴露于互联网的,相当于最后真正去访问站点的那个人。

  2. 在 Tor directory 中列出的中继节点,叫 Middle Relays 。IP 很可能被检测到,很可能被屏蔽。

  3. 在 Tor directory 中不列出的中继节点,叫 Bridges ,也就是我们这篇文章重点介绍的节点。它可以帮助你绕过网络运营商对于 Tor 的封锁。

混淆插件

在过去的几年中,审查者开始可以屏蔽即使使用了 Bridges 的 Tor clients 。故,在严格审查的环境下,我们应该使用混淆插件进行规避,比如 meek,比如 obfs4,在这里,将着重介绍如何使用 obfs4 。

VPS 对于 Tor 的支持

并非所有 VPS 商都允许使用 Tor,所以应该事先了解政策支持情况,下面表格列出了常用的 VPS 支持情况:

VPSBridgesRelayExit
DigitalOceanYESYESNO
VultrYESYESNO
LinodeYESYESAmbiguous

获取更多信息,可以参考支持/禁封列表

下面便以 Debian 10 和 Ubuntu 18.04 为例,说明如何搭建 Tor Bridge 。

准备

切换为 root 用户:

1
sudo su -

输入 sammy 用户的密码。

安装必要的软件:

1
apt update && apt install apt-transport-https -y

添加软件源

Debian 10

1
sh -c 'printf "deb https://deb.torproject.org/torproject.org buster main" > /etc/apt/sources.list.d/tor.list'

Ubuntu 18.04

1
sh -c 'printf "deb https://deb.torproject.org/torproject.org bionic main" > /etc/apt/sources.list.d/tor.list'

添加 key

1
2
curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
1
2
apt update
apt install deb.torproject.org-keyring -y

下载并安装 Tor 和 obfs

1
2
apt update
apt install tor obfs4proxy -y

配置 Tor Bridge

首先,确认服务器上的时钟日期是正确的。

然后编辑 /etc/tor/torrc,设置成 Bridge:

1
vim /etc/tor/torrc
/etc/tor/torrc
1
2
3
4
5
6
7
8
9
10
SocksPort 0
Log notice file /var/log/tor/notices.log
RunAsDaemon 1
ORPort 自定义端口-1
Exitpolicy reject *:*
BridgeRelay 1
PublishServerDescriptor 0
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ServerTransportListenAddr obfs4 [::]:自定义端口-2
ExtORPort auto

注意替换其中的 自定义端口-1自定义端口-2 为不同的端口号,为简便起见, 自定义端口-2 应大于 1024 。如你希望你的 Bridge 分享给需要的人使用,请在配置中删去 PublishServerDescriptor 0 一行。

防火墙配置

1
2
ufw allow 自定义端口-1
ufw allow 自定义端口-2

重启 Tor 服务

1
systemctl restart tor

记录必要信息

查看日志文件,命令:less /var/log/tor/notices.log,当看到有类似的输出,证明很成功:

1
2
3
4
5
6
[notice] Your Tor server's identity key fingerprint is 'Unnamed 530FA95A79B9145D315F15F01215BE2F3BE921EB'
[notice] Your Tor bridge's hashed identity key fingerprint is 'Unnamed 83D1AC9EC2F15D7024278461DC91A8B2E9BBF43A'
[notice] Registered server transport 'obfs4' at '[::]:自定义端口-2'
[notice] Tor has successfully opened a circuit. Looks like client functionality is working.
[notice] Bootstrapped 100%: Done
[notice] Now checking whether ORPort <redacted>:自定义端口-1 is reachable... (this may take up to 20 minutes -- look for log messages indicating success)

找到输出中 server's identity fingerprint(本例中是 530FA95A79B9145D315F15F01215BE2F3BE921EB),复制下来。

使用网桥

/var/lib/tor/pt_state/obfs4_bridgeline.txt 文件中可以看到类似如下的内容:

/var/lib/tor/pt_state/obfs4_bridgeline.txt
1
Bridge obfs4 <IP ADDRESS>:<PORT> <FINGERPRINT> cert=6LMNcXh6MIfApbZiMksnS4Kj+2sffZ5pybSqtcOO5YoHgfrMpkBJqvLxhuR2Ppau0L2seg iatmode=0

Bridge 去了,ip 换了,端口写对了,fingerprint 粘贴了,之后,把这行复制即可,这个,就是你的网桥了。

本例中最后成品(可在 Tor browser 上使用的):

1
obfs4 123.456.789.10:自定义端口-2 530FA95A79B9145D315F15F01215BE2F3BE921EB cert=6LMNcXh6MIfApbZiMksnS4Kj+2sffZ5pybSqtcOO5YoHgfrMpkBJqvLxhuR2Ppau0L2seg iatmode=0

愉快使用吧。


References

Dissecting Tor Bridges: a Security Evaluation of Their Private and Public Infrastructures

WHAT IS TOR?

Tor Project | Debian / Ubuntu

Configure (Private) (Obfuscated) Tor Bridges

Call for obfs4 bridges, and a brief discussion of obfs4proxy

Optimal configuration for an obfs4 bridge

Tor Project: Debian/Ubuntu Instructions

obfs4proxy bridge deployment guide

Obfsproxy Instructions

关于搭建 Tor Relay 的一点胡扯——以及为什么现在 Tor Bridges 更好