不灭的焱

革命尚未成功,同志仍须努力 下载Java21

作者:AlbertWen  添加时间:2026-07-10 16:03:03  修改时间:2026-07-17 00:11:08  分类:03.运维管理  编辑

目录

需求描述:

现在内网有3台Window11主机,1台跑S-UI(服务器A),另外2台(服务器B、服务器C) 能访问海外网站,搭建了http代理服务功能(通过3proxy搭建的),那 在 S-UI 后台,如何配置这 服务器B、服务器C,让用户能访问海外网站?

AI回复:

可以。你现在这个场景应该按 “A 做统一入口,B/C 做出口代理” 来配置。

你的新拓扑应该是这样:

用户手机 / 电脑
    ↓
连接服务器 A 的 S-UI 订阅节点
    ↓
服务器 A:S-UI / sing-box
    ↓
服务器 A 的出站 Outbound
    ↓
服务器 B / 服务器 C 的 3proxy HTTP 代理
    ↓
海外网站

也就是说,用户只需要连接服务器 A,不要直接连接 B、C。B、C 只作为 A 的上游出口。

一、假设网络规划

我先用示例 IP 写,你替换成真实的 B、C IP:

服务器 A:10.10.28.10
用途:运行 S-UI
S-UI 面板:10.10.28.10:2095
S-UI 订阅:10.10.28.10:2096
用户连接端口:10.10.28.10:2080

服务器 B:10.10.28.11
用途:运行 3proxy HTTP 代理
HTTP 代理端口:8080

服务器 C:10.10.28.12
用途:运行 3proxy HTTP 代理
HTTP 代理端口:8080

最终用户实际连接的是:

10.10.28.10:2080

服务器 A 再转发给:

10.10.28.11:8080
10.10.28.12:8080

二、先检查服务器 B / C 的 3proxy 是否可用

在服务器 A 上测试 B:

curl -v -x http://10.10.28.11:8080 https://www.google.com

在服务器 A 上测试 C:

curl -v -x http://10.10.28.12:8080 https://www.google.com

如果 B、C 的 3proxy 有账号密码,比如:

username:proxyuser
password:proxypass

测试命令改成:

curl -v -x http://proxyuser:proxypass@10.10.28.11:8080 https://www.google.com

以及:

curl -v -x http://proxyuser:proxypass@10.10.28.12:8080 https://www.google.com

这一步必须先通。 如果 A 连不上 B/C 的 3proxy,S-UI 后台怎么配都没用。

三、服务器 B / C 防火墙建议

B、C 上的 3proxy 端口 不建议开放给所有内网用户,最好只允许服务器 A 访问。

在服务器 B、C 上分别执行管理员 PowerShell:

New-NetFirewallRule `
  -DisplayName "3proxy HTTP 8080 From S-UI A" `
  -Direction Inbound `
  -Protocol TCP `
  -LocalPort 8080 `
  -RemoteAddress 10.10.28.10 `
  -Action Allow

这样只有服务器 A 可以访问 B/C 的 8080 代理端口。

如果你放开给所有人:

-RemoteAddress 10.10.0.0/16

也能用,但不推荐,因为用户会绕过 S-UI,直接用 B/C 的代理。

四、服务器 B / C 的 3proxy 配置原则

B/C 上的 3proxy 要注意 3 点:

1. 监听地址不能只监听 127.0.0.1
2. 端口例如 8080
3. 最好限制只允许服务器 A 访问

如果 3proxy 只监听:

127.0.0.1:8080

服务器 A 是连不到的。

应该监听:

0.0.0.0:8080

或者监听 B/C 自己的内网 IP。

一个简化的 3proxy 思路是:

proxy -p8080 -a -i0.0.0.0

如果加账号密码,思路类似:

users proxyuser:CL:proxypass
auth strong
allow proxyuser 10.10.28.10
proxy -p8080 -a -i0.0.0.0

这里的意思是:只允许服务器 A 使用这个代理。

五、S-UI 后台配置:整体思路

在服务器 A 的 S-UI 后台,你要配置 3 类东西:

1. 入站 Inbound:
   给用户连接服务器 A 用

2. 出站 Outbound:
   服务器 A 连接服务器 B/C 的 3proxy 用

3. 路由 Rules:
   默认流量走 B/C 出口

sing-box 的 HTTP 出站支持配置 serverserver_portusernamepassword,正好适合把 B/C 的 3proxy 当成上游 HTTP 代理。(Sing Box)

六、第一步:在 S-UI 创建用户入口 Inbound

进入服务器 A 的 S-UI:

http://10.10.28.10:2095/app/

