如何在 Windows 中优雅的使用 sing-box
Published on

如何在 Windows 中优雅的使用 sing-box

Authors
  • avatar
    Name
    Homing So
    Twitter

什么是 sing-box

sing-box 是新一代的通用代理平台,对标 Xray-core 和 clash,并且它支持多种协议(名副其实),并且性能非常强劲。

sing-box 客户端

截至目前,sing-box 的官方图形界面客户端支持:

而 Windows 桌面端仍在开发中,虽说有第三方图形化客户端的支持,例如:

但是这些客户端的可用性较差,很多机场提供的链接无法直接使用,并且还需要额外的学习成本。虽然官方 Windows 的图形界面客户端还在开发中,但是 NON-GUI 还是完美支持的。对于有 CLI 使用基础的朋友,本文可以帮助你在 Windows 上优雅的使用 sing-box cli。

安装 sing-box

这里提供两种方法安装 sing-box cli:

第一种方法不需要做过多解释,唯一要注意的是,你可能已经注意到了所有 AMD64 架构会有两个版本(darwin、linux 和 windows 都有),一个只标了 amd64,一个是 amd64v3,要如何选择呢?

这是东西是 GO 1.18 引入的 Architecture Level1,不同之处在于编译器能够使用到的指令集:

  • GOAMD64=v1 (default): Baseline. 所有 64 位 x86 处理器都能使用
  • GOAMD64=v2: v1 所有的指令集,加上 CMPXCHG16B, LAHF, SAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3.
  • GOAMD64=v3: v2 所有的指令集,加上 AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, OSXSAVE.
  • GOAMD64=v4: v3 所有的指令集,加上 AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL.

简单来说就是 Level 越高,可用指令也就越新,编译出来的代码性能可能有一定提升,但是兼容性就越差。如果你不知道你的 CPU 支持什么指令集,那么用 amd64 准没错。

第二种方法就是使用 Windows 平台的包管理器来进行安装,例如 ScoopChocolatey 等,包管理器安装方法查看官方文档就好。

# 如果你使用 Scoop

scoop install sing-box

# 如果你使用 Chocolatey

choco install sing-box

这种方法的优势是你不用在理会 sing-box 的更新等等琐事,这些事情包管理器会帮你完成。

配置 sing-box 服务

如果每次使用 sing-box 都得打开 terminal 的话也太烦人,所以最好是将它配置成一个 Windows 的服务,这样我们就不用每次重启还要手动运行了,把这些工作都交给 Windows!为了实现这个目的,我们要用到 WinSW,这是一个可以将任何可执行文件配置成 Windows 服务的工具。

先创建一个目录,这里我的目录就叫 sing-box,然后下载 WinSW-x64.exe,放到这个目录并将其重命名为:winsw.exe。然后我们创建一个 winsw.xml,通过这个文件对 sing-box 进行配置。注意!这两个文件的名字一定要相同,否则 WinSW 将无法读取到配置文件。

然后编辑 winsw.xml,写入以下内容:

<service>
  <id>sing-box</id>
  <name>sing-box</name>
  <description>This service runs sing-box continuous integration system.</description>
  <download from="https://你的订阅链接" to="%BASE%\config.json" auth="sspi" />
  <executable>C:\Users\homin\scoop\shims\sing-box.exe</executable>
  <arguments>run</arguments>
  <log mode="reset" />
  <onfailure action="restart" />
</service>

这里解释几个参数2

  • <download>:在指定的 <executable> 运行前,WinSW 会从指定的 URL 获取资源并将其作为文件放到本地。%BASE% 指向 WinSW 的目录,所以这里将订阅链接的内容重命名为 config.json 并放到当前目录下。
  • <executable>:指定要启动的可执行文件,这里指定为 Scoop 安装的 sing-box 的路径,这个路径可以在安装完 sing-box 之后使用:whereis sing-box 获取。
  • <arguments>:指定要传递给可执行文件的参数,这里传递的是 run。因为执行的位置就在当前路径,所以不需要指定 config.json 的路径。

完成后,使用 ./winsw.exe -h 可以查看 WinSW 的所有指令:

./winsw.exe -h

现在使用:./winsw.exe install 安装服务,安装完成后系统每次重启都会自动运行 sing-box,但是现在我们先用 ./winsw.exe start 来启动服务,你将会在当前目录下看到 winsw.wrapper.log 文件,这个文件包含服务启动时的日志,如果一切正常,那么日志应该是这样:

2024-02-07 11:34:16,941 DEBUG - Starting WinSW in console mode
2024-02-07 11:34:19,748 DEBUG - Starting WinSW in console mode
2024-02-07 11:34:19,802 INFO  - Starting service 'sing-box (sing-box)'...
2024-02-07 11:34:20,512 DEBUG - Starting WinSW in service mode
2024-02-07 11:34:20,559 INFO  - Service 'sing-box (sing-box)' started successfully.
2024-02-07 11:34:20,629 INFO  - Downloading: https://你的订阅链接 to C:\Users\homin\workspace\sing-box\config.json. failOnError=False
2024-02-07 11:34:23,004 INFO  - Starting C:\Users\homin\scoop\shims\sing-box.exe run
2024-02-07 11:34:23,043 INFO  - Started process 27484
2024-02-07 11:34:23,063 DEBUG - Forwarding logs of the process System.Diagnostics.Process (sing-box) to WinSW.ResetLogAppender

而目录中的 winsw.out.log 保存了 sing-box 运行时产生的日志。

到这里,我们已经实现了在 Windows 上无感使用 sing-box,并且实现自动更新订阅。

注意!如果出现无法使用的情况,大概率是没有允许 sing-box 访问网络,在具有管理员权限在目录中运行:sing-box.exe run,然后同意连接。如果更新 sing-box 再次出现这个问题,还是可以使用这个方法解决。

Footnotes

  1. https://tip.golang.org/wiki/MinimumRequirements#amd64

  2. https://github.com/winsw/winsw/blob/v3/docs/xml-config-file.md