翻墙订阅链接服务 和 用户管理
- 用户管理(增删改查)
程序作为中间人, 通过与
telegram-bot
进行交互,实现对接用户数据库, 进行用户管理
如喜欢用文件而不是telegram-bot
进行用户管理, 请使用v0
版本
如喜欢用shell进行用户管理, 建议出门左转使用Jrohy/trojan哟 - 程序返回客户端可识别的翻墙配置, 即订阅功能
访问含用户名的特定订阅链接, 程序返回
v2ray
和clash
等客户端可以识别的base64码或clash
配置文件; 在客户端上配置订阅链接即可翻墙;
├── clash.yaml #clash配置模板
├── config.example.yaml #以其为例, 自行创建config.yaml
├── controller/
│ ├── admin/ #后台api
│ ├── enter.go
│ └── user/ #前台api
├── dao/ #sql
├── Dockerfile #构建docker镜像
├── .editorconfig
├── .gitattributes
├── .github/
│ └── workflows/ #存放GitHub-Actions的工作流文件
├── .gitignore
├── .gitmodules
├── global/
│ └── global.go #全局变量的初始化
├── go.mod
├── go.sum
├── initialize/ #服务初始化相关
│ ├── server.go #gin服务
│ ├── global/
│ └── system/
├── LICENSE
├── log/
│ ├── gin.log #gin日志
│ ├── .gitkeep
│ └── run.log #业务日志
├── main.go #入口
├── main_test.go #测试
├── middleware/ #路由中间件以及验参
├── model/
│ ├── common/ #业务要用的结构体
│ ├── config/ #配置文件的结构体
│ └── db/ #数据库模型结构体
├── README.md
├── router/ #gin路由
├── service/
│ └── user/
│ ├── enter.go
│ ├── index.go #处理数据库的相关代码
│ ├── tg.go #与telegram-bot交互的逻辑
│ └── validator.go
├── static/ #静态资源
├── task/ #任务
│ ├── clear.go #流量清零
│ └── expiry.go #过期用户处理
└── utils/
└── tool.go
- 请准备数据库(默认使用sqlite, 没有db文件则自动在根目录下新增proxy.db文件, 数据库结构参考
initialize/system/db.go
), 并配置config.yaml
db选项, 可用mysql, 甚至直接配置trojan-go的mysql数据库, 参考config.example.yaml
- 自行创建
telegram-bot
, 将token/id/domain信息配置到config.yaml
, 可实现tg交互管理用户 - 建议使用的xray很难做用户管理, 故项目不依赖其数据而是外置数据库, 缺点是不能利用xray的流量统计功能(使用trojan-go和其数据库, 则流量统计可用); 未来会对接xray数据, 也许吧!
- 未来支持环境变量配置, 也许吧!
version: "3"
services:
proxy:
image: ghcr.io/twbworld/proxy:latest
ports:
- 80:80
volumes:
- ${PWD}/config.yaml:/app/config.yaml:ro
- ${PWD}/proxy.db:proxy.db:rw
$ cp config.example.yaml config.yaml
$ go mod tidy && go build -o server main.go
$ ./server
本项目利用了
GitHub-Actions
作为持续集成
处理数据, 相关代码, 也可使用命令行, 下面有介绍
$ docker exec -it proxy /app/server -a clear
或
$ ./server -a clear
$ docker exec -it proxy /app/server -a expiry
或
$ ./server -a expiry
v2ray
订阅地址例子:www.domain.com/username.html
其中
www.domain.com
是自己的域名,指向该项目监听的端口;username
是用户名, 如果数据库中存在该用户, 则显示在config.yaml
下proxy
选项所配置的vpn信息clash
订阅地址例子:clash.domain.com/username.html
clash
与前两者不同, 其识别的是配置文件, 所以clash需不同的网址, 且以clash开头的域名, 请自行解析域名;相关代码
提示: 这个客户端使用的
订阅域名
, 跟连接xray等服务端的域名
是不一样哦; 可以理解为: 利用订阅域名
获取连接信息, 这些连接信息就包含了用于连接xray服务的域名;