如何使用sing-box连接Tor网络

如何使用sing-box连接Tor网络
Astrophel本文仅介绍代理工具,使用时请遵守当地法律法规(
Sing-box一直以来被誉为网络代理工具中的“瑞士军刀”,支持市面上几乎所有的代理协议,甚至连Tor也在其支持协议中。然而,在使用sing-box连接Tor网络时,经常遇到无法访问.onion
后缀网站的问题。本文将介绍如何编写正确的JSON配置文件,使sing-box正常工作。
注意,Tor Browser永远是访问Tor网络的最佳选择,本方法仅讨论技术层面的内容
sing-box配置文件初探
典型的sing-box客户端配置文件主要包括inbounds
,outbounds
以及route
三部分,可以说有了这三部分,我们就可以顺利通过sing-box代理上网了。除此以外,配置文件还可以包括dns
,log
,ntp
等功能模块,本文不再加以赘述。
将sing-box想象为一台机器,对于客户端而言,inbounds
的作用是将本地发送的网络请求接入机器中,outbounds
的作用是将进入机器中的网络请求发送出去,而route
的作用则是指定请求如何发送。下面本文将对各部分进行拆解,分别介绍其配置方法。
inbounds
sing-box支持多种进站方式,包括direct、mixed、tun等。其中,tun模式会劫持DNS请求,并使用dns
模块的配置进行解析。但是,访问.onion
后缀网站时,Tor网络不依赖传统DNS工作,对.onion
后缀网站进行DNS解析无法得到正确的结果,会导致访问失败。相比之下,mixed模式会将请求整体发送到Tor网络服务器进行解析,避免了本地DNS解析遇到的问题。所以,配置文件宜使用mixed模式。1
2
3
4
5
6
7"inbounds": [
{
"type": "mixed",
"listen_port": 1080,
"set_system_proxy": true
}
],
配置文件中,type
表示入站方式,listen_port
表示在本地启动的http、https和socks代理所监听的端口,set_system_proxy
表示自动配置系统代理。
outbounds
outbounds中定义了代理服务端的相关信息,支持direct、vmess、tor等19种协议。其中,预构建程序不包含内置的tor功能,因此可以自行安装tor并通过executable_path
指定其位置加以调用。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31"outbounds": [
{
"tag": "proxy",
// ......
},
{
"type": "tor",
"tag": "tor-out",
"executable_path": "/opt/homebrew/bin/tor",
"data_directory": "/data_directory/",
"torrc": {
"ClientOnly": "1"
},
"detour": "proxy"
},
{
"type": "selector",
"tag": "select",
"outbounds": [
"tor-out",
"proxy",
"direct"
],
"default": "tor-out",
"interrupt_exist_connections": true
},
{
"type": "direct",
"tag": "direct"
}
],
配置文件中,proxy tag为访问普通网站时所用的代理地址,tor tag指定了连接tor网络的相关设置,其中的detour
表示通过proxy
连接tor网络,select tag设定了一个选择器,可以在sing-box图形客户端中选择出站方式,最后的direct tag定义了不通过代理的直连方式。
route
route模块定义了网络连接发送的方式,"action": "sniff"
表示自动嗅探连接的协议和域名,domain_suffix
表示遇到.onion
和torproject.org
为后缀的域名自动走tor网络,final
表示默认出站为select
选择器,所有非.onion
和torproject.org
为后缀的域名将通过选择器指定的连接方式出站。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15"route": {
"rules": [
{
"action": "sniff"
},
{
"outbound": "tor-out",
"domain_suffix": [
".onion",
"torproject.org"
]
}
],
"final": "select"
}
Safari浏览器遇到的问题
当使用Safari浏览器访问.onion
后缀的网站时,会提示“未接入互联网”而失败,使用Chrome浏览器则正常。原因是Safari限制了所有RFC 7686协议内的域名连接。可以通过配置SupplementalMatchDomains
字段解决,但这过于复杂,因此本文最终放弃了使用Safari浏览器访问.onion
网站。关于此问题的更多信息,可以参考Apple论坛的这篇帖子。
完整配置
1 | { |