gost是用golang语言实现的一个安全隧道。地址位于:
https://github.com/ginuerzh/gost
是一个不可多得的隧道工具。
至于什么是隧道? 就是可以通过这个工具传输一些其他协议的数据。就像这个样子。
隧道有什么用呢?
可以起到一些加速的作用或者流量变换的作用。 具体就不展开了。
虽然gost带有代理功能,但是我们并不使用代理功能。这里只用它建隧道。
gost的功能特性如下:
多端口监听
多级转发链
多协议支持
TCP/UDP端口转发
TCP/UDP透明代理
DNS解析和代理
TUN/TAP设备
反向代理
负载均衡
路由控制
限速限流
准入控制
动态配置
Prometheus监控指标
Web API
Web UI
Wiki站点:https://gost.run
常用方法
gost由于非常灵活, 用起来对用户的要求还是有点高的。
不过一般掌握几个命令就可以了。
首先网络架构大概是这样的:
gost创建tunnel,在隧道中传输其他的数据。
常用的命令:
命令需要client与server配合。
下面的命令示例中的 server.com需要 在实际中换成具体的server所用的域名,直接用IP在一些情况下大概也可以。
命令示例的是对远端 80端口的通道,当然,不局限于nginx的http服务, 只要是tcp的服务,都可以用。 O(∩_∩)O哈哈~
- tls tunnel
服务端将连接 从443转发到80口, 客户端监听本机的tcp端口80,Forward到 服务端, tunnel是经过tls加密的。 secure=false可以不对证书进行验证。
# server
gost -L tls://:443/:80
# client
gost -L=tcp://:80 -F forward+tls://server.com:443?secure=false
TLS证书
GOST内置了TLS证书,如果需要使用自定义TLS证书,有两种方法:
在GOST运行目录放置cert.pem(公钥)和key.pem(私钥)两个文件即可,GOST会自动加载运行目录下的cert.pem和key.pem文件。
使用key和cert参数指定证书文件路径:
gost -L="tls://:443?cert=/path/to/my/cert/file&key=/path/to/my/key/file"
- kcp tunnel
客户端连接到服务端,形成kcp tunnel, 本地访问80端口与远端80相同。
由于kcp 采用的是udp协议,并且kcp有一些加速的功能,这种方式可以对连接进行加速。
国际线路上kcp速度可以,就是不太持久。(哈哈)
# server, nginx listen on 80
gost -L kcp://:9000/:80
# client
gost -L tcp://127.0.0.1:80 -F forward+kcp://server.com:9000
如果需要修改kcp隧道的参数,可以在后面用c=xxx这样的形式带上配置文件。
client是需要跟服务端一样的。
# server
gost -L kcp://:9000/:80?c=/path/to/config/file.json
# client
gost -L tcp://127.0.0.1:80 -F "forward+kcp://server.com:9000?c=/path/to/config/file.json"
GOST中内置了一套默认的KCP配置项,默认值与xtaci/kcptun中的一致。可以通过参数c指定外部配置文件,配置文件为JSON格式:
{
"key": "it's a secrect",
"crypt": "aes",
"mode": "fast",
"mtu" : 1350,
"sndwnd": 1024,
"rcvwnd": 1024,
"datashard": 10,
"parityshard": 3,
"dscp": 0,
"nocomp": false,
"acknodelay": false,
"nodelay": 0,
"interval": 40,
"resend": 0,
"nc": 0,
"sockbuf": 4194304,
"keepalive": 10,
"snmplog": "",
"snmpperiod": 60,
"tcp": false
}
配置文件中的参数说明请参考kcptun。
3.QUIC tunnel
client本地的80端口通过tunnel通到远端主机的80端口。
中间采用的是quic协议,这个目前速度实测不是特别快。
# server
./gost -L quic://:1443/:80
# client
.\gost.exe -L tcp://127.0.0.1:80 -F "forward+quic://server.com:1443"
4.其他协议
HTTP2 , HTTP3(目前标准还没定下来), DTLS
等等不再一一叙述,因为命令基本都是类似的。
详情可以查看gost的官方网站。 https://gost.run/tutorials/protocols/overview/