trojan-go相比GFW版(原版),在拓展了更多功能的情况下兼容GFW版配置文件格式,在传输性能、优化内存占用方面也有提升。
trojan-go项目地址
https://github.com/p4gefau1t/trojan-go
后端介绍
我的第一个golang练手项目,用于对接 sspanel 面板的 trojan-go 后端,仅供学习交流测试使用。大家在免费使用的同时,请多多提交使用问题和bug,将问题留言发给我。
后端安装一共两个步骤:下载使用trojan-go、下载使用后端。我把后端命名为:mebi,我所写的也正是这个,mebi主要功能是将trojan-go和面板sspanel对接。
因为免费版不提供一键脚本,所以要求使用者有一定的linux技术和动手能力。目前只支持数据库对接。
测试环境
Amazon EC2、Vultr、Lindo 测试通过。
可以实现的功能
- 节点服务器信息上报
- 节点服务器流量上报
- 节点服务器流量限制
- 用户流量上报
- 用户动态增删
- 用户在线ip数上报
- 支持用户分组
- 支持用户限速
- 支持用户ip数限制
- 支持获取用户真实ip
服务器信息包括:服务器的负载、运行时间;服务器流量只上报出站流量;用户限速和ip数(设备数)限制是trojan提供的功能,是否有效需要自测,不归我管。其实设备数限制并没有多大意义,一台路由器下接100台设备,你看到的也就一个ip而已。
无法实现的功能
- 审计规则
- 封禁ip
部署
安装必要软件
# Debian/Ubuntu系统
apt-get install wget unzip -y
# CentOS系统
yum install wget unzip -y
创建必要目录
mkdir /usr/local/trojan
mkdir /var/log/trojan
mkdir -p /etc/trojan/pem
下载trojan
默认安装linux 64位,其他环境请转至:此处 下载
wget -O /usr/local/trojan/trojan-go.zip https://github.com/p4gefau1t/trojan-go/releases/download/v0.8.2/trojan-go-linux-amd64.zip
unzip -d /usr/local/trojan/ /usr/local/trojan/trojan-go.zip
添加trojan-go到环境变量
vi /etc/profile.d/customer.sh
export PATH=$PATH:/usr/local/trojan
使其立即生效
source /etc/profile
配置trojan
写一个trojan的配置文件
vi /usr/local/trojan/config.json
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"log_level": 1,
"log_file": "/var/log/trojan/info.log",
"password": [
"pwd001", "pwd002"
],
"ssl": {
"cert": "/etc/trojan/pem/server.cer",
"key": "/etc/trojan/pem/server.key",
"sni": "域名"
},
"api": {
"enabled": true,
"api_addr": "127.0.0.1",
"api_port": 10001
},
"router": {
"enabled": true,
"block": [
"geoip:private"
],
"geoip": "geoip.dat",
"geosite": "geosite.dat"
}
}
上面只做简单的配置介绍,你还可以添加更多的功能,如:websocket,路由控制,嵌套shadowsocks等,但必须:
1、必须配置api,端口设定必须为10001。
2、必须搭建web服务,并使用remote_port指向其端口。
3、必须有与sni域名相对应的ssl证书。
local_port 为trojan的监听端口,默认是443。可以换成其他端口,但你需要手动修改面板前端的端口已保持一致。修改其他端口还能实现443端口复用。
申请ssl证书,把公钥和秘钥放到/etc/trojan/pem目录下并重命名为server.cer和server.key。快速申请ssl证书一键脚本看这里。
trojan支持websocket传输,但我测试8.0版本开启websocket无法会导致api无效,所以对接面板就先不要用8.0及以上版本开启websocket。
运行trojan
因为加入了系统环境,运行直接可以使用如下,使用nohup命令将其放至后台运行。
trojan-go -config /usr/local/trojan/config.json
安装vnstat
mebi后端通过vnstat获取节点服务器流量,优点是服务器重启不会丢失流量信息,能够以任一一天按月统计流量。
# CentOS
yum install vnstat -y
# Debian/Ubuntu
apt-get install vnstat -y
默认vnstat 1号为每月的统计日。你还可以设定统计日为10号,那么按月统计为2月10号——3月9号(包含9号全天),这就很方便流量重置日就是账单日的服务器。修改统计日方法:打开 /etc/vnstat.conf
MonthRotate 1
修改1为你想要的流量充值重置日,然后重启vnstat
service vnstat restart
提醒一下:面板里填的流量重置日无效,必须修改vnstat的才有效,对于服务器不是无限流量的尤其要重视。另外 MonthRotate 只能是1-28。
安装后端
mkdir /usr/local/mebi
wget --no-check-certificate -O /usr/local/mebi/mebi.tar.gz https://www.mebi.me/room/software/mebi.tar.gz
tar -xvf /usr/local/mebi/mebi.tar.gz -C /usr/local/mebi/
同样把后端加入系统环境中
vi /etc/profile.d/customer.sh
export PATH=$PATH:/usr/local/trojan:/usr/local/mebi
使其立即生效
source /etc/profile
配置后端配置文件
新建 /etc/trojan/config.conf 文件
vi /etc/trojan/config.conf
写入下面配置,暂时只支持数据库对接,所以要开放面板服务器的数据库端口。
db_host=127.0.0.1 # 数据库地址
db_port=3306 # 数据库端口
db_name=test # 数据库名
db_user=test # 数据库用户名
db_password=abcd1234 # 数据库密码
node_id=1 # 节点id
interval=60 # 监听频率 单位秒
运行后端
mebi
显示如下信息表示成功。nohup将mebi放入后台即可,实测内存占用很少。
20:20:20 [info] current user num: 588
5 comments
数据库有报错:
Insert user_traffic_log failed,err:Error 1146: Table 'opennetc_panel.user_traffic_log' doesn't exist12:35:49 [info] current user num: 1
测试发现是websocket特性导致验证失败 这应该是trojan本身问题
[WARN] 2021/05/24 11:10:21 connection with invalid trojan header from 192.168.4.165:56440 | invalid hash:e4ad1603b7c45bc8be19ab818eb888c55105feb1874d75ebc72d10f3
使用UUID作为密码无法正常使用
使用api后password为哪个字段?
字段有哪些?我之前发咱们内部小群里的那个vnetpanel webapi 要不要先接一下啊