Tor 命令行 + singbox + overtls 实现匿名翻墙
下载、安装 Tor 命令行版本
建议用 scoop 自动下载、安装:
$ scoop install tor
Updating Scoop...
Scoop was updated successfully!
Installing 'tor' (0.4.8.12-14.0.1) [64bit] from 'main' bucket
Checking hash of tor-expert-bundle-windows-x86_64-14.0.1.tar.gz ... ok.
Extracting tor-expert-bundle-windows-x86_64-14.0.1.tar.gz ... done.
Running pre_install script...done.
Linking ~\scoop\apps\tor\current => ~\scoop\apps\tor\0.4.8.12-14.0.1
Creating shim for 'tor'.
Creating shim for 'tor-gencert'.
Persisting data
Persisting torrc
'tor' (0.4.8.12-14.0.1) was installed successfully!
Notes
-----
You will need to configure Tor before using, as it does not come pre-configured.
See https://tb-manual.torproject.org/ for details
sing-box 增加 Tor 相关设置
在 overtls + sing-box,分享一个比较完美的 sing-box 配置 一文的配置基础上,在 singbox 的 "outbounds" 中增加如下配置:
{
"tag": "out-tor",
"type": "selector",
"outbounds": ["proxy-tor"],
"default": "proxy-tor"
},
{
"type": "socks",
"tag": "proxy-tor",
"server": "127.0.0.1",
// 9050 是 Tor 监听的端口
"server_port": 9050,
"network": "tcp",
"udp_over_tcp": {
"enabled": false
}
}
out-tor
使用举例:
{
"clash_mode": "global",
"outbound": "out-tor"
},
Tor 命令行配置文件 torrc
增加设置
如果 Tor 命令行程序的安装目录是 ~\scoop\apps\tor\current
,那么配置文件就是:
~\scoop\apps\tor\current\torrc
在 torrc
中添加:
UseBridges 0
Socks5Proxy 127.0.0.1:765
-
UseBridges 0
我们通过 overtls 连接到 Tor 网络,因此不需要用到网桥
-
Socks5Proxy 127.0.0.1:765
765 是 overtls 监听的端口,请改为你的翻墙软件的本地 SOCKS5 代理端口。作用是告诉 Tor 客户端,无法直接连接 Tor 网络,请 Tor 客户端通过本机 overtls 监听的 765 端口(翻墙软件)翻墙,翻出去之后再连接Tor网络
现在我们使用 overtls 作为 Tor 的前置代理(Tor over VPN),这时如果 ISP 监控流量,看到的是在访问一个网站,而【看不到】Tor 流量。在这种情况下,“流量关联分析”的【难度】将提高 N 个数量级
运行方法
-
运行 overtls
-
运行 tor
可命令行执行
tor
命令行显示的日志主要如下:
-
读取配置文件
Oct 30 18:43:34.595 [notice] Read configuration file ~\scoop\apps\tor\current\torrc
-
Tor 监听在 9050 端口
Oct 30 18:43:34.611 [notice] Opening Socks listener on 127.0.0.1:9050 Oct 30 18:43:34.611 [notice] Opened Socks listener connection (ready) on 127.0.0.1:9050
-
开始连接代理服务器
Oct 30 18:43:35.000 [notice] Bootstrapped 0% (starting): Starting
-
完成连接代理服务器
Oct 30 18:43:42.000 [notice] Bootstrapped 100% (done): Done
完整的 Tor 命令行程序启动日志:
$ tor Nov 01 17:01:10.290 [notice] Tor 0.4.8.13 (git-e153e72c01315f86) running on Windows 8 [or later] with Libevent 2.1.12-stable, OpenSSL 3.0.15, Zlib 1.3.1, Liblzma N/A, Libzstd N/A and Unknown N/A as libc. Nov 01 17:01:10.290 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://support.torproject.org/faq/staying-anonymous/ Nov 01 17:01:10.321 [notice] Read configuration file "scoop\apps\tor\current\torrc". Nov 01 17:01:10.321 [notice] Opening Socks listener on 127.0.0.1:9050 Nov 01 17:01:10.321 [notice] Opened Socks listener connection (ready) on 127.0.0.1:9050 Nov 01 17:01:10.000 [notice] Parsing GEOIP IPv4 file scoop\apps\tor\current\data\geoip. Nov 01 17:01:10.000 [notice] Parsing GEOIP IPv6 file scoop\apps\tor\current\data\geoip6. Nov 01 17:01:11.000 [notice] Bootstrapped 0% (starting): Starting Nov 01 17:01:13.000 [notice] Starting with guard context "default" Nov 01 17:01:14.000 [notice] Bootstrapped 3% (conn_proxy): Connecting to proxy Nov 01 17:01:14.000 [notice] Bootstrapped 4% (conn_done_proxy): Connected to proxy Nov 01 17:01:14.000 [notice] Bootstrapped 10% (conn_done): Connected to a relay Nov 01 17:01:16.000 [notice] Bootstrapped 14% (handshake): Handshaking with a relay Nov 01 17:01:16.000 [notice] Bootstrapped 15% (handshake_done): Handshake with a relay done Nov 01 17:01:16.000 [notice] Bootstrapped 75% (enough_dirinfo): Loaded enough directory info to build circuits Nov 01 17:01:16.000 [notice] Bootstrapped 90% (ap_handshake_done): Handshake finished with a relay to build circuits Nov 01 17:01:16.000 [notice] Bootstrapped 95% (circuit_create): Establishing a Tor circuit Nov 01 17:01:18.000 [notice] Bootstrapped 100% (done): Done
-
-
运行 sing-box
匿名上网原理解释
sing-box 接管了系统所有流量,出站规则设置为 out-tor
的流量都转发到 Tor 监听的本地端口 9050,而 Tor 又通过 overtls
监听的本地端口连接到 Tor 网络
如何避免“陷阱节点”/“蜜罐节点
修改 Tor 的配置文件,规避这些不安全国家的节点
至少需要屏蔽“大陆、香港、澳门”这三个节点
torrc 文件末尾,加入下面这行(ExcludeNodes 表示排除这些国家/地区的节点,StrictNodes 表示强制执行):
ExcludeNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu} StrictNodes 1
cn中国、hk香港、mo澳门、sg新加坡、th泰国、pk巴基斯坦、by白俄罗斯、ru俄罗斯、ir伊朗、vn越南、ph菲律宾、my马来西亚、cu古巴
如果不设置 StrictNodes 1
,Tor 客户端首先也会规避 ExcludeNodes 列出的这些国家。但如果 Tor 客户端找不到可用的线路,就会去尝试位于排除列表中的节点
如果设置了 StrictNodes 1
,即使 Tor 客户端找不到可用的线路,也不会去尝试这些国家的节点
torrc 设置 Tor 出口节点国家为主要发达国家
- EntryNodes 限定只使用某些国家的节点作为【入口节点】
- ExitNodes 限定只使用某些国家的节点作为【出口节点】
Tor 出口节点国家设置为美、加等主要发达国家:
ExitNodes {us},{ca},{gb},{au},{nz},{de},{fr},{nl} StrictNodes 1
上面的国家代码分别代表:美、加、英、澳、新西兰、德、法、荷兰
重启 tor 生效
Tor 官方提示:我可以选择出口节点的所在地吗?强烈不推荐自行修改 Tor 线路。 让 Tor 选择路由会给你带来最高的安全性,修改中继节点可能会破坏你的匿名性。 如果你只想访问只在某些国家或地区提供的服务,你可能更应该去使用 VPN 而不是 Tor。 请注意,VPN 和 Tor 在隐私属性上是有区别的,但是 VPN 可以解决一些区域限制问题
Windows 平台完整的 torrc 文件
DataDirectory "C:\\Users\\<your-name>\\scoop\\apps\\tor\\current\\data"
GeoIPFile "C:\\Users\\<your-name>\\scoop\\apps\\tor\\current\\data\\geoip"
GeoIPv6File "C:\\Users\\<your-name>\\scoop\\apps\\tor\\current\\data\\geoip6"
UseBridges 0
Socks5Proxy 127.0.0.1:765
ExcludeNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu} StrictNodes 1
ExitNodes {us},{ca},{gb},{au},{nz},{de},{fr},{nl} StrictNodes 1
测试是否已经连上 Tor 网络
-
访问 https://check.torproject.org/
如果你的浏览器已经在使用 Tor 的线路,页面会出现一个【绿色】洋葱头,以及一行绿色的英文提示
Congratulations. This browser is configured to use Tor
页面还显示了出口节点的 IP 地址,如:Your IP address appears to be:
204.203.202.201
-
访问 https://www.iplocation.net/ip-lookup ,查看 IP 地址和所属地区
-
测试命令行流量是否走 Tor 网络
curl ipinfo.io
连上 Tor 网络后显示的信息类似下面:
{ "ip": "109.70.69.68", "hostname": "tor-exit.appliedprivacy.net", "city": "Vienna", "region": "Vienna", "country": "AT", "loc": "48.2085,16.3721", "org": "AS208323 Foundation for Applied Privacy", "postal": "1010", "timezone": "Europe/Vienna" }
注:有时 ipinfo.io 会拒绝访问,这时可用:
wget -q -O - ipinfo.io/ip # 只显示 IP 地址 curl icanhazip.com curl api.ipify.org curl ipecho.net/plain
Windows 设置 Tor 为系统服务(暂未成功)
以管理员身份执行命令:
# 创建服务
tor.exe --service install
# 启动服务
tor.exe --service start
# 停止服务
tor.exe --service stop
# To remove the service:
tor.exe --service stop
tor.exe --service remove
# By default, the Tor service listens on port 9050, which can be checked by the command:
netstat -aon | findstr ":9050"
我在创建 tor 服务时遇到:
Running on a Post-Win2K OS, so we'll assume that the LocalService account exists
Done with CreateService
Service installed successfully
StartService() failed : Access is denied
一个命令在 Windows terminal 运行 Tor 和 singbox
把 tor 可执行文件的快捷方式 tor 加入 PATH 环境变量中
把运行 sing-box 的脚本文件的快捷方式 singbox 加入 PATH
创建一个 bash 脚本文件 torsb
,内容如下:
#!/bin/bash
wt -w 0 new-tab bash -c tor
wt -w 0 new-tab bash -c singbox
运行 torsb
会在 Windows terminal 的两个 tab 中分别运行 tor 和 sing-box
另外,在 Windows Terminal 的 Settings 中:
When Terminal starts
设置为 Open windows from a previous session
。关闭 Terminal 时保持 Tor 和 sing-box 的运行窗口,下次打开 Terminal 时会自动恢复
Tor 浏览器集成的 tor 命令行程序测试
安装 Tor 浏览器
\Tor Browser\Browser\TorBrowser\Tor\tor.exe
就是个命令行程序\Tor Browser\Browser\TorBrowser\Data\Tor\torrc
是命令行程序配置文件
运行 Tor 命令行程序后,启动 Tor 浏览器(不连接 Tor), 浏览器无法访问任何网页
配置文件中增加 Socks5Proxy 127.0.0.1:765
后:
- 双击 tor.exe 后无法连接到 Tor 网络,启动 scoop 安装版 tor 并连上 Tor 网络后再试就可以了
- 运行 Tor 浏览器并连上 Tor 网络后,其他浏览器并不能连上 Tor 网络
官方 Tor 命令行程序不适合新手
我下载了 官方 Tor 命令行程序 Windows 版,发现目录结构比 scoop 安装版简单,需要自己手动配置。我尝试复制 scoop 安装版的 torrc 文件到其相应目录,再运行 tor.exe 还是不行。暂时放弃使用它
相关文章
- 官方 Tor 命令行程序下载
- Tor 浏览器使用方法
- Tor 命令行版本(不含浏览器捆绑)的使用指南,兼Tor技术简介
- 如何优雅地用 Tor
- 编程随想:“如何翻墙”系列:关于 Tor 的常见问题解答
- 国家地区代码 wikipedia
- How to configure Tor as service on windows?
- How to install and run the Tor service in windows
- 使用 Tor 隐匿命令行请求
- sing-box - outbound: tor
- Tor linux man page
2024-10-30