0%

我的gost实践(一)

gost是什么

依据官网和文档的介绍

GO Simple Tunnel - a simple tunnel written in golang
GO语言实现的安全隧道

我也是在机缘巧合的情况下知道这个开源软件的。一次读到大佬左耳朵耗子的一篇在github上的文章————《科学上网》。其中介绍了一些他对当下科学上网方式的介绍和探讨,大部分我曾经都有所耳闻和甚至使用过。除了用 gost 设置 HTTPS 服务让我眼前一亮。
说白了gost就是一款代理软件,往正常了说就像是Proxifier这一类普通的代理客户端,往科学上网方向说则也能成为ss/ssr/v2ray之类的代理客户端。然而它功能的强大之处就在于它支持的协议和类型是如此丰富和灵活,以及它算不上为科学上网而生的,关键在于使用的人如何去用它。你确实可以如上所说使用https服务或内置的ss去翻越长城,但你也可以仅仅只是做http、socks5的简单代理或者端口转发或者加密隧道等等。循着文档,有很多有趣的玩法。

准备前提

以科学上网作为gost的实践。

  • 一台及其以上国外VPS
  • 一个域名

gost安装

根据官网,简单做了个安装脚本,适用于64位linux。其他平台同样可以在release页面下载并使用。

1
2
3
4
5
6
7
#/bin/sh
mkdir gost
cd gost
wget -O gost.gz https://github.com/ginuerzh/gost/releases/download/v2.11.0/gost-linux-amd64-2.11.0.gz
gzip gost.gz -d
chmod 777 gost
ln gost /usr/bin/gost

复制到文件或下载install_gost.sh然后root权限下运行sh install_gost.sh即可。(不具备普遍适用性,请根据自身需求修改)
如果安装成功,在终端输入gost将会看到如下提示:

1
2
3
4
5
6
7
8
9
10
-C string
configure file
-D enable debug log
-F value
forward address, can make a forward chain
-L value
listen address, can listen on multiple ports (required)
-V print version
-obfs4-distBias
Enable obfs4 using ScrambleSuit style table generation

设置https服务

参考上文左耳朵耗子的方式设置https服务。关于SSL证书的部署,可以使用他提到的certbot也可以是更简单的caddy
我此处参照设置的SSL使用Caddy申请免费的Let’s Encrypt泛域名SSL证书
当然最好是先添加域名的A记录,将要设置的子域名指向这台VPS。
然后就是运行gost服务,我对大佬原本跑docker的脚本做了点小修改,如下:

1
2
3
4
5
6
7
8
#!bin/sh
USER="用户名"
PASS="密码"
PORT=443
BIND_IP=0.0.0.0
CERT="SSL证书公钥路径"
KEY="SSL证书密钥路径"
nohup gost -L "http2://${USER}:${PASS}@${BIND_IP}:${PORT}?cert=${CERT}&key=${KEY}&probe_resist=code:404&knock=www.google.com" > https.log 2>&1 &

其他中文部分自行修改,caddy产生的路径一般是这样子的:’/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/a.b.com/a.b.com.crt’和’/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/a.b.com/a.b.com.key’
运行后,可以使用tail -f https.log查看是否运行成功,同时确保443端口开放。此时在电脑端或手机端连入,正常的话将看到日志。

https服务的使用

浏览器端

熟悉的朋友或是有经验的朋友必是在浏览器装有Proxy SwitchyOmega的,直接可以使用它,代理协议选择https并填写用户名密码即可。

电脑端

不论是Mac还是Win都可以用gost再次做客户端,因为gost事实上来说没有绝对意义上的服务器端和客户端,像是两个节点相互通信一样。类似上文的安装,成功后在终端运行如下即可连接:

1
gost -L=:1000 -F=http2://${USER}:${PASS}@${BIND_IP}:${PORT}

变量与上文相同即是,这样就在本地开了一个同时支持http和socks5的代理,端口为1000,对于telegram类支持代理的软件可以直接填入,浏览器的话则需要上文的Proxy SwitchyOmega帮忙。

IOS端

小火箭shadowrocket如下,类型HTTPS与HTTP2均可。
-w335

Android端

Android可以使用Surfboard,具体参照它的官网吧。关于它的使用其实也可小写一番的说。

最后

关于使用https方式翻越城墙,到目前为止未有翻车,尽管在速度上似乎是有一些限制。当然网上也有很多人使用gost的其他协议,例如使用relay、ss或转发等等。总之,gost是一个可玩性很高的软件。尽管并没有尝试gost文档里所有的方式,但我后来的一些组合操作让我甚是使用舒服。例如其他的一些实践:内网组网+KCP、DNS代理解锁奈飞、端口转发+负载均衡等等。
站在巨人的肩膀上,才有我们如今的享受。感谢开发者。