-
-
Notifications
You must be signed in to change notification settings - Fork 2
Multi control.zh_CN
Multi-control 将多个 m-ui 面板连接为地位相等的对等节点,不存在主控、被控或中央协调器。每个面板保存自己的身份和 Peer 列表,交换带签名的节点描述,并尝试直接连接已知成员。
这个网络用于:
- Sync Inbound:主动向可信 Peer 复制选定的 Inbound 和 Client。
- 跨面板订阅:拉取并缓存远端 Inbound,输出聚合订阅地址。
Important
P2P 成员网络不等于 NAT 穿透。每个 Peer 都必须能通过它公布的面板地址和端口被其他服务器直接访问,或者由反向代理转发固定 Peer 路径。
进入 Panel Settings → Multi-control,设置:
- Node Name:便于辨识的名称,最多 128 字符。
-
Local Node Address:其他服务器实际能访问的地址,例如
https://panel-a.example.com:2053。只能包含协议、主机和面板端口,不要加入隐藏的面板 URI 路径。
使用 HTTPS 时,地址中的主机名必须被证书覆盖。m-ui 不会跳过 Peer 的证书校验。
每个安装实例会在 data/multi-control.json 创建 Ed25519 私有身份。不要在复制面板到另一台服务器时一并复制该文件,否则会产生重复身份。
在本机 Multi-control 区域启用或生成配对 token。程序默认生成 16 位;手动输入可使用 16–32 位小写字母和数字,并且必须同时包含字母和数字。
Token 只用于首次配对握手。配对完成后,面板使用带签名的节点身份维持信任关系和执行同步。
请把配对 token 当作启动密钥保护。加入所需 Peer 后可以轮换 token,切勿在截图或 Issue 中公开。
在另一个 m-ui 面板中:
- 打开 Panel Settings → Multi-control。
- 点击 Add Connection。
- 输入目标面板主机/IP、面板端口、协议(
auto、https或http)和配对 token。 - 确认连接。
auto 会先尝试 HTTPS,再尝试 HTTP。目标面板必须已经启用配对 token,并配置 Local Node Address。连接第一个 Peer 后,节点会通过已签名的描述自动发现其他成员。
Peer 列表显示 endpoint、节点名、在线状态、最后在线时间和最近一次连接错误。离线成员会保留,并通过退避机制重试。节点公布地址发生变化时,应在该节点自己的设置中更新。
Disconnect 是本地操作:从当前面板删除成员并阻止自动重新发现,不会从其他面板全局删除它。需要恢复时使用 Allow rediscovery,在线的共同成员可以再次介绍该 Peer。
每个面板最多保存 128 个成员。心跳通常每 15 秒进行一次,直接同步最多并发处理 4 个 Peer。
Peer 协议不位于隐藏的面板 URI 路径下。反向代理必须将下列固定路径转发到面板监听器:
/_m-ui/peer/v1
/_m-ui/peer/inbound/v1
专用订阅端口不提供这些端点。转发到面板端口时应保留 Host,并使用 Peer 信任的 TLS 证书。
进入 Inbounds → General Actions → Sync Inbound。
- 左侧列出除本机外的在线 Peer,默认全选。
- 右侧矩阵表示本机
Username × Inbound关系。 - 绿色表示已选,白色表示未选,灰色表示没有实际 Client、不可选择。
- 可以选择整个 Peer、Username 行、Inbound 列或单个格子。
- 点击 Sync,检查确认窗口并确认。
- 在进度窗口查看每台面板和每个 Inbound 的结果。
传输内容包括选中的 Inbound 配置和 Client。来自相同来源身份的已有副本会更新;目标上的无关 Client、流量统计和在线状态会保留。同名或端口冲突会报告错误,不会覆盖本地 Inbound。
同步使用临时 X25519 会话和 AES-GCM 加密,并通过可信 Ed25519 Peer 身份认证。证书/私钥路径会在传输前转换为 PEM 内容。
同步成功后,需要在目标面板重启 Mihomo。success 表示目标已经保存 Inbound 并生成 YAML,不表示目标核心已经加载新配置。
先设置 Panel Settings → Subscription → Cross Panel Subscription Path,格式必须是 /isub 加 16 位小写字母/数字。
然后进入 Inbounds → General Actions → Export All Subscriptions (Cross Panel)。
- 点击 Pull all inbound information。
- m-ui 联系全部已连接 Peer 并显示进度。
- 远端 Inbound 和 Username token 缓存在
data/cross-panel-subscriptions.json。 - 本机 Inbound 始终实时读取;远端临时拉取失败时保留上一次成功缓存。
- 复制或下载生成的裸地址;追加
/clash获取 Mihomo YAML。
远端节点按 Inbound Name 排序。缓存按来源身份保存,所以 Peer 离线不会立即删除上次成功的数据。只有点击 Clear remote cache 才会清空全部非本机缓存。
聚合地址格式:
https://panel.example.com:port/<cross-panel-path>/<username-token>
https://panel.example.com:port/<cross-panel-path>/<username-token>/clash
跨面板页面只包含该 Username 对应的节点。远端节点分享链接使用远端 Peer 的主机和端口;聚合页面本身由执行聚合的面板提供。
- 在云安全组和主机防火墙中允许面板之间访问。
- 地址可能变化时使用稳定 DNS 名称。
- 保持所有服务器时间同步。
- 使用覆盖 Peer 主机名的 TLS 证书。
- 反向代理必须转发两个 Peer 路径,且不能附加隐藏面板路径。
- 使用新同步功能前,应升级所有参与面板。
普通面板备份不包含 multi-control.json,避免把备份恢复到其他机器后产生重复 Peer 身份。迁移同一台服务器时可以安全地单独迁移这个文件并保留权限;创建新节点时应让 m-ui 生成新身份。