自建 Sub2API 与代理节点部署
本文整理一套面向 3-4 人小范围自用 的服务器、3x-ui、VLESS Reality、Cloudflare、Mihomo Docker、SubBoost 分流与 sub2api 代理配置方案。
适用场景:
- 多人共用
sub2api - 每人每月约
200GB流量 - 总预算约
45-60 元/月 - 希望支持 4K 视频、AI 服务、Google、YouTube 等访问
- 希望通过面板管理用户、端口、流量和节点
一、服务器选型
推荐规格
建议最低配置:
CPU:1C 起步,推荐 2C
内存:1GB 起步,推荐 2GB
硬盘:20GB+
流量:至少 1TB/月,推荐 4TB/月
端口:至少 200Mbps,推荐 500Mbps+
地区:洛杉矶、日本、新加坡、香港等
虚拟化:KVM
网络:独立 IPv4
多人同时观看 4K 视频时,带宽建议:
单人 4K:30Mbps+
3-4 人同时:150Mbps+
更舒服:300Mbps+
实际推荐类型
本方案最终更适合类似下面的 VPS:
2C / 2GB RAM / 20GB SSD / 4TB 流量 / 800Mbps 端口
洛杉矶优化线路
月付约 8 USD
该配置适合 3-4 人分摊使用,流量余量较大,电信和联通方向通常表现较好。
二、服务器网络测试
Ping 测试
Windows PowerShell:
ping 服务器IP -n 100
重点看:
丢包率:最好 0%
平均延迟:美西 130-200ms 可接受
抖动:越小越好
路由测试
Windows:
tracert -d 服务器IP
Linux:
traceroute 服务器IP
如果没有 traceroute:
apt update
apt install -y traceroute
端口连通性测试
Windows PowerShell:
Test-NetConnection 服务器IP -Port 22
Test-NetConnection 服务器IP -Port 443
网络质量脚本
服务器执行:
bash <(curl -sL https://Check.Place) -N
主要关注:
- BGP/ASN 信息
- 三网延迟
- 回程路由
- 国内测速
- 国际互联质量
IP 质量检测
bash <(curl -sL https://Check.Place) -I
或:
bash <(curl -Ls IP.Check.Place)
重点看:
ChatGPT 是否解锁
YouTube 是否解锁
Netflix 是否解锁
TikTok 是否解锁
是否高风险代理 IP
黑名单数量
三、3x-ui 面板安装
切换 root
sudo -i
更新系统并安装依赖
apt update && apt install -y curl wget ufw
安装 3x-ui
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
安装建议:
Panel Port:自定义,例如 20530
Username:不要使用 admin/root
Password:使用强密码
WebBasePath:使用随机路径
SSL:长期建议使用域名证书
如果暂时没有域名,可先选择 IP 证书:
2. Let's Encrypt for IP Address
长期使用建议切换为域名证书。
四、Cloudflare 域名解析与 SSL
DNS 解析
在 Cloudflare 添加面板域名:
类型:A
名称:panel
内容:服务器IP
代理状态:DNS only 灰云
建议单独添加节点域名:
类型:A
名称:node
内容:服务器IP
代理状态:DNS only 灰云
VLESS Reality 节点必须使用 DNS only 灰云,不要开启 Cloudflare 橙云代理。
为面板申请域名证书
服务器执行:
x-ui
选择:
19. SSL Certificate Management
1. Get SSL (Domain)
输入域名:
panel.example.com
端口使用默认:
80
成功后面板访问地址类似:
https://panel.example.com:20530/随机路径/
五、UFW 防火墙配置
启用基础端口
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 20530/tcp
ufw enable
ufw status
端口含义:
22:SSH
80:证书申请
443:HTTPS / 备用
20530:3x-ui 面板端口
放行节点端口
假设节点端口是 54540:
ufw allow 54540/tcp
ufw status
如果后续新增入站端口,例如 50644、13936、26460:
ufw allow 50644/tcp
ufw allow 13936/tcp
ufw allow 26460/tcp
ufw status
删除不用端口
ufw delete allow 端口号/tcp
ufw status
示例:
ufw delete allow 30123/tcp
长期建议
更推荐使用:
一个入站端口 + 多个客户端 UUID
而不是:
每个人单独一个入站端口
这样只需开放一个节点端口,暴露面更小,同时仍可按客户端统计流量。
六、创建 VLESS Reality 节点
创建入站
3x-ui 面板:
入站列表 -> 添加入站
推荐配置:
协议:VLESS
传输:TCP
安全:Reality
端口:例如 54540
SNI:例如 www.oracle.com / www.microsoft.com / aws.amazon.com
客户端:每人单独一个 UUID
开启 Sniffing
进入入站编辑:
Sniffing -> 开启
建议勾选:
HTTP
TLS
QUIC
客户端链接示例
vless://UUID@node.example.com:54540?type=tcp&encryption=none&security=reality&pbk=PUBLIC_KEY&fp=chrome&sni=www.oracle.com&sid=SHORT_ID&spx=%2F#node-name
说明:
server:建议使用 node.example.com
sni:保持 Reality 配置里的伪装域名
七、3x-ui 安全加固
修改面板账号密码
x-ui
选择:
6. Reset Username & Password
建议:
用户名不要使用 admin/root
密码使用 16 位以上强密码
如不确定 2FA 状态,可选择禁用旧 2FA
修改 WebBasePath
x-ui
选择:
7. Reset Web Base Path
建议使用随机长路径。
轮换敏感信息
如果曾泄露过以下内容,应立即轮换:
3x-ui 面板用户名密码
WebBasePath
Telegram Bot Token
VLESS 客户端 UUID
订阅链接
Telegram Bot Token 可在 @BotFather 中使用:
/revoke
八、Telegram Bot 配置
获取 Bot Token
通过 Telegram @BotFather 创建机器人,得到格式类似:
1234567890:AAxxxxxxxxxxxxxxxxxxxxxxxx
Bot Token 等同于机器人密码,不应公开。
获取管理员 Chat ID
方法一:使用 @userinfobot:
/start
方法二:使用 Bot API:
https://api.telegram.org/bot你的Token/getUpdates
需要先给机器人发送 /start。返回内容中的 chat.id 即管理员聊天 ID。
九、使用 SubBoost 生成 Clash/Mihomo 分流配置
本方案推荐将精细分流放在 客户端 Clash/Mihomo,而不是 3x-ui 服务端。
原因:
- 服务端
direct表示服务器直连目标网站,不表示用户本地直连 - 如果想节省 VPS 流量,必须在客户端完成国内直连、国外代理等分流
- 3x-ui/Xray 无法直接读取 Clash 的
proxy-groups、rule-providers、.mrs规则 - SubBoost 生成的是 Clash/Mihomo 配置,适合 FlClash、Clash Verge Rev 等客户端
使用方式
访问:
https://subboost.org/
将 3x-ui 导出的 vless:// 节点链接填入 SubBoost,生成 Clash/Mihomo YAML 配置。
客户端导入方式:
FlClash -> 添加配置 -> 文件 -> 选择 yaml 文件
或:
FlClash -> 添加配置 -> URL -> 粘贴订阅地址
Clash/Mihomo 节点示例
proxies:
- name: "vless-node"
type: vless
server: node.example.com
port: 54540
uuid: "你的UUID"
encryption: none
tls: true
servername: "www.oracle.com"
client-fingerprint: chrome
network: tcp
udp: true
reality-opts:
public-key: "你的PublicKey"
short-id: "你的ShortID"
spider-x: "/"
分流分组示例
SubBoost 生成的配置通常包含类似分组:
proxy-groups:
- name: "🚀 节点选择"
type: select
proxies: ["⚡ 自动选择", DIRECT, REJECT, vless-node]
- name: "⚡ 自动选择"
type: url-test
proxies: [vless-node]
url: "https://www.gstatic.com/generate_204"
interval: 300
lazy: false
- name: "🛑 广告拦截"
type: select
proxies: [REJECT, DIRECT, "🚀 节点选择"]
- name: "🤖 AI 服务"
type: select
proxies: ["🚀 节点选择", "⚡ 自动选择", DIRECT, REJECT, vless-node]
- name: "📹 油管视频"
type: select
proxies: ["🚀 节点选择", "⚡ 自动选择", DIRECT, REJECT, vless-node]
- name: "🔒 国内服务"
type: select
proxies: [DIRECT, REJECT, "🚀 节点选择", "⚡ 自动选择", vless-node]
- name: "🌍 非中国"
type: select
proxies: ["🚀 节点选择", "⚡ 自动选择", DIRECT, REJECT, vless-node]
- name: "🐟 漏网之鱼"
type: select
proxies: ["🚀 节点选择", "⚡ 自动选择", DIRECT, REJECT, vless-node]
规则思路
典型规则逻辑:
广告 -> REJECT
私有网络 -> DIRECT
国内服务 -> DIRECT
AI / Google / YouTube / Telegram / GitHub -> 节点选择
非中国 -> 节点选择
漏网之鱼 -> 节点选择
这种方式能让客户端界面显示完整策略组,例如:
🚀 节点选择
⚡ 自动选择
🤖 AI 服务
📹 油管视频
🔍 谷歌服务
📲 电报消息
🔒 国内服务
🌍 非中国
🐟 漏网之鱼
如果只导入 3x-ui 的单条 vless:// 链接,Clash/FlClash 只会显示一个裸节点,不会出现这些分流分组。
十、Mihomo Docker 部署
docker-compose.yml
services:
clash:
image: metacubex/mihomo:latest
container_name: clash
restart: always
volumes:
- ./config-us.yaml:/root/.config/mihomo/config.yaml
- ./ui:/root/.config/mihomo/ui
ports:
- "7890:7890"
- "7891:7891"
- "9090:9090"
networks:
- sub2api_net
networks:
sub2api_net:
external: true
name: sub2api-deploy_sub2api-network
config-us.yaml 开头配置
Docker 部署时,external-controller 必须监听 0.0.0.0:
port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
unified-delay: true
tcp-concurrent: true
find-process-mode: strict
external-controller: '0.0.0.0:9090'
external-ui: /root/.config/mihomo/ui
secret: 'your-secret'
错误写法:
external-controller: '127.0.0.1:9090'
原因:
Docker 容器内的 127.0.0.1 只代表容器自己,宿主机和反代访问不到。
UI 目录要求
目录结构:
部署目录/
docker-compose.yml
config-us.yaml
ui/
ui 目录内应直接包含:
index.html
assets/
...
而不是只放一个 ui.zip。
启动与日志
docker compose down
docker compose up -d
docker logs clash --tail 50
正常情况下不应出现:
Can't find config
如果出现该日志,说明容器没有读到配置文件。
十一、sub2api 使用代理
如果 sub2api 和 Mihomo 在同一台服务器或同一 Docker 网络中,可以让 sub2api 走本地代理。
HTTP 代理:
http://127.0.0.1:7890
SOCKS5 代理:
socks5://127.0.0.1:7891
如果在 Docker 网络中,可能需要使用服务名:
http://clash:7890
socks5://clash:7891
具体取决于 sub2api 容器与 Mihomo 容器是否在同一个 Docker network。
十二、iOS Shadowrocket 导入订阅
导入订阅链接
Shadowrocket -> 右上角 + -> 类型选择 Subscribe -> 填入订阅 URL -> 完成
导入单条节点
复制 vless:// 链接后打开 Shadowrocket,通常会自动识别。
注意事项
如果使用 VLESS + Reality:
Shadowrocket 版本必须较新
旧版可能不支持 Reality
十三、风险评估
当前方案抗风险能力
整体评价:
小范围自用:中等偏上
公开传播:风险较高
商业售卖:不建议
长期大流量 4K:有被限速或封 IP 风险
优点
VLESS + Reality 协议伪装较好
小范围用户数量少
Cloudflare 灰云 DNS 不破坏 Reality
服务器 IP 质量尚可
BT 可阻断
可按用户统计流量
风险点
VPS 机房 IP 仍可能被识别
高流量视频特征明显
源站 IP 暴露
面板端口暴露公网
UUID / Token / 面板路径泄露会增加滥用风险
Reality 不是绝对抗封方案
加固建议
使用强密码
更换泄露过的 UUID
更换 Telegram Bot Token
面板和节点使用不同域名
Cloudflare 保持灰云
开启 UFW
阻断 BT
不要公开订阅
定期备份配置
确认商家是否支持换 IP
十四、常见问题与试错总结
面板域名 502
常见原因:
访问地址不完整
Cloudflare 开了橙云
端口未放行
正确访问格式:
https://panel.example.com:20530/随机路径/
Cloudflare 应为:
DNS only 灰云
Mihomo Docker UI 502
常见原因:
容器没有读到 config.yaml
external-controller 写成了 127.0.0.1
ui 目录未正确挂载
反代目标端口错误
正确配置:
external-controller: '0.0.0.0:9090'
external-ui: /root/.config/mihomo/ui
只有自己的节点能通,其他用户不通
常见原因:
只放行了自己的节点端口
其他入站端口未放行
解决:
ufw allow 新端口/tcp
ufw status
3x-ui 单条节点导入后没有 Clash 分组
原因:
vless:// 只是单节点链接
不包含 proxy-groups 和 rules
解决:
使用 SubBoost 生成完整 Clash/Mihomo YAML,再导入客户端。
十五、推荐最终架构
推荐结构:
Cloudflare DNS 灰云
|
v
node.example.com -> VPS
|
v
3x-ui / VLESS Reality
|
v
多客户端 UUID 管理
如果需要让 sub2api 使用代理:
Mihomo Docker
- HTTP: 7890
- SOCKS5: 7891
- UI/API: 9090
sub2api -> http://clash:7890
长期建议:
一个 Reality 入站端口
多个客户端 UUID
Cloudflare 灰云解析
UFW 只放行必要端口
客户端使用 SubBoost/Clash 做精细分流
服务端只做基础节点管理和流量统计
十六、维护命令速查
查看防火墙
ufw status
放行端口
ufw allow 端口/tcp
删除端口
ufw delete allow 端口/tcp
进入 3x-ui 菜单
x-ui
重启 3x-ui
x-ui restart
查看 3x-ui 状态
x-ui status
Docker 重启 Mihomo
docker compose down
docker compose up -d
docker logs clash --tail 50
网络质量测试
bash <(curl -sL https://Check.Place) -N
IP 质量测试
bash <(curl -sL https://Check.Place) -I
结论
这套方案适合 小范围、低调、自用型 的 sub2api + VLESS Reality + 3x-ui + Mihomo/SubBoost 组合。
服务器侧负责:
节点创建
用户管理
流量统计
基础安全
客户端侧负责:
SubBoost 分流
Clash/Mihomo 策略组
国内直连
国外代理
AI/Google/YouTube 分类路由
需要明确的是:
该方案不是抗封专线,不适合公开售卖或大规模传播。
真正稳定的关键是:
用户规模小
链接不公开
端口暴露少
配置定期轮换
防火墙正确放行
保留备份与换 IP 预案
评论