本项目提供一个单容器的中转管理实例。
当前特性:
- 管理页端口:
18080 - 代理端口范围:
11080-11120 - Docker
bridge双栈网络(IPv4 / IPv6) - 前后端分离:Python 提供 JSON API 与内核管理,管理页为静态前端
xray单进程承载所有kernel=xray的节点sing-box单进程承载所有kernel=sing-box的节点- 每个本地代理端口可直接同时作为
SOCKS5/HTTP代理使用
当前支持导入的分享链接协议:
vmess://vless://trojan://ss://hysteria2://tuic://anytls://
启动
docker compose up -d --build如果你希望先准备环境变量:
cp .env.example .env
docker compose up -d --builddocker-compose.yml 自带默认值,不复制 .env 也能直接启动。
IPv6 出站
docker-compose.yml 默认把项目 default 网络配置为 IPv4 / IPv6 双栈网络。容器仍然只需要接入一个 Compose 默认网络,不使用 network_mode: host。
默认子网:
- IPv4:
172.24.0.0/16 - IPv6:
fd00:dead:beef:30::/64
如果这些子网与本机其他 Docker 网络冲突,可以在 .env 中调整:
DOCKER_IPV4_SUBNET=172.24.0.0/16
DOCKER_IPV6_SUBNET=fd00:dead:beef:30::/64
验证方式:
docker exec xray-singbox-relay ip addr
docker exec xray-singbox-relay ping -6 -c 2 2606:4700:4700::1111
curl -I -x http://127.0.0.1:11080 https://example.com说明:
- 已存在的 Docker network 不能稳定原地从 IPv4-only 改成双栈;首次切换需要重建该 Compose 网络和容器。
- 重建后容器只有一个业务网卡,但该网卡同时具备 IPv4 / IPv6 地址。
状态
docker compose ps
docker logs -f xray-singbox-relay管理页
http://127.0.0.1:18080
http://你的机器IP:18080
说明:
- 页面资源位于
single/relay_admin/static/ - 后端继续由 Python 提供 API 与进程管理
- 前端通过
/api/*接口完成节点和设置操作 - 请通过
http://127.0.0.1:18080访问管理页,不再支持file://直开静态页面进行完整交互
内核建议
-
vmess://推荐:sing-box -
vless://推荐:xray或sing-box -
trojan://推荐:xray或sing-box -
ss://推荐:普通节点优先xray说明:带 plugin 的ss://当前限制为sing-box -
hysteria2://推荐:sing-box -
tuic://推荐:sing-box -
anytls://推荐:sing-box说明:当前 Xray 26.4.17 不支持 AnyTLS 出站,导入时请选择sing-box
端口规划
当前默认映射:
- 管理页:
18080 - 代理端口:
11080-11120
建议分配方式:
11080-11081:长期正式节点11082-11120:后续新增节点
如果端口不够,可以扩大范围,例如:
11080-1120011080-12000
环境变量
示例文件:.env.example
主要变量:
ADMIN_PORTPORT_RANGE_STARTPORT_RANGE_ENDTZXRAY_IMAGESINGBOX_IMAGEXRAY_BINXRAY_CONFIGSINGBOX_BINSINGBOX_CONFIGSINGBOX_MODEDOCKER_IPV4_SUBNETDOCKER_IPV6_SUBNET
说明:
-
SINGBOX_MODE=single表示使用“单个 sing-box 进程承载多个节点”的模式 -
SINGBOX_MODE=per_node表示每个 sing-box 节点独立一个进程
当前推荐:
SINGBOX_MODE=single
镜像版本策略
默认构建会锁定已经验证通过的 xray / sing-box 镜像 digest,保证可复现。
如果你希望跟随上游更新,可以在 .env 中改成 tag,例如:
XRAY_IMAGE=ghcr.io/xtls/xray-core:latest
SINGBOX_IMAGE=ghcr.io/sagernet/sing-box:latest
更推荐先在测试环境验证,再升级正式实例。
日志级别
管理页已支持分别设置:
xray日志级别sing-box日志级别
默认值:
xray_log_level = warningsingbox_log_level = info
如果需要更详细的请求日志,可以临时调整为:
xray = debugsing-box = trace
然后执行:
docker logs -f xray-singbox-relay运行时文件
以下文件属于运行态数据,不会提交到 Git 仓库:
data/nodes.jsondata/settings.jsondata/xray-config.jsondata/singbox-config.jsondata/singbox.d/bin/
这些文件已经加入 .gitignore。
与 daed / dae 配合使用
管理页支持两种导入方式:
- 单条导入:输入 1 条分享链接
- 批量导入:
分享链接文本框中每行 1 个节点链接
批量导入说明:
- 每行必须是 1 条完整的
vmess:///vless:///trojan:///ss:///hysteria2:///tuic:///anytls://链接 - 批量导入时,
节点名称需要留空,节点名按各分享链接自身内容解析 本地端口作为起始端口使用;如果中间有已占用端口,会自动跳过并继续分配后续可用端口- 批量导入按整批处理;如果其中某一行解析失败,会直接报出失败行号,并且整批不写入
管理页导入节点后,每个本地端口都可以这样使用:
socks5://127.0.0.1:11080#节点名
http://127.0.0.1:11080
说明:
socks5://127.0.0.1:端口:适合导入daed/dae/ 其他支持 SOCKS5 的客户端http://127.0.0.1:端口:适合浏览器、系统代理、curl -x等直接按 HTTP 代理方式使用- 当前实现中,同一个本地端口可同时接受 SOCKS5 与 HTTP 代理请求
如果要导入到 daed,继续使用这些本地 socks5://127.0.0.1:端口 节点即可。
重要:
在把这些本地节点放入 dae 使用前,请确保 routing 中保留:
pname(xray) -> must_direct否则可能出现回环或嵌套代理问题。
相关参考文档:
dae路由规则中文整理版:docs/routing.zh-CN.md
Git 仓库说明
Git 仓库只提交这些源码和部署文件:
.dockerignore.gitignore.env.exampleREADME.mddocker-compose.ymlsingle/