Trojan-go 安装指南
本文以 Debian 11 为例。
参考资料:
1. 安装 Trojan-go
1.1 二进制安装方式
1
2
3
4
5
6
7
8
| wget https://github.com/p4gefau1t/trojan-go/releases/download/v0.10.6/trojan-go-linux-amd64.zip
unzip trojan-go-linux-amd64.zip
cp trojan-go /usr/local/bin/
mkdir /etc/trojan-go
cp *.dat /etc/trojan-go
|
相关文件路径为:
- /usr/local/bin/trojan-go
- /etc/trojan-go/geoip.dat
- /etc/trojan-go/geosite.dat
- /etc/trojan-go/geoip-only-cn-private.dat
1.2 Docker 安装方式
1
| docker pull p4gefau1t/trojan-go:latest
|
镜像中各文件的路径为:
- /usr/local/bin/trojan-go
- /usr/local/bin/geoip.dat
- /usr/local/bin/geosite.dat
- /usr/local/bin/geoip-only-cn-private.dat
2. 配置服务端
由于 443 端口已经由 nginx 使用,负责代理其他站点了。这里实现的目标为
- 原 443 端口的所有内容不变。
- trojan-go 运行的端口为 22250 。
- nginx 增加监听 8443 端口,如果是 trojan-go 数据则转发到 22250 端口,如果是其他数据,则转发到原 443 端口。
2.1 编写配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| run-type: server
# 对外监听端口
local-addr: 0.0.0.0
local-port: 22250
# fallback 端口
remote-addr: 127.0.0.1
remote-port: 80
# 密码
password:
- your_password
# 自己的域名和证书
ssl:
cert: /etc/certs/gulucat.crt
key: /etc/certs/gulucat.key
sni: trojan.gulucat.com
router:
enabled: true
block:
- 'geoip:private'
# 不同的安装方式,这些文件的路径会不一样
geoip: /etc/trojan-go/geoip.dat
geosite: /etc/trojan-go/geosite.dat
|
2.2 运行 trojan
2.2.1 二进制方式运行
把上面的配置文件 server.yaml 拷贝到 /etc/trojan-go 目录下。
创建系统服务文件 /etc/systemd/system/trojan-go.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| [Unit]
Description=Trojan-Go - An unidentifiable mechanism that helps you bypass GFW
Documentation=https://p4gefau1t.github.io/trojan-go/
After=network.target nss-lookup.target
[Service]
User=www-data
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/local/bin/trojan-go -config /etc/trojan-go/server.yaml
Restart=on-failure
RestartSec=10s
LimitNOFILE=infinity
[Install]
WantedBy=multi-user.target
|
然后启动服务。
1
2
3
| systemctl daemon-reload
systemctl enable trojan-go.service
systemctl start trojan-go.service
|
2.2.2 Docker 方式运行
1
2
3
4
5
6
7
| docker run -itd \
--name trojan-go \
--restart=always \
--network host \
-v ./server.yaml:/etc/trojan-go/server.yaml:ro \
p4gefau1t/trojan-go \
/etc/trojan-go/server.yaml
|
因为有 fallback ,所以要注意网络配置。
2.3 配置 nginx 转发
创建文件 /etc/nginx/modules-available/95-stream-trojan.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| # 流量转发核心配置
stream {
# 这里就是 SNI 识别,将域名映射成一个配置名
map $ssl_preread_server_name $backend_name {
trojan.gulucat.com trojan;
# 域名都不匹配情况下的默认值
default web;
}
# web,配置转发详情
upstream web {
server 127.0.0.1:443;
}
# trojan,配置转发详情。需要跟 trojan 的监听端口一致。
upstream trojan {
server 127.0.0.1:22250;
}
# 监听 8443 并开启 ssl_preread
server {
listen 8443 reuseport;
listen [::]:8443 reuseport;
proxy_pass $backend_name;
ssl_preread on;
}
}
|
使 nginx 配置生效
1
2
3
| ln -s /etc/nginx/modules-available/95-stream-trojan.conf /etc/nginx/modules-enabled/
systemctl reload nginx.service
|
3. 配置客户端(Linux)
3.1 编写配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| run-type: client
# 本地监听端口
local-addr: 0.0.0.0
local-port: 1080
# 服务器端口
remote-addr: trojan.example.com
remote-port: 8443
# 密码
password:
- your_password
# 设置路由
router:
enabled: true
# 直连清单
bypass:
- "geoip:cn"
- "geoip:private"
- "geosite:cn"
- "geosite:geolocation-cn"
# 拦截清单
block:
- "geosite:category-ads"
# 代理清单
proxy:
- "geosite:geolocation-!cn"
# 配置文件路径
geoip: /etc/trojan-go/geoip.dat
geosite: /etc/trojan-go/geosite.dat
|
3.2 运行
3.2.1 二进制方式运行
把上面的 client.yaml 放到 /etc/trojan-go 目录下
创建服务配置文件 /etc/systemd/system/trojan-go-client.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| [Unit]
Description=Trojan-Go - An unidentifiable mechanism that helps you bypass GFW
Documentation=https://p4gefau1t.github.io/trojan-go/
After=network.target nss-lookup.target
[Service]
Type=simple
DynamicUser=true
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=/usr/local/bin/trojan-go -config /etc/trojan-go/client.yaml
[Install]
WantedBy=multi-user.target
|
启动服务
1
2
3
| systemctl daemon-reload
systemctl enable trojan-go-client.service
systemctl start trojan-go-client.service
|
3.2.2 Docker 方式运行
1
| docker run -itd --name trojan-go --restart=always -p 1080:1080 -v ./client.yaml:/etc/trojan-go/client.yaml:ro p4gefau1t/trojan-go /etc/trojan-go/client.yaml
|