mux-proxy-manager
v0.6.6
Published
Manage muxProxy nodes and an authorized Daoway HTTPS inspection proxy
Downloads
509
Readme
mux-proxy-manager
轻量的代理服务管理后台,包含 muxProxy 多实例管理和 DaowayProxy HTTP/HTTPS 抓包模块。npm 包不包含 muxProxy 核心,DaowayProxy 随管理后台安装。
版本变更见 CHANGELOG.md。
运行
要求 Node.js 22 或更高版本。
npx mux-proxy-manager start --port=8088或全局安装:
npm install -g mux-proxy-manager
mux-proxy-manager start --port=8088默认监听 0.0.0.0。浏览器可通过服务器 IP 访问 http://SERVER_IP:8088,默认账号和密码均为 admin。
也可以直接从项目源码构建并启动,无需发布或全局安装 npm 包:
npm install
HOST=0.0.0.0 PORT=8088 MUX_ADMIN_PASSWORD='高强度密码' npm run serverHOST 默认是 0.0.0.0,PORT 默认是 8088;命令行中的 --host、--port 优先级更高。npm run server 会先构建前端和 Node.js 服务,再启动内置守护进程。后续仅启动已构建版本可使用 npm start -- --port=8088。
Docker / Dokploy
仓库已包含多阶段 Dockerfile。在 Dokploy 中选择从仓库的 Dockerfile 构建,并配置:
PORT=8088
MUX_ADMIN_USER=admin
MUX_ADMIN_PASSWORD=请替换为高强度密码将持久化卷挂载到 /data,管理后台容器端口设置为 8088。SOCKS5 凭据还需映射 11080-11090/TCP;使用 DaowayProxy 时映射 8888/TCP;MWS 和 TCPProxy 则按页面中设置的监听端口逐个映射。未映射的容器端口无法从公网访问。
muxProxy 实例的工作目录为 /data/logs,核心使用相对路径生成的日志会写入该持久化目录。
本地验证镜像:
docker build -t mux-proxy-manager .
docker run --rm -p 8088:8088 -p 11080-11090:11080-11090 \
-e MUX_ADMIN_PASSWORD='高强度密码' \
-v mux-proxy-data:/data \
mux-proxy-manager容器部署应通过 Dokploy 重新构建镜像完成升级,不要使用管理页面中的 npm 在线更新。
生产环境必须设置后台密码:
MUX_ADMIN_PASSWORD='高强度密码' mux-proxy-manager start --port=8088在远程服务器上建议通过 SSH 隧道访问:
ssh -L 8088:127.0.0.1:8088 root@SERVER_IPCLI
mux-proxy-manager start [选项]
--port, -port <端口> 管理后台端口,默认 8088
--host <地址> 管理后台地址,默认 0.0.0.0
--data-dir <目录> 配置与日志目录
--core-path <文件> muxProxy 安装位置
--help 显示帮助
--version 显示版本默认数据目录:root 用户为 /var/lib/mux-proxy-manager,普通用户为 ~/.local/share/mux-proxy-manager。
登录后的侧边栏包含三个独立页面:/overview 查看全部服务状态与资源,/muxproxy 管理现有 muxProxy 节点,/daoway 管理 DaowayProxy 抓包服务。
内置守护进程
普通的 start 命令会自动启动一个轻量守护进程,再由它运行管理后台,无需安装或配置其他服务:
MUX_ADMIN_PASSWORD='高强度后台密码' \
mux-proxy-manager start --host=0.0.0.0 --port=10086管理后台崩溃或完成 npm 更新后,守护进程会按最多 10 秒的退避间隔重新拉起后台。muxProxy 的期望运行状态保存在数据目录中,后台恢复后会自动恢复原有实例。页面服务控制卡会显示“内置守护进程运行中”。停止最外层 mux-proxy-manager 进程会同时停止后台和所有 muxProxy 实例。
内置守护负责本次进程生命周期和更新恢复,不负责操作系统重启后的开机自启;需要开机自启时仍可由服务器现有的 systemd、Docker 或云平台托管这一条 start 命令。
首次登录会进入安装引导,可从公网 HTTP/HTTPS URL 下载或从浏览器上传 muxProxy。安装器会检查 Linux ELF 格式、64 位架构和当前服务器 CPU 架构,然后以 0700 权限原子写入目标位置。
SOCKS5 模式中,每条连接凭据拥有独立监听端口和独立 muxProxy 进程。新凭据依次使用 11080-11090 中的空闲端口;已有凭据端口不会在升级时自动修改。客户端流量直接进入 muxProxy,Node.js 仅负责配置、进程生命周期和状态读取,不参与代理数据转发。启用或停用凭据会同步启动或停止对应实例;MWS 出口和中继模式仍使用单个 muxProxy 实例。请在服务器防火墙和云安全组中放行 11080-11090/TCP。
客户端列表优先通过 Linux ss 读取当前 TCP 连接,并以 /proc/net/tcp* 作为兜底,按“公网 IP + 凭据”聚合。后台不保存历史流量、目标地址或请求内容。公网 IP 会由服务器发送给第三方服务 ipwho.is 获取城市、地区和国家,成功结果在内存中缓存 24 小时;介意该项外部查询时,不应使用此版本的定位功能。全局拓扑只展示本机 muxProxy 到 MWS 上游的延迟,点击在线客户端可查看完整代理链路。
每个已启用的连接凭据都可生成独立的 Clash YAML 订阅地址与二维码。订阅地址自动使用当前管理后台的访问地址;YAML 中的 SOCKS5 地址从订阅请求的 Host 提取。订阅地址包含 SOCKS5 密码,应视同密码保存;停用或删除凭据会让地址立即失效。
DaowayProxy
DaowayProxy 默认监听 0.0.0.0:8888,作为独立子进程由管理后台启停和恢复。客户端设置 HTTP 代理为服务器地址与该端口后,普通 HTTP 会直接转发;HTTPS 使用 CONNECT 建立隧道,并由本地 CA 动态签发目标站点证书完成解密和转发。
首次打开公开的 /cert 客户端页面时,会在数据目录的 daoway/certs/ 生成 ca.key 和 ca.crt。页面会根据当前访问地址和 DaowayProxy 配置动态展示服务器、端口、证书信息与 iOS 安装步骤,证书文件由 /cert/ca.crt 下载。CA 私钥只保存在服务器,权限为 0600。只能在你拥有或明确获授权的设备及流量上使用该功能;启用前还需在防火墙和云安全组中放行配置的代理 TCP 端口。
只有 daoway.cn 及其子域名会写入 daoway/logs/capture-YYYY-MM-DD.jsonl,其他域名正常转发但不落盘。管理页读取最近三天、最多 5000 条记录,正文最多保留前 10000 字符,并支持 gzip、deflate 与 Brotli 解压。使用证书固定(certificate pinning)的 App 可能拒绝 MITM 证书,这是客户端安全策略的正常结果。
DaowayProxy 页面还提供按 dwid 维护附加参数的轻量表,数据保存在 daoway/logs/daoway_extras.json,可直接在页面新增、编辑和删除。
如需把核心安装到系统可执行目录:
sudo MUX_ADMIN_PASSWORD='高强度密码' \
mux-proxy-manager start --port=8088 --core-path=/usr/local/bin/muxProxy开发
npm install
npm run dev:mock
npm test
npm run build
npm packnpm run dev:mock 会在 http://127.0.0.1:8088 启动后台,并用 macOS 可运行的本地 mock 替代 Linux muxProxy。登录后启动 SOCKS5 节点,再使用页面中的连接凭据测试:
curl --proxy 'socks5h://用户名:密码@127.0.0.1:1081' https://example.com每条凭据都应使用自己在页面中配置的端口。刷新客户端列表可查看当前在线 IP、凭据和位置;mock 会直接连接目标,仅用于验证管理后台、认证和多实例生命周期,不模拟真实 MWS 链路。
