sing-box Linux 客戶端設定:本機 SOCKS 與 HTTP 代理

sing-box Linux 客戶端設定:本機 SOCKS 與 HTTP 代理

Ryan Foster
2026年10月11日· 8 分鐘讀完

進行 sing-box Linux 客戶端設定時,可先將 mixed 入站綁定至 127.0.0.1:2080,接駁已有授權的遠端端點,再讓一個應用程式明確使用這個本機連接埠。本文採用 Ubuntu 24.04 LTS、sing-box 1.14.3 及 curl,不設定全機流量擷取。內容按官方文件整理,未進行完整端到端實測。[1]

關鍵要點

  • SOCKS、HTTP 描述本機入口;VLESS/REALITY 描述本例的遠端連線。
  • 設定檢查通過及連接埠正在監聽,均不等於出口可用。
  • 以錯誤憑證及本機程序停止後的新請求檢查失敗行為。
  • 回環位址限制一般遠端存取,並不驗證其他本機用戶的身份。
  • 保留原有服務與代理設定,只撤銷今次操作。

先參考自建方案規劃指南,釐清端點、憑證、更新及還原由誰負責。應用程式不支援明確指定代理時,先閱讀 TUN 與系統代理的覆蓋範圍比較,再決定是否改變任務。本文不能確認 UDP、IPv6、DNS 或其他應用程式的覆蓋情況。

步驟 1:準備獲授權端點及獨立程式

你需要自有或獲准使用的 VLESS/REALITY 端點,包括位址、TCP 連接埠、UUID、REALITY 公鑰、short ID、獲准的伺服器名稱及 flow。向管理員取得準確資料;只有訂閱名稱或 IP 位址並不足夠,不要從公開節點清單取得憑證。

以 cat /etc/os-release 確認 Ubuntu 24.04 LTS,以 uname -m 確認架構。在官方 1.14.3 發行頁選擇相應 Linux 壓縮檔:x86_64 用 amd64,aarch64 用 arm64。在私人目錄解壓,再將執行檔放到你新建的 $HOME/.local/lib/sing-box-1.14.3/sing-box;目標已存在便停止。採用官方發行渠道及可取得的發行完整性核對說明,不執行來歷不明的安裝指令碼。[1][2]

這種用戶目錄安裝方式不會替換系統套件或啟用服務。不要混用其他安裝方式的服務管理指令。操作前私下備份相關設定檔及應用程式代理偏好,記錄現有系統代理或 VPN,並維持原狀。

SB_BIN="$HOME/.local/lib/sing-box-1.14.3/sing-box"
"$SB_BIN" version
pgrep -a -x sing-box
ss -ltn 'sport = :2080'

版本應顯示 1.14.3,連接埠檢查不應找到既有監聽。pgrep 沒有相符結果屬正常;程序資料可見範圍有限,不能據此判定全機沒有其他代理。如有服務或連接埠衝突,先確認負責者並停止今次操作,不要終止原有程序。使用其他核心版本前,先核對遷移說明及欄位。[3]

步驟 2:建立只監聽回環位址的 sing-box mixed 入站

建立新的私人目錄。下方限制權限的 umask 只在命令替換的子 shell 內生效,不會改變目前終端機建立檔案的預設權限。保存印出的路徑。第二個終端機要使用同一目錄,不要再建另一個。

LOCAL_PROXY_DIR=$(
  umask 077
  mktemp -d "$HOME/sing-box-local.XXXXXX"
)
printf '%s\n' "$LOCAL_PROXY_DIR"

用本機編輯器將以下內容儲存為該目錄內的 config.json。檢查或啟動前,替換所有大寫佔位符。 443 只是示例,須配合端點實際連接埠。本範本假設 VLESS over TCP 配合 REALITY 與 Vision;如端點採用其他 flow 或傳輸方式,應索取受支援的設定,不要猜測欄位。[4][5][6]

