Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

本项目提供一个单容器的中转管理实例。

当前特性:

  • 管理页端口: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 --build

docker-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:// 推荐:xraysing-box

  • trojan:// 推荐:xraysing-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-11200
  • 11080-12000

环境变量

示例文件:.env.example

主要变量:

  • ADMIN_PORT
  • PORT_RANGE_START
  • PORT_RANGE_END
  • TZ
  • XRAY_IMAGE
  • SINGBOX_IMAGE
  • XRAY_BIN
  • XRAY_CONFIG
  • SINGBOX_BIN
  • SINGBOX_CONFIG
  • SINGBOX_MODE
  • DOCKER_IPV4_SUBNET
  • DOCKER_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 = warning
  • singbox_log_level = info

如果需要更详细的请求日志,可以临时调整为:

  • xray = debug
  • sing-box = trace

然后执行:

docker logs -f xray-singbox-relay

运行时文件

以下文件属于运行态数据,不会提交到 Git 仓库:

  • data/nodes.json
  • data/settings.json
  • data/xray-config.json
  • data/singbox-config.json
  • data/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

否则可能出现回环或嵌套代理问题。

相关参考文档:

Git 仓库说明

Git 仓库只提交这些源码和部署文件:

  • .dockerignore
  • .gitignore
  • .env.example
  • README.md
  • docker-compose.yml
  • single/

About

将 daed 不兼容的节点中转为本地 SOCKS5 节点,基于 xray 与 sing-box。

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages