目录
需求描述:
现在内网有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 出站支持配置 server、server_port、username、password,正好适合把 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-b、proxy-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-b、proxy-c 或 auto-bc。