{
  "log": { "level": "info" },
  "inbounds": [
    {
      "type": "mixed",
      "tag": "local-mixed",
      "listen": "127.0.0.1",
      "listen_port": 2080,
      "set_system_proxy": false
    }
  ],
  "outbounds": [
    {
      "type": "vless",
      "tag": "authorized-exit",
      "server": "YOUR_SERVER_IP",
      "server_port": 443,
      "uuid": "YOUR_AUTHORIZED_UUID",
      "flow": "xtls-rprx-vision",
      "network": "tcp",
      "tls": {
        "enabled": true,
        "server_name": "YOUR_APPROVED_SERVER_NAME",
        "insecure": false,
        "utls": { "enabled": true, "fingerprint": "chrome" },
        "reality": {
          "enabled": true,
          "public_key": "YOUR_REALITY_PUBLIC_KEY",
          "short_id": "YOUR_SHORT_ID"
        }
      }
    }
  ],
  "route": { "final": "authorized-exit" }
}
替換項目取得及核對內容
YOUR_SERVER_IP、server_port獲授權端點的數字 IP 位址及 TCP 連接埠;使用 IP 可避免此處額外解析伺服器連線位址。
YOUR_AUTHORIZED_UUID端點目前啟用的 VLESS 用戶識別碼。
YOUR_APPROVED_SERVER_NAME該 REALITY 端點指定的伺服器名稱,不一定等於伺服器 IP。
YOUR_REALITY_PUBLIC_KEY伺服器的 REALITY 公鑰,絕不可填私鑰。
YOUR_SHORT_ID、flow端點接受的準確 short ID,以及相符的 Vision 設定。

核心、入站及出站的分工說明可協助分清角色。sing-box mixed 入站接收本機 SOCKS/HTTP,並不會令遠端 HTTP 代理變成相容 VLESS。設定明確指定最終出站,沒有直接連線後備路徑。[4][5][7]

set_system_proxy: false 阻止這個實例自動改動系統代理。沒有設定 users,本機入口便毋須認證:127.0.0.1 限制網絡可達範圍,並不限制哪個本機帳戶可以使用。共用主機應先評估 SOCKS 監聽的信任邊界。保護目錄和憑證,不要把它們貼到問題報告。[4][8]

步驟 3:檢查設定,再以一般用戶前台啟動

在準備設定的第一個終端機,以一般用戶執行:

"$SB_BIN" check -c "$LOCAL_PROXY_DIR/config.json"

只有成功結束才繼續。檢查失敗時保留原有可用設定,只修正獨立檔案中的 JSON、佔位符或不支援欄位。檢查不能證明端點授權、遠端可用或目標服務有回應;官方客戶端指南亦將本機代理入口與出站行為分開說明。[9]

"$SB_BIN" run -c "$LOCAL_PROXY_DIR/config.json"

保持此終端機開啟,在第二個終端機執行 ss -ltnp 'sport = :2080'。預期 TCP 監聽為 127.0.0.1:2080;能看到程序資料時,應屬於今次實例。如顯示 0.0.0.0、[::]、區域網絡位址或非預期程序,按 Ctrl-C 停止今次實例並查明原因;不要加入防火牆例外或改用 root 掩蓋啟動失敗。[8]

步驟 4:以 curl 明確指定 HTTP 及 SOCKS 代理

在第二個終端機將 CHECK_URL 改成你獲准請求的 HTTPS 位址。盡量選擇自己控制、回應可預期的服務;下方佔位位址不能直接使用。逐條執行,私下記錄結束碼、回應和對應的程序日誌。

CHECK_URL="https://YOUR_AUTHORIZED_TEST_HOST/"
curl -q --noproxy "" --proxy http://127.0.0.1:2080 \
  --connect-timeout 5 --max-time 20 --fail --show-error "$CHECK_URL"
curl -q --noproxy "" --proxy socks5h://127.0.0.1:2080 \
  --connect-timeout 5 --max-time 20 --fail --show-error "$CHECK_URL"

curl 首個選項 -q 避免隱藏的 .curlrc 干擾,空白 --noproxy 覆蓋略過代理清單。明確指定的代理只適用於這兩次呼叫。HTTP 代理存取 HTTPS 會使用 CONNECT;socks5h:// 把目標域名交給代理,socks5:// 則由 curl 在本機解析。本設定會將傳入域名送到 VLESS 端點,但不審核遠端解析器或全機 DNS 流量。[10]

核對 curl 出口時,將新請求與受控目標服務記錄的來源位址對應;如服務前有可信反向代理,亦須考慮其記錄方式。預期來源為獲授權伺服器的實際出口,可能與連接伺服器的位址不同。單憑狀態碼或成功下載網頁,不能確認出口位址。

如另行將瀏覽器明確設為同一本機入口,可在該瀏覽器開啟 IP 查詢工具比較出口。結果只代表存取工具的那次請求;未設定的瀏覽器不能驗證 curl,兩者亦不能證明其他應用程式的路徑。改動瀏覽器偏好前保存原值,完成後還原。

步驟 5:檢查失敗行為及監聽邊界

下表列出方法、預期及失敗處理,並非已執行的測試結果。使用新的 curl 呼叫,不要用快取網頁或既有連線。

方法預期失敗處理
按 Ctrl-C 停止今次前台實例,確認沒有監聽,再重複兩種明確指定代理的請求。兩個新請求均無法連接本機入口。如有成功,核對實際參數、其他監聽程序及呼叫包裝;不能聲稱失敗時已阻止直接連線。
原實例停止後,將 config.json 複製為 invalid.json;只把 UUID 換成格式有效、但經管理員確認未獲授權的 UUID。檢查及執行副本,再重複兩種請求。本機可能成功監聽,但遠端認證失敗,無法取得受保護目標的預期回應。如仍收到內容,停止並確認實際使用的檔案、程序、端點與身份。
獨立實例監聽時,由另一部獲准裝置存取主機區域網絡 IP 的 2080 連接埠,同時檢查本機 socket。另一裝置不能使用入口;本機仍綁定至 127.0.0.1。遠端失敗也可能只是防火牆效果。如綁定範圍更廣,停止並修正;不要為測試開放連接埠。

錯誤 UUID 分支須在第一個終端機先執行 "$SB_BIN" check -c "$LOCAL_PROXY_DIR/invalid.json",才執行 "$SB_BIN" run -c "$LOCAL_PROXY_DIR/invalid.json"。完成後停止副本,只在需要繼續檢查時重啟原設定。始終只執行一個今次實例,不要改動真正伺服器的憑證來製造負向結果。

這份 sing-box Linux 客戶端設定範圍有限:僅 TCP 的出站不能驗證 UDP 轉送;IPv4 回環入口不會擷取全機 IPv6。其他本機用戶仍可能使用免認證入口。如信任模型不合適,停止並另行設計本機認證或隔離。[4][5]

步驟 6:還原應用程式偏好及清理今次實例

將改過的應用程式偏好還原為已記錄數值。curl 指令沒有建立持續設定,停止使用明確指定代理的參數即可;不要全域清空環境變數,或重設今次沒有改動的系統網絡。

在第一個終端機對今次實例按 Ctrl-C,再以 ss -ltnp 'sport = :2080' 確認其監聽已消失。如仍有監聽,清理前先識別程序,不使用 killall 或停止無關服務。刻意仍指向已停止入口的請求應失敗;應用程式還原後的一般存取行為須另行檢查。

確認目錄正是今次建立的路徑後,只刪除兩個已知檔案及空目錄:

rm -f -- "$LOCAL_PROXY_DIR/config.json" "$LOCAL_PROXY_DIR/invalid.json"
rmdir -- "$LOCAL_PROXY_DIR"

確認還原前保留私人基線備份。獨立安裝的程式可留下重用;不再需要時,只移除該確切的用戶目錄安裝。本流程沒有建立自動啟動服務、系統路由或系統代理變更,毋須撤銷這些設定。

sing-box Linux 客戶端設定失敗,應由哪層排查?

由最先失敗的一層開始。沒有監聽,先看前台錯誤、檔案路徑及連接埠歸屬;有監聽但遠端失敗,與管理員核對端點、UUID、公鑰、short ID、flow、伺服器名稱及時鐘。不要關閉憑證驗證,亦不要加入直接連線後備路徑。

