Skip to content
 
 

Latest commit

 

History

454 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TMS 面板

一个面板同时搞定翻墙协议(VLESS-Reality / Trojan / VMess / Hysteria2 / TUIC / AnyTLS)、转发中转、以及每用户限速 / 流量 / 到期

关注作者(三月)


特性

  • 协议管理:一键在机器上搭全套翻墙协议(VLESS-Reality / Trojan / VMess / Hysteria2 / TUIC / AnyTLS),出订阅给用户
  • 中转:前置机搭协议 + 落地出口(住宅 socks / 机场节点 / 你的节点),给用户干净出口 IP,自带在线测落地
  • 端口转发 / 隧道转发:通用端口搬运、两级加密中转
  • 限速 / 流量 / 到期:每个用户独立限速(TCP+UDP 都限)、流量配额、到期时间
  • 订阅按线路:一个用户可有多条订阅,直连 / 各中转各自独立
  • 中央管理:一台面板管所有转发机,节点一条命令上线

本项目基于 go-gost/gostgo-gost/x 两个开源库。

部署流程


Docker Compose部署

快速部署

只有两条命令。先在一台机器装面板端,再到每台转发机装节点端

面板端(中央管理面板,一台即可,全自动;需要 Docker,脚本会自动装):

curl -L https://raw.githubusercontent.com/TEAMO233/Tms/main/panel_install.sh -o panel_install.sh && chmod +x panel_install.sh && ./panel_install.sh

节点端(转发机,每台要做转发的机器都装;裸二进制,不需要 Docker):

装好面板后,在面板里生成节点端命令,不用手敲——

登录面板 → 左侧「转发机监控」→「新增」填该机器的 IP → 保存 → 点该机器的「安装」→ 复制弹出的命令,到那台机器上执行即可。

弹出的命令已自动带上「面板地址 + 该机器专属密钥」,全自动、无需手输(密钥是新增转发机时才生成的,只有面板知道,所以节点端必须从面板生成)。

手动方式(不推荐)

也可直接在机器上跑下面裸命令,它会 交互式询问 面板地址和密钥(密钥同样得先在面板「转发机监控」新增该转发机才有):

curl -L https://raw.githubusercontent.com/TEAMO233/Tms/main/install.sh -o install.sh && chmod +x install.sh && ./install.sh

国内机器安装(GitHub 连不上时)

国内机器直连 GitHub 会超时(卡在下载那一步)。用 ghfast.top 镜像 + -c 参数(-c 强制内部下载 gost 也走国内镜像,不靠自动检测),把面板给你的「面板地址」「密钥」填进去:

curl -L https://ghfast.top/https://raw.githubusercontent.com/TEAMO233/Tms/main/install.sh -o install.sh && chmod +x install.sh && ./install.sh -c -a 面板地址:端口 -s 你的密钥
  • 面板地址、密钥从面板「转发机监控 → 新增该机器 → 点安装」弹出的命令里拿;
  • ghfast.top 某天失效,换个镜像重试:把命令里的 ghfast.top 整体替换,并在前面加 GH_MIRROR=https://新镜像/(让内部下 gost 也走它)。常见备选:gh-proxy.comghproxy.netmirror.ghproxy.com

默认管理员账号

  • 账号: admin_user
  • 密码: admin_user

⚠️ 首次登录后请立即修改默认密码!

面板管理(tms 命令)

装好面板后,服务器上会生成一个 tms 管理命令(类似 x-ui),随时输入即可打开管理菜单:

tms

菜单里可以:更新 / 卸载 / 彻底清理(purge) / 查看运行状态 / 查看访问信息(地址、账号) / 配置域名

也可以直接带参数用:

命令 作用
tms 打开管理菜单
tms update 更新面板到最新版
tms status 查看运行状态
tms info 查看访问地址 / 账号
tms domain 域名 给面板配域名 + HTTPS
tms domain 查看当前域名状态
tms domain off 关闭域名,回到 IP:端口
tms export 导出数据库备份
tms purge 彻底清理(卸载并清空容器/镜像/卷/命令)