进入:

入站管理 / Inbounds
  → 新增 / Add

创建一个 mixed 入站:

类型 Type:mixed
标签 Tag:lan-mixed-2080
监听地址 Listen:0.0.0.0
端口 Port:2080
启用 Enable:开启
用户 Username:Albert
密码 Password:你自己设置

mixed 入站可以同时作为 HTTP 和 SOCKS 代理入口使用,sing-box 官方文档说明它支持 SOCKS4、SOCKS4a、SOCKS5 和 HTTP;配置了 users 后就会使用用户名密码认证。(Sing Box)

这里注意:

Listen 必须是:0.0.0.0
不要写:127.0.0.1

否则用户手机/电脑无法连接服务器 A 的 2080 端口。

七、第二步:在 S-UI 创建服务器 B 的出站

进入:

出站管理 / Outbounds
  → 新增 / Add

创建服务器 B 的 HTTP 出站:

类型 Type:http
标签 Tag:proxy-b

服务器 Server:10.10.28.11
服务器端口 Server Port:8080

用户名 Username:如果 3proxy 没有认证,这里留空
密码 Password:如果 3proxy 没有认证,这里留空

如果 B 的 3proxy 有账号密码:

用户名 Username:proxyuser
密码 Password:proxypass

保存。

这个出站的作用是:

服务器 A 收到用户流量
    ↓
转发给服务器 B 的 3proxy
    ↓
由服务器 B 访问海外网站

八、第三步:在 S-UI 创建服务器 C 的出站

同样进入:

出站管理 / Outbounds
  → 新增 / Add

创建服务器 C 的 HTTP 出站:

类型 Type:http
标签 Tag:proxy-c

服务器 Server:10.10.28.12
服务器端口 Server Port:8080

用户名 Username:如果 3proxy 没有认证,这里留空
密码 Password:如果 3proxy 没有认证,这里留空

保存。

现在服务器 A 上应该有两个 HTTP 出站:

proxy-b
proxy-c

九、第四步:选择 B/C 的使用方式

这里有 3 种配置方式。

方式 1:固定只走服务器 B,最简单

如果你先想跑通,不考虑 C,直接把默认出站设为:

proxy-b

进入:

路由列表 / Rules

找到页面顶部:

路由
  → 默认出站

选择:

默认出站:proxy-b

保存并重启 sing-box。

此时链路是:

用户
  ↓
服务器 A:10.10.28.10:2080
  ↓
proxy-b 出站
  ↓
服务器 B:10.10.28.11:8080
  ↓
海外网站

这是最适合第一次验证的配置。

方式 2:固定只走服务器 C

同理:

默认出站:proxy-c

链路是:

用户
  ↓
服务器 A:10.10.28.10:2080
  ↓
proxy-c 出站
  ↓
服务器 C:10.10.28.12:8080
  ↓
海外网站

这个适合测试 C 是否正常。

方式 3:B/C 自动选择,推荐稳定后再用

如果你的 S-UI 后台支持新增 urltest 出站,可以创建一个自动测速出站。

进入:

出站管理 / Outbounds
  → 新增 / Add

类型选择:

urltest

填写:

标签 Tag:auto-bc

出站 Outbounds:
  proxy-b
  proxy-c

测试地址 URL:
  https://www.gstatic.com/generate_204

测试间隔 Interval:
  3m

容差 Tolerance:
  50

sing-box 官方文档说明,urltest 出站会对一组 outbound 标签进行测试,默认测试 URL 是 https://www.gstatic.com/generate_204,默认测试间隔是 3m,默认容差是 50ms。(Sing Box)

然后到:

路由列表 / Rules
  → 默认出站

选择:

默认出站:auto-bc

保存并重启 sing-box。

此时链路是:

用户
  ↓
服务器 A:10.10.28.10:2080
  ↓
auto-bc 自动选择
  ↓
proxy-b 或 proxy-c
  ↓
服务器 B/C 的 3proxy
  ↓
海外网站

注意:urltest 更像“测速选择”,不是严格意义上的企业级负载均衡。你要先确保 proxy-bproxy-c 单独都能用,再开 auto-bc

十、如果 S-UI 后台没有 urltest 怎么办?

那就先不用自动选择。

你可以采用这个策略:

平时默认出站:proxy-b
服务器 B 故障时:手动改成 proxy-c

也就是:

路由列表
  → 默认出站
  → proxy-b / proxy-c 手动切换

这是最稳、最容易排查的方式。

十一、服务器 A 的防火墙配置

在服务器 A 上放行这些端口:

