什麼是 sing-box#
sing-box 是新一代的通用代理平台,對標 Xray-core 和 clash,並且它支持多種協議(名副其實),並且性能非常強勁。
sing-box 客戶端#
截至目前,sing-box 的官方圖形界面客戶端支持:
- Android: sing-box for Android
- iOS/macOS/Apple tvOS: sing-box for Apple platforms
而 Windows 桌面端仍在開發中,雖說有第三方圖形化客戶端的支持,例如:
但是這些客戶端的可用性較差,很多機場提供的鏈接無法直接使用,並且還需要額外的學習成本。雖然官方 Windows 的圖形界面客戶端還在開發中,但是 NON-GUI 還是完美支持的。對於有 CLI 使用基礎的朋友,本文可以幫助你在 Windows 上優雅的使用 sing-box cli。
安裝 sing-box#
這裡提供兩種方法安裝 sing-box cli:
- 直接到 Release 中下載 Windows 的可以執行文件:https://github.com/SagerNet/sing-box/releases/latest
- 使用包管理進行安裝
第一種方法不需要做過多解釋,唯一要注意的是,你可能已經注意到了所有 AMD64 架構會有兩個版本(darwin、linux 和 windows 都有),一個只標了 amd64
,一個是 amd64v3
,要如何選擇呢?
這是東西是 GO 1.18 引入的 Architecture Level,不同之處在於編譯器能夠使用到的指令集:
- 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 平台的包管理器來進行安裝,例如 Scoop、Chocolatey 等,包管理器安裝方法查看官方文檔就好。
# 如果你使用 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>
這裡解釋幾個參數:
<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,並且實現自動更新訂閱。