域名配置

面板和转发机的域名是两件独立的事,解决的问题也不一样。

一、给面板套域名(HTTPS)

默认只能 http://IP:6366 访问,浏览器会标"不安全"。配了域名之后走 HTTPS,订阅链接也会跟着变成域名

tms domain panel.example.com

背后用 Caddy 自动申请和续期 Let's Encrypt 证书,会依次检查:域名解析是否指向本机 → 80/443 有没有被占 → 写配置 → 起 Caddy → 等证书签发(最多 60 秒)。

前置条件:

  • 域名已经解析(A 记录)到面板服务器
  • 80 和 443 端口空闲(装了宝塔的话先停掉它的 nginx)
  • 云服务器安全组放行 80、443

💡 原来的 IP:6366 会保留作为备用入口,域名出问题时还能进得去。

⚠️ 配了域名后,已经发出去的旧订阅(IP 版)不会自动更新,要让车友重新拉一次。所以建议装好就配,人越少越好办。

二、给转发机配域名(不让车友看到你的 IP)

车友拿到订阅后,能在客户端里看到每个节点的地址。默认显示的是转发机的真实 IP

在「转发机」→ 编辑 → 连接域名(可选) 里填一个域名,车友看到的就变成域名了:

美国机   us.example.com   →  解析到 203.0.113.10
香港机   hk.example.com   →  解析到 203.0.113.20
国内机   cn.example.com   →  解析到 203.0.113.30

一台转发机一个子域名(同一个域名下开子域名即可,不用买多个),填之前先去 DNS 加好 A 记录。留空则维持原样显示 IP。

好处除了不暴露 IP,还有:机器 IP 被墙时改条 DNS 解析就活了,不用通知车友重新拉订阅。

⚠️ 这只是"不直接显示",不是真正的隐藏。 对方 ping 一下域名照样拿到 IP。 要做到查都查不到,只有走 CDN(Cloudflare 橙云),而目前一键搭建的六个协议 (VLESS-Reality / Trojan-Reality / VMess / Hysteria2 / TUIC / AnyTLS)都过不了 CDN —— Reality 要跟真实服务端直接握手、Hysteria2 和 TUIC 走 UDP,CF 都不转发。 挡普通车友足够,防封锁不行。

卸载

先分清两种机器,卸载方式完全不同:

角色 装了什么 tms 命令吗
面板机(只有一台) Docker:MySQL + 后端 + 前端 ✅ 有
节点机 / 转发机(每台) gost + sing-box(systemd 服务) ❌ 没有

⚠️ tms purgepanel_install.sh purge 只清面板,对节点机上的 gost 一点作用都没有。反过来,清节点也不会影响面板。两边要分别执行。

一、卸载面板机

在面板安装目录下执行:

tms purge

删除所有容器、镜像、数据卷、网络、配置文件和 tms 管理命令。也可以直接输入 tms 打开菜单选「彻底清理」。

如果 tms 命令不在了(比如当初就没装成功),用一次性脚本:

curl -L https://raw.githubusercontent.com/TEAMO233/Tms/main/panel_install.sh -o /tmp/tms.sh && bash /tmp/tms.sh purge

💡 最好 cd 到当初安装面板的目录再执行。不在那个目录时,脚本会从 /usr/local/bin/tms 里读回安装目录并自动切过去; 那个文件也没了的话,容器和镜像照样按名字清掉,只是安装目录里的 docker-compose.yml / .env 要你自己删。 脚本会检查当前目录的 docker-compose.yml 是不是 TMS 的,不是就跳过 compose 清理,避免误删你其它项目的容器和 .env

源码编译版(合体部署)怎么卸

git clone + docker-compose-hybrid.yml 本地构建起来的面板,管理命令同样是 tms:

tms purge

