sing-box Linux 客户端配置:本地 SOCKS 与 HTTP 代理

sing-box Linux 客户端配置:本地 SOCKS 与 HTTP 代理

Ryan Foster
2026年10月11日· 8 分钟阅读

sing-box Linux 客户端配置可从一个绑定 127.0.0.1:2080 的 mixed 入站开始:连接已有授权端点,再让一个应用显式使用这个本地端口。本文限定 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 端口,并检查本地套接字。另一设备不能使用入口;本地仍绑定 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