只有域名請求失敗時,比較 curl 本機解析、代理側解析及遠端服務的解析政策,不要因單一應用程式失敗就改系統 DNS。如下載的設定似乎未生效,用執行中設定核對清單定位;應用程式結果不一致時,按裝置及應用程式排障次序分清各自設定,不擴大代理範圍。

總結

可用的 sing-box Linux 客戶端設定需要明確的程式版本、私人設定檔、回環監聽、應用程式明確指定代理的請求,以及可驗證的還原方法。自行記錄方法、預期與實際觀察;設定解析、瀏覽器 IP 結果及另一裝置連線失敗,各自回答不同問題。

常見問題

mixed 與遠端端點是相同協議嗎?

不是。Mixed 在本機接收 SOCKS 和 HTTP,本例透過 VLESS/REALITY 出站轉送。遠端端點須配合出站設定,而非本機應用程式內的代理類型名稱。

為甚麼設定檢查通過,請求仍然失敗?

檢查可以找出設定問題,卻不能證明遠端工作階段可用。本機開始監聽後,錯誤憑證、無法使用的端點、目標限制或解析行為仍可能令新請求失敗。

為甚麼瀏覽器與終端機顯示不同出口?

各應用程式自行選擇代理行為。本文指令明確設定 curl,瀏覽器可能採用不同設定或沒有代理。應檢查目標應用程式的請求,並比較實際設定。

socks5h 能避免所有 DNS 請求在本機發出嗎?

不能。它只讓該次 curl 請求把目標域名交給代理,不在 curl 本機解析。其他應用程式、背景服務及遠端解析器有各自行為,本文沒有驗證這些範圍。

這個入口涵蓋 UDP 及 IPv6 嗎?

本文不能確認這種覆蓋。範例把 VLESS 出站限制為 TCP,並在 IPv4 回環位址接收連線。UDP 應用程式及全機 IPv6 須獨立設計和驗證,HTTP 成功並不足夠。

其他本機用戶能使用這個連接埠嗎?

可能可以。回環是網絡邊界,本入口沒有用戶認證。私人設定檔保護檔案內容,並不會將監聽連接埠專屬於某個帳戶;共用主機須額外評估信任邊界。

停止 sing-box 後如何還原應用程式?

還原改過的應用程式偏好,停止向 curl 傳入本機代理參數。確認今次實例的監聽消失,再檢查一般存取;不要為還原這次獨立操作而改動原有 VPN 或系統服務。


本文只適用於自有或獲准使用的系統及端點,請遵守適用法律與網絡政策。檢查內容是供讀者執行的方法及預期,不代表作者已完成實測,亦不代表全機已受保護。

來源:

  1. SagerNet, sing-box 1.14.3 release. https://github.com/SagerNet/sing-box/releases/tag/v1.14.3
  2. sing-box, official installation channels. https://sing-box.sagernet.org/installation/package-manager/
  3. sing-box, migration notes. https://sing-box.sagernet.org/migration/
  4. sing-box, Mixed inbound. https://sing-box.sagernet.org/configuration/inbound/mixed/
  5. sing-box, VLESS outbound. https://sing-box.sagernet.org/configuration/outbound/vless/
  6. sing-box, TLS and REALITY fields. https://sing-box.sagernet.org/configuration/shared/tls/
  7. sing-box, Route final outbound. https://sing-box.sagernet.org/configuration/route/
  8. sing-box, Listen fields. https://sing-box.sagernet.org/configuration/shared/listen/
  9. sing-box, client proxy guide. https://sing-box.sagernet.org/manual/proxy/client/
  10. curl, proxy, hostname resolution and configuration options. https://curl.se/docs/manpage.html

Sources checked 2026 年 10 月 11 日。

延伸閱讀:

開啟 3 天免費試用

註冊即可免費體驗全部高級功能。

*只限新用戶;每位用戶只可獲得一次試用。

sing-box Linux 客戶端設定:本機 SOCKS 與 HTTP 代理 | AethoVPN