或者输入 tms 打开菜单选「7) 彻底卸载」。它会删掉容器、本地构建的镜像、数据卷(含数据库数据)、 网络和 tms 命令;源码目录会保留,确认不要了自己 rm -rf 即可。

二、卸载节点机(转发机)

🚨 面板机同时也当转发机用的话,千万别在它上面跑这段。 很多人把面板和第一台转发机装在同一台机器上,这段命令会把本机的节点服务一起停掉并 disable —— 所有协议瞬间全部失效,而面板里节点还显示「在线」(gost 是另一个服务,它还活着), 极难联想到是刚才那条命令干的。只想卸载其它转发机时,请 SSH 到那台机器上执行。

万一误跑了,恢复:systemctl enable --now sing-box ——必须带 enable,因为它被 disable 过,只 start 的话重启机器又会消失。

每台转发机都要单独执行,直接复制这段:

systemctl stop gost sing-box 2>/dev/null
systemctl disable gost sing-box 2>/dev/null
rm -rf /etc/systemd/system/sing-box.service.d /etc/gost
find /etc/systemd /run/systemd \( -name 'gost.service' -o -name 'sing-box.service' \) -delete 2>/dev/null
systemctl daemon-reload
systemctl reset-failed 2>/dev/null
echo "✅ 节点已卸载(gost + sing-box + 配置 + 证书)"

⚠️ 别只删 /etc/gost。搭过协议的机器上还有 sing-box,它的服务文件在 /etc/systemd/system/,只删安装目录的话二进制没了、服务还注册着,systemd 会一直重启失败刷满日志。

💡 上面用 find ... -delete 而不是直接 rm 服务文件,是为了连 multi-user.target.wants/ 里的软链接一起清掉。正常情况 systemctl disable 会删它们,但服务已经异常时可能残留,结果 systemctl list-units --all 里一直挂着一条 not-found,看着像没卸干净。

也可以重新下节点脚本走菜单(选 3 卸载):

curl -L https://raw.githubusercontent.com/TEAMO233/Tms/main/install.sh -o /tmp/n.sh && chmod +x /tmp/n.sh && /tmp/n.sh

💡 国内机器(阿里云等)大概率下不动 GitHub,直接用上面那段命令。

三、验证是否清干净

面板机:

docker ps -a | grep -E 'gost-mysql|springboot-backend|vite-frontend'
command -v tms

节点机:

systemctl list-units --all | grep -E 'gost|sing-box'
ls /etc/gost

都没有输出就说明干净了。

四、顺手清理防火墙(可选)

卸载不会动防火墙规则,之前给转发开的端口还留着。不打算再装的话:

ufw status numbered      # 看编号
ufw delete <编号>        # 逐条删

云服务器还要去控制台把安全组里对应的入方向规则删掉(阿里云、腾讯云、evoxt 等)。端口后面没服务在听,留着也不影响安全,看个人习惯。

免责声明

本项目仅供个人学习与研究使用,基于开源项目进行二次开发。

使用本项目所带来的任何风险均由使用者自行承担,包括但不限于:

  • 配置不当或使用错误导致的服务异常或不可用;
  • 使用本项目引发的网络攻击、封禁、滥用等行为;
  • 服务器因使用本项目被入侵、渗透、滥用导致的数据泄露、资源消耗或损失;
  • 因违反当地法律法规所产生的任何法律责任。

本项目为开源的流量转发工具,仅限合法、合规用途。
使用者必须确保其使用行为符合所在国家或地区的法律法规。

作者不对因使用本项目导致的任何法律责任、经济损失或其他后果承担责任。
禁止将本项目用于任何违法或未经授权的行为,包括但不限于网络攻击、数据窃取、非法访问等。

如不同意上述条款,请立即停止使用本项目。

作者对因使用本项目所造成的任何直接或间接损失概不负责,亦不提供任何形式的担保、承诺或技术支持。

请务必在合法、合规、安全的前提下使用本项目。


Star History Chart

About

TMS 面板:翻墙协议 + 转发中转 + 限速

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages