sing-box配置(客户端:入站tun,出站vless;服务端:入站vless,出站direct)
sing-box 是一款新兴的网络代理工具,被誉为网络代理平台的”瑞士军刀”。因其强大的功能,广泛的代理协议支持以及丰富的客户端选择,逐渐被广大爱好科学的小伙伴所采用。
工具虽然好用,但是说明书却异常复杂难懂。访问过 >>sing-box 官方网站<< 的朋友,多半会有这种感觉。尤其是看到其配置部分时,众多的配置项,又没有相关的解释,更上让人摸不着头脑。
网上 sing-box 的使用教程虽然很多,但都是着重讲解如何安装、使用,很少涉及如何部署 sing-box 服务器,节点添加也是直接通过订阅链接,完全不考虑自建服务器以及自有节点的应用场景。事实上 sing-box 之所以强大,恰恰在于它的适用性,通过它可以胜任多种应用场景,搭建符合个人使用习惯的代理平台,这才是它被称为”瑞士军刀”原因。
本文将详细讲解如何使用 sing-box,包括服务器的搭建、客户端的配置以及 GUI 客户端的使用等。
1] sing-box 使用逻辑
sing-box 定位是通过代理平台,可以作为服务端部署应用,也可以作为客户端为主机提供连接代理功能。
sing-box 主要由 Go 语言开发,可执行文件不区分服务端和客户端,通过配置文件来设置其工作模式。sing-box 将数据流量统一划分为入站和出站两种,分别支持相应的流量类型。
入站配置文件结构如下:
1 | { |
其中”type”键表示入站流量的类型,而”tag”是该类型流量对应的标签。入流量可以支持多种类型,不同流量类型设置不同标签即可。
入站流量类型”type”的取值如下:
类型值 | 类型类别 | 类型说明 |
---|---|---|
direct | Direct | 入站是一个隧道服务器 |
mixed | Mixed | 入站是一个 socks4, socks4a, socks5 和 http 服务器 |
socks | SOCKS | 入站是一个 socks4, socks4a 和 socks5 服务器 |
http | HTTP | 入站是一个 http 服务器 |
shadowsocks | Shadowsocks | 入站是一个 shadowsocks 服务器 |
vmess | VMess | 入站是一个 vmess 服务器 |
trojan | Trojan | 入站是一个 trojan 服务器 |
naive | Naive | 入站是一个 naive 服务器 |
hysteria | Hysteria | 入站是一个 hysteria 服务器 |
shadowtls | ShadowTLS | 入站是一个 shadowtls 服务器 |
tuic | TUIC | 入站是一个 tuic 服务器 |
hysteria2 | Hysteria2 | 入站是一个 hysteria2 服务器 |
vless | VLESS | 入站是一个 vless 服务器 |
tun | Tun | 入站是一个 tun 服务器 |
redirect | Redirect | 入站是一个 redirect 服务器 |
tproxy | TProxy | 入站是一个 tproxy 服务器 |
定义好流量类型后,sing-box 就可以作为入流量的服务器来工作。
同样的,出站配置文件结构如下:
1 | { |
出站流量类型”type”的取值如下:
类型值 | 类型类别 | 类型说明 |
---|---|---|
direct | Direct | 出站直接发送请求 |
block | Block | 出站关闭所有传入请求 |
socks | SOCKS | 出站是 socks4/socks4a/socks5 客户端 |
http | HTTP | 出站是一个 HTTP 代理客户端 |
shadowsocks | Shadowsocks | 出站是一个 shadowsocks 客户端 |
vmess | VMess | 出站是一个 vmess 客户端 |
trojan | Trojan | 出站是一个 trojan 客户端 |
wireguard | Wireguard | 出站是一个 wireguard 客户端 |
hysteria | Hysteria | 出站是一个 hysteria 客户端 |
shadowtls | ShadowTLS | 出站是一个 shadowtls 客户端 |
tuic | TUIC | 出站是一个 tuic 客户端 |
hysteria2 | Hysteria2 | 出站是一个 hysteria2 客户端 |
vless | VLESS | 出站是一个 vless 客户端 |
tor | Tor | 出站是一个 tor 客户端 |
ssh | SSH | 出站是一个 ssh 客户端 |
dns | DNS | 出站是一个 dns 客户端 |
selector | Selector | 出站是一个出站流量选择器 |
urltest | URLTest | 出站流量是 url 访问测试流量 |
可以看到,sing-box 的出入流量类型并不完全相同,并且对于出入流量的配置就决定了 sing-box 自身的工作模式。假设入流量支持 trajon,而出流量是 direct,则 sing-box 可以理解为 trajon 的服务器;如果入流量支持 trajon,而出流量同样支持 trajon,则 sing-box 可以理解为 trajon 的中继器;如果入流量支持 mixed,而出流量支持 trajon,则 sing-box 可以理解为使用 trajon 协议的本地 socks 和 http 代理,也就是通常意义上的 trajon 客户端了。
通过对出入流量的不同组合,就可以灵活的使用 sing-box,让其充分发挥效能,这也正是 sing-box 的强大之处。
sing-box 支持的协议都是标准协议,这就让 sing-box 可以适配各种服务器及客户端。sing-box 客户端可以连接 sing-box 的服务器也可以连接 Xray 程序部署的服务器,只要客户端的出流量 vless 协议配置正确即可正常工作;同样的,Xray 的客户端也可以连接 sing-box 部署的 vless 服务器,只要 sing-box 的入流量配置同 Xray 客户端的配置匹配即可正常工作。从而大大提升了 sing-box 的适用性。
2] sing-box 代理服务器部署
示例将使用 Linux 系统,讲解如何部署一个支持 trajon 和 vless 两种代理协议的 sing-box 服务器。
首先要下载并安装 sing-box。对于 Linux 系统,sing-box 提供了预安装的软件包,分别为 deb 和 rpm 格式,对应了常用的 Linux 发行版。将软件包下载至本机后,使用系统的包管理命令安装即可。
预安装版本会在使用 systemd 系统的发行版创建一个系统服务”sing-box.service”,如果没有创建,也可自添加,内容如下:
1 | [Unit] |
sing-box 的配置文件为”/etc/sing-box/config.json”,基本格式如下:
1 | { |
其中:
- log:用于设置日志相关内容
- dns:用于设置 dns 规则
- inbounds:用于设置入站流量
- outbounds:用于设置出站流量
- route:用于设置路由规则
- experimental:用于设置一些实验性功能
sing-box 的配置文件并非全部必须,无内容的配置项可以删除。
对于代理服务器而言,我们不需要设置复杂的 dns 规则和路由规则,只需要设置好出入站流量规则即可正常提供服务。至于日志和实验性功能,则根据需要选择性设置即可。
现在我们修改配置文件,入流量设置支持 vless 和 naive,出流量则直接使用 direct,启用日志功能,全部配置文件内容如下:
1 | { |
示例配置中,为 sing-box 入流量配置了两种协议支持,侦听端口分别是1443和2443,修改配置文件中标红部分的内容为正确值后,就可以正常启动服务了:
1 | systemctl start sing-box |
图.1 启动 sing-box vless 及 naive 服务
如图所示,sing-box 服务器正常启动,并按照入流量的配置侦听了对应端口,等待相应客户端的连接。
3] sing-box 客户端配置
相较作为服务器,sing-box 作为代理客户端的配置则要复杂难懂的多,其主要原因就是要设置 dns 规则和路由规则。设置这些规则的原因也很直接,就是通过规则来匹配流量是否需要代理,从而达到最佳的使用效果。规则多虽然可以细分流量,精准服务,但是其结果就是配置复杂,稍有不慎,配置中存在逻辑问题,就会影响 sing-box 的工作效果,严重时甚至会造成断网、主机宕机等极端情况。
客户端 dns 和 route 的配置示例如下所示:
1 | { |
从上面的配置文件中,可以清晰的理解 sing-box 的规则逻辑。
首先设置 dns 服务器,每个服务器采用不同的出流量路径,即设置不同的”detour”,其值为出流量类型的”tag”值。设置好该值,则表示访问该 dns 服务器使用该类型的出流量。dns 服务器设置完成后,就可以设置流量 dns 规则,即流量方向和使用的 dns 服务器,规则可以设置多个,匹配上就会生效。
然后设置路由规则,可以理解为定义流量类型匹配条件。例如上面配置中的”outbound”: “proxy”项,如果不设置路由规则,则只知道有一个”tag”为”proxy”的出流量路径,但是什么样的流量可以使用该路径并不知道(特别是当出流量设置多个路径时),这时路由规则”port_range”: [ “0:65535” ]就可以明确指出,连接到本站所有端口的流量都可以使用”proxy”路径,一下就将出口路径了数据流量方向联系了起来。路由规则设置的越精细,则流量控制的就越精准。
现在,假设入流量采用 tun 隧道模式,出流量采用 vless 协议,为 sing-box 客户端配置添加入流量和出流量的配置如下:
1 | "inbounds": [ |
可以看到,出流量设置了不同的出流量路径,可以作为对应的客户端处理对应流量,出流量路径设置了不同的”tag”,供 dns 和 route 配置项使用。
修改以上配置文件的红色部分为正确值,然后将以上全部配置项合成一个 JSON 文件,并加入 log 配置项,即完成了一个采用隧道模式的 sing-box 客户端配置文件。
当然入流量也可以设置其他多种方式,示例使用隧道模式是因为该模式可以截取主机的全部流量,让主机仿佛工作在 VPV 模式下。
现在可以总结一下 sing-box 配置的正确打开方式了,首先确定 sing-box 工作在服务器侧还是客户端侧,然后确定对应的入、出流量类型,即所支持的协议,最后根据出入流量协议类型设置 dns 及路由规则。至于每个协议的具体配置内容,则可以参考官方说明进行配置即可。
有了这个思路,再去看官方的配置说明,会感觉无不受用,句句珠玑。
4] sing-box GUI 客户端使用
sing-box 具有手机端和 macOS 端的 GUI 客户端,Windows 平台的 GUI 客户端暂时还没有发布,但是 v2rayN 是支持使用 sing-box 内核的,也可以理解为一个 Windows 平台的 GUI 客户端。
本文以 Android 客户端为例,讲解如何使用 sing-box 的 GUI 客户端,并且手动添加客户端配置文件以实现节点添加。
打开 sing-box 应用,点击底部左数第三个图标,进入”Profile”页面,点击底部”+”图标添加节点:
图.2 sing-box Android 手机端添加节点
此时会弹出三个选项,分为导入文件、打节点二维码及手动创建三种方式。对于从机场购买的节点,可以直接通过扫描二维码方式导入,对于自建节点或已有客户端配置文件,则可以选择”Create Manually”手动创建。至于文件导入,因为手动创建时也支持从文件中导入,所以建议不使用。
示例使用手机中的配置文件,则点击”Create Manually”:
图.3 sing-box Android 手机端添加新节点
创建节点配置有多种方式,可以从网上下载,也可以从本机文件中导入,当然也可以直接创建配置文件,然后再编辑配置文件内容手动生成配置。如果从本机导入配置文件,则点击”Import File”按钮,然后选择配置文件进行导入,导入成功后,点击”Create”创建节点文件。
节点文件添加成功后,可以点击该节点配置文件,然后点击”Edit Content”按钮编辑配置文件内容、检查配置项错误以及格式化文件内容等操作。
最后,点击应用底部左数第一个按钮,进入控制台,就会看到所有添加成功的节点,选择节点后,点击底部的启动图标就可以启动节点了:
图.4 sing-box Android 手机端启动节点
如果配置文件正确无误,则可以正常启动 sing-box 并代理上网了。
至于 sing-box Android 手机端的其他配置,则可以保持默认即可
总之,sing-box 是功能强大,适用性广的通用代理平台,充分了解它之后,就可以尽情享受无限网络的乐趣了。