如何搭建梯子(Trojan-Go方法)

The Great Firewall(GFW),是国内大陆地区(香港、澳门、台湾没有这个东西)的网络审查系统,所有的内外网络交互数据都会被审查。如果访问的数据包含敏感内容,访问会被强制中断。合法合规的访问必须备案,而未经备案的访问方式被称为VPN、翻墙、梯子。

Virtual Private Network(VPN),虚拟私有网络。一般指相对于公开网络的,只有指定方式才能访问的,利用内外穿透的方式实现公网访问内网的是VPN。可以看到VPN是提供外网访问内网的一种方式,但是因为GFW的存在,中国大陆的网络可以算作一种大范围的内网。

除了内网、公网,还有一种网络叫做暗网(Dark Web),是深网(Deep Web)的一部分,暗网的内容无法用搜索引擎查找,甚至VPN都没有用,需要特定的浏览器,特别的网址。大部分不合法的内容都在里面。我们可以通过搜索引擎找到的内容、甚至不用搜索引擎找到的内容大概只有暗网的1/400。

现在网上的VPN服务商很难找,找到的不知道稳不稳定,会不会随时跑路,会不会被封。

最大的问题,大部分服务商不支持Linux平台,这就让只使用linux的人很难受(比如我)。

本文介绍如何用国外服务器搭建一个VPN。

网络安全一直是大问题,如果数据直接是明文,到达GFW时会立刻被查出来,所以需要加密。

加密方式

Shadowsocks

ShadowsocksR

V2Ray

V2Ray使用了新的自行研发的VMess协议,改正了Shadowsocks一些已有的缺点,更难被墙检测到。V2Ray 的节点可以伪装成正常的网站(HTTPS),将其流量与正常的网页流量混淆,以避开第三方干扰。

Trojan

Trojan只使用HTTPS

搭建VPN

我使用的是Trojan,安全第一。

1、首先准备一台国外的服务器,服务商最好也是国外的。

server

然后登录到服务器中

htop

512MB + 1 CPU + Ubuntu 20.04 LTS

2、到国外的域名服务商网站(godaddy之类的)购买一个域名。

在DNS控制台,添加一个A记录,并指向服务器IP地址

dns

3、从腾讯或者阿里或者freessl申请一个对应域名的证书。

4、在服务器中安装Apache2或者Nginx,根据自己喜好。确保服务器的80端口可以访问,443即https端口无法访问。

5、从Trojan-Go Github下载对应服务器平台的安装包

解压上传到服务器上(或者可以直接下载到服务器,在服务器中解压)

files

在使用之前需要配置一下

6、将example文件夹中的文件复制到程序所在文件夹

先看一下server.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
"your_password"
],
"ssl": {
"cert": "your_cert.crt",
"key": "your_key.key",
"sni": "your-domain-name.com"
},
"router": {
"enabled": true,
"block": [
"geoip:private"
],
"geoip": "/usr/share/trojan-go/geoip.dat",
"geosite": "/usr/share/trojan-go/geosite.dat"
}
}

password字段改为自己想要的,最好复杂一些。

ssl字段下的cert、key字段填写申请的SSL证书位置,sni填写证书对应的域名。

router字段下的geoip/geosite位置根据实际调整

7、运行命令,这里推荐使用Screen

执行命令

1
./trojan-go -config server.json

运行效果为

running

如果443端口被占用,则自动退出。

8、检查一下是否运行正常,在浏览器中输入https格式的域名,应该会看见默认的Apache2页面

https

Apache2并没有配置SSL,而443端口被trojan-go程序占用,证明运行正常。

在使用nginx作为网络服务器时,如果VPN的Ip和正常网站的ip设置一样的话,会出现访问vpn网址和正常网址网址内容一样的问题。

在/var/www目录下创建一个新目录example.com,在里面创建一个新文件作为vpn服务器的主页,我选择nginx的默认显示页面

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
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="https://nginx.org/" rel="nofollow" target="_blank">nginx.org</a>.<br/>
Commercial support is available at
<a href="https://nginx.com/" rel="nofollow" target="_blank">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

