如果你已经有了一台 VPS,并且完成了《VLESS-Reality 架构实战》里的单节点配置,下一步自然要考虑:怎么规模化管理多个用户、多种协议、以及更复杂的流量策略?
3x-UI(前身是 v2ray-agent / x-ui,MHSanaei 开发)是目前自建面板里最活跃的一个分支。它原生支持 VLESS / VMess / Trojan / Hysteria2 等多种 inbound,同时保留了 Xray-core 的全部能力。这篇文章会完整走一遍从零装到生产环境可用的流程。
一、为什么选 3x-UI(而不是 Marzban / 直手写配置)
| 维度 | 3x-UI | Marzban | 手写 Xray config |
|---|---|---|---|
| 多协议支持 | ✅ VLESS/VMess/Trojan/Hysteria2 | 主要 VLESS | ✅ 全支持 |
| 面板易用性 | ✅ 中文友好 | 中等 | ❌ 需懂 JSON |
| 流量统计 | ✅ 实时 / 历史 | ✅ 详细 | ❌ 自行实现 |
| 用户隔离 | ✅ UUID 级别 | ✅ 子用户 | ❌ 需手动 |
| 更新频率 | ✅ 活跃 | 中等 | 取决于 Xray |
| 上手难度 | 低-中 | 中 | 高 |
3x-UI 的适用场景是中小规模(10-200 用户)的自建节点。超过这个量级,建议考虑带数据库计费的方案。
二、环境准备
2.1 VPS 要求
- 系统:Debian 11/12 或 Ubuntu 22.04/24.04 LTS(推荐 Debian 12)。
- 内存:≥ 512MB(面板本身很轻,但 Xray-core 要占 ~30MB)。
- 端口:443(TCP)用于 Reality,443(UDP)如需 Hysteria2 可同时。
- 权限:root 或 sudo。
2.2 基础系统加固
# 更新系统
apt update && apt upgrade -y
# 安装必要工具
apt install -y curl socat ufw jq
# 配置防火墙(先允许 SSH,再开启)
ufw allow 22/tcp
ufw allow 443/tcp
ufw allow 443/udp
ufw enable
# 确认防火墙状态
ufw status
三、安装 3x-UI
3.1 官方脚本安装
# 下载并执行官方安装脚本
bash -c "$(curl -L https://raw.githubusercontent.com/MHSanaei/3x-ui/main/install.sh)" @ install
脚本会自动:
- 安装 Xray-core 最新版。
- 安装 3x-UI 面板(端口默认
2053,可自定义)。 - 初始化 SQLite 数据库(默认,小规模够用)。
- 生成管理员账号和密码(终端会显示,注意保存)。
3.2 访问面板
浏览器访问 https://你的IP:2053,输入账号密码登录。
3.3 安装 Reality 插件(内置于 Xray)
3x-UI 使用的 Xray-core 已内置 Reality 支持。在面板里添加 inbound 时,直接选择 Reality 作为安全层即可,不需要额外插件。
四、创建 VLESS-Reality 入站
4.1 面板操作流程
登录面板 → 点击左上角 "入站列表" → 选择 "添加入站"。
协议:VLESS
端口:443
传输:tcp
安全:Reality
此时面板会提示生成或选择已有的 x25519 密钥对。点"生成新密钥"。
目标域名 (dest):选一个高信誉域名,如 www.microsoft.com 或 www.google.com。
Short ID:留空自动生成,或手动填 6 位 hex。
Flow:填 xtls-rprx-vision(推荐,提升并发效率)。
点击"保存",inbound 就创建好了。
4.2 添加用户(UUID)
进入刚创建的 inbound → 点击 "客户端" → "添加客户端":
- 邮箱/备注:[email protected](用作标识,不影响功能)
- UUID:点击生成或手动粘贴
- 流量限额:可选,见下一节
- 过期时间:可选,留空=永不过期
保存后,面板会自动生成 分享链接 / 二维码,直接发给用户即可。
五、多用户管理与流量限额
5.1 流量限额
3x-UI 支持两种限额模式:
- 总流量上限(GB):达到后该用户连接被拒绝,可在面板重置。
- 周期限额:配合"过期时间",实现月包/季包模式。
配置路径:入站 → 编辑 inbound → 客户端 → 编辑用户 → 流量限额。
5.2 用户分组
通过 "入站" 的隔离,可以实现用户组逻辑:
- 创建一个
VIPinbound(端口 443,不限速) - 创建一个
Publicinbound(端口 8443,限速 50Mbps) - 不同用户分到不同 inbound,实现 QoS 分层
5.3 连接数限制
| 设置项 | 推荐值 | 说明 |
|---|---|---|
| 单用户最大连接数 | 50-100 | 过高的并发是滥用信号 |
| 全局最大连接 | 500-2000 | 视 VPS 带宽而定 |
| 单 IP 速率限制 | 100 Mbps | 防止单用户拖垮整机 |
六、日志与审计
6.1 面板内置日志
3x-UI 面板自带 实时连接日志,可以看到当前在线用户、使用的协议、流量消耗。位置:面板 → 入站 → 点击对应 inbound → 日志。
6.2 审计建议
- 每日随机抽查:快速扫描异常高流量用户。
- 告警规则:单用户当日流量突增 3 倍以上,触发人工审核。
- 保留周期:连接日志保留 7-30 天(视磁盘空间),需要更久则导出到独立日志系统。
- 敏感信息脱敏:日志中的 IP 地址属于个人数据,如需存档应进行脱敏处理。
6.3 服务端 Xray 日志级别
如需更细粒度的调试,调整 Xray 的 loglevel:
# 在面板设置 → 高级设置 → 日志级别
# 可选:none / warning / error / info / debug
# 生产环境建议:warning 或 error
# 调试时临时设为 info
七、Reality 进阶配置
7.1 多个 inbound 共享同一 Reality 密钥
3x-UI 会在每个 inbound 独立生成密钥对。如果你希望关键 inbound 使用同一对密钥(便于用户切换),可以:
- 在一个 inbound 里生成 Reality 密钥。
- 编辑另一个 inbound,在 Reality 设置里手动粘贴相同的 privateKey。
- 公钥分发给对接的用户客户端。
7.2 靶域名轮换
Reality 的 dest 域名选择见《VLESS-Reality 架构实战》第二节。在 3x-UI 里更换 dest:
- 入站列表 → 选择 inbound → 编辑
- 安全层 → Reality → 修改 dest 域名
- 保存,Xray 热重载(无需重启服务)
7.3 Short ID 批量管理
3x-UI 的 Reality 设置里可以配置 多个 Short ID,支持按客户端分配不同 Short ID。建议:
- 不同 inbound 不要用相同的 Short ID。
- 定期轮换(季度级)。
八、备份与恢复
8.1 一键备份
3x-UI 面板 → 设置 → 备份与恢复 → 导出备份。导出的 JSON 包含:
- 所有 inbound 配置(含 Reality 密钥)
- 用户列表及 UUID
- 流量使用记录
- 面板设置
8.2 恢复流程
# 在面板 → 设置 → 备份与恢复 → 导入备份
# 或命令行:
cd /usr/local/x-ui/
./x-ui restore < 备份文件.json
九、系统维护与监控
9.1 定期更新 3x-UI 与 Xray
# 更新 3x-UI 面板
bash -c "$(curl -L https://raw.githubusercontent.com/MHSanaei/3x-ui/main/install.sh)" @ install
# Xray-core 会在升级时一起更新
9.2 磁盘空间监控
Xray 日志和面板数据库会随用户量增长。定期清理:
# 查看日志大小
du -sh /var/log/xray/ 2>/dev/null
du -sh /usr/local/x-ui/log/ 2>/dev/null
# 清理超过 30 天的日志(谨慎操作)
find /usr/local/x-ui/log/ -type f -mtime +30 -delete
9.3 自动重启策略
3x-UI 安装时会自动创建 systemd 服务:
systemctl status x-ui
journalctl -u x-ui -f # 实时查看面板日志
十、常见问题排查
| 现象 | 可能原因 | 解决方向 |
|---|---|---|
| 面板打不开 | 2053 端口被阻 | 检查 ufw: ufw allow 2053/tcp |
| 添加 inbound 失败 | 端口冲突 | 检查 443/UDP 是否被其他服务占用 |
| Reality 握手失败 | Key 配错 | 重新生成密钥,客户端 publicKey 要对应 |
| 用户能连但速度慢 | VPS 带宽不够 | speedtest 测速,或换更高带宽套餐 |
| 数据库报错 | SQLite 损坏 | 用备份恢复:面板 → 恢复 |
| 面板升级后白屏 | 版本兼容问题 | 清除浏览器缓存,或重新导入备份 |
10.1 Reality 的"证书验证失败"怎么办?
Reality 本身不需要证书,但客户端(如 Clash Verge)在配置了 sni 时会去验证 TLS 证书。解决:
- 客户端侧勾选 skip-cert-verify: true。
- 确保客户端填的
server-name= 面板里设置的dest域名。