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 还是不行。暂时放弃使用它

相关文章

2024-10-30