2095:S-UI 后台
2096:S-UI 订阅
2080:用户代理入口

管理员 PowerShell:

New-NetFirewallRule `
  -DisplayName "S-UI Panel 2095" `
  -Direction Inbound `
  -Protocol TCP `
  -LocalPort 2095 `
  -RemoteAddress 10.10.0.0/16 `
  -Action Allow

New-NetFirewallRule `
  -DisplayName "S-UI Subscription 2096" `
  -Direction Inbound `
  -Protocol TCP `
  -LocalPort 2096 `
  -RemoteAddress 10.10.0.0/16 `
  -Action Allow

New-NetFirewallRule `
  -DisplayName "S-UI Proxy 2080" `
  -Direction Inbound `
  -Protocol TCP `
  -LocalPort 2080 `
  -RemoteAddress 10.10.0.0/16 `
  -Action Allow

更安全的方式是:

2095 只允许管理员电脑访问
2096 允许用户访问
2080 允许用户访问

不要把 2095 面板端口随便开放给整个内网。

十二、完整推荐配置示例

假设:

A:10.10.28.10
B:10.10.28.11:8080
C:10.10.28.12:8080

S-UI 上应该是:

入站

类型:mixed
标签:lan-mixed-2080
监听地址:0.0.0.0
端口:2080
用户:Albert
密码:你的密码

出站 1

类型:http
标签:proxy-b
服务器:10.10.28.11
端口:8080

出站 2

类型:http
标签:proxy-c
服务器:10.10.28.12
端口:8080

出站 3,可选

类型:urltest
标签:auto-bc
成员出站:
  proxy-b
  proxy-c
测试地址:
  https://www.gstatic.com/generate_204

路由

初次测试建议:

默认出站:proxy-b

B 测通后再测试:

默认出站:proxy-c

两台都测通后再改成:

默认出站:auto-bc

十三、测试顺序

1. 在服务器 A 上测试 B/C

curl -v -x http://10.10.28.11:8080 https://www.google.com
curl -v -x http://10.10.28.12:8080 https://www.google.com

如果 B/C 有认证:

curl -v -x http://proxyuser:proxypass@10.10.28.11:8080 https://www.google.com
curl -v -x http://proxyuser:proxypass@10.10.28.12:8080 https://www.google.com

2. 在服务器 A 上检查 S-UI 入站监听

netstat -ano | findstr :2080

应该看到:

0.0.0.0:2080 LISTENING

3. 在用户电脑上测试服务器 A

测试 SOCKS:

curl -v -x socks5://Albert:你的密码@10.10.28.10:2080 https://www.google.com

测试 HTTP:

curl -v -x http://Albert:你的密码@10.10.28.10:2080 https://www.google.com

只要这里通,手机端扫码订阅基本就能用了。

十四、手机端如何用

进入 S-UI 后台:

入站管理
  → lan-mixed-2080
  → 客户端 Albert
  → 二维码 / 订阅

Sing-Box 安卓客户端

选择:

sing-box JSON 订阅

手机 Sing-Box:

新建 Profile
  → 从 URL / 二维码导入
  → 启动

Hiddify 安卓客户端

建议选择:

Clash / Mihomo 订阅

Hiddify:

点击 +
  → 扫码
  → 导入订阅
  → 手动选择 lan-mixed-2080-socks
  → 连接

你前面已经验证过:同样的配置,Sing-Box 官方客户端能用,Hiddify 可能显示已连接但实际不生效。所以手机端建议:

优先:Sing-Box 官方客户端 + sing-box JSON
备选:Hiddify + Clash/Mihomo 订阅

十五、最终推荐方案

我建议你最终这样落地:

服务器 A:
  运行 S-UI
  对用户开放 2080
  对用户开放 2096
  面板 2095 仅管理员访问

服务器 B:
  运行 3proxy
  监听 8080
  只允许服务器 A 访问

服务器 C:
  运行 3proxy
  监听 8080
  只允许服务器 A 访问

S-UI 后台:
  入站:mixed 0.0.0.0:2080
  出站:proxy-b -> 10.10.28.11:8080
  出站:proxy-c -> 10.10.28.12:8080
  路由默认出站:
    初期用 proxy-b
    测试 proxy-c
    稳定后用 auto-bc

一句话总结:

S-UI 服务器 A 不需要自己能访问海外网站,它只需要把用户流量通过 HTTP 出站转发给服务器 B/C 的 3proxy。后台配置就是:A 上建 mixed 入站给用户连接,再建两个 http 出站分别指向 B/C,最后在“路由列表”的“默认出站”里选择 proxy-bproxy-cauto-bc