编辑/etc/nginx/sites-enabled

将最后部分的注释去掉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
server {
listen 80;
listen [::]:80;

server_name example.com;

root /var/www/example.com;
index index.html;

location / {
try_files $uri $uri/ =404;
}
}

这样访问vpn网址时内容不会和其他网站内容冲突。当然apache2也要相应的配置。

服务器搭建完毕

Windows

v2rayN

v2rayN下载最新的版本,当前版本为4.20(需要安装依赖.net环境)。

运行程序,点击菜单栏最左侧的服务器菜单

server

然后弹出配置界面

config

点击确定,在状态栏找到软件的图标,设置自动设置代理模式,然后软件图标会变为红色

icon

使用Firefox时,要设置浏览器的代理设置

firefox

这样就可以访问外网了

done

Trojan-Qt5

经过测试,可以使用

Linux

v2ray desktop

随便下载一个客户端,我用的是Manjaro Linux仓库提供的V2Ray Desktop

经过测试并不能用。

qv2ray

然后我尝试了另一个客户端,qv2ray。当然,还有trojan插件

默认界面为:

default

点击下方的New创建新的链接

New

然后就可以了,当然浏览器的代理需要设置一下

done

我在国外服务器使用测试测试了一些国外服务器,腾讯的香港服务器效果还是不错的,720P无压力,但是使用要低调

tencent

优化

启动BBR

先安装依赖

1
apt install ca-certificate

运行脚本

1
wget "https://github.com/chiakge/Linux-NetSpeed/raw/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh

sh

依次选择1/2/3,试一下哪个可以正常安装或者喜欢哪个。

经过测试,内核没有选,加速选择了4,也就是使用系统BBR。

bbr

开机启动

默认下载的安装包中有提供trojan-go.service文件

将其复制到/etc/systemd/system/目录中

将trojan-go软件包以及相关配置文件、ssl证书都复制到/usr/local/目录中(主要是trojan-go要以root权限运行,文件夹拥有者最好是root)

我的是

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=root
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/local/trojan-go/trojan-go -config /usr/local/trojan-go/server.json
Restart=on-failure
RestartSec=10s
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target

在server.json中ssl证书位置、dat文件位置最好是完整路径否则会报错

1
tls failed to load key pair

进而导致服务无法启动。

然后可以启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
➜  systemctl start trojan-go
➜ systemctl status trojan-go
● trojan-go.service - Trojan-Go - An unidentifiable mechanism that helps you bypass GFW
Loaded: loaded (/etc/systemd/system/trojan-go.service; disabled; preset: enabled)
Active: active (running) since Wed 2023-07-12 21:12:12 CST; 1s ago
Docs: https://p4gefau1t.github.io/trojan-go/
Main PID: 18484 (trojan-go)
Tasks: 5 (limit: 1569)
Memory: 2.8M
CPU: 11ms
CGroup: /system.slice/trojan-go.service
└─18484 /usr/local/trojan-go/trojan-go -config /usr/local/trojan-go/server.json

Jul 12 21:12:12 vpn systemd[1]: Started trojan-go.service - Trojan-Go - An unidentifiable mechanism that helps you bypass GFW.
Jul 12 21:12:12 vpn trojan-go[18484]: [INFO] 2023/07/12 21:12:12 trojan-go v0.10.6 initializing
Jul 12 21:12:12 vpn trojan-go[18484]: [WARN] 2023/07/12 21:12:12 empty tls fallback port
Jul 12 21:12:12 vpn trojan-go[18484]: [WARN] 2023/07/12 21:12:12 empty tls http response
Jul 12 21:12:12 vpn trojan-go[18484]: [INFO] 2023/07/12 21:12:12 geoip:private loaded
Jul 12 21:12:12 vpn trojan-go[18484]: [INFO] 2023/07/12 21:12:12 router client created

如何搭建梯子(Trojan-Go方法)
https://feater.top/linux/how-to-setup-vpn-with-foreign-server-using-trojan-go/
作者
JackeyLea
发布于
2021年11月3日
许可协议