- 需要有一台VPS作为服务端,Linux发行版都可以,没特别要求,但是要确认支持tun/tap驱动,至于如何确认,后面会讲到。
- Windows和Linux/Mac上都可以运行客户端。其中tap模式,不支持Mac。
以tun模式为例。 服务端运行后,创建P2P的tun网卡,IP为10.168.10.1. 客户端运行后,创建P2P的tun网卡,IP为10.168.10.x
此时,可以在客户端,ping通网关10.168.10.1,也可以ping通其他客户端10.168.10.x
以上使用的V3 beta 2版本。参考指南为 gost v2 guide 不过,按照官方的模式,一般跑下来,只有1MB的速度,本文有改进。
下载gost, 参考 官方指南
下载得到的文件名为:gost-freebsd-amd64-3.0.0-beta.2.gz ,
解压:sudo gunzip -d gost-freebsd-amd64-3.0.0-beta.2.gz
加运行权限:sudo chmod +x gost-freebsd-amd64-3.0.0-beta.2
把gost移到系统目录:sudo mv gost-freebsd-amd64-3.0.0-beta.2 /usr/local/bin/gost
此时输入以下命令确认版本: gost -V
如果返回正确的版本号,说明安装正确。
配置文件建议放在gost要求的目录下,我这里放在 /etc/gost下。
首先,创建文件夹 sudo mkdir /etc/gost
配置文件,这里建议用yaml格式。
gost可以把命令生成为yaml格式,这里示例如下: 参考 官方指南
命令行创建服务端如下:
sudo gost -L="tun://:8421?net=10.168.10.1/24&gw=10.168.10.1&route=10.168.10.0/24"
把该命令生成yaml文件:
sudo gost -L="tun://:8421?name=gost0&net=10.168.10.1/24&gw=10.168.10.1&route=10.168.10.0/24" -O yaml >>/etc/gost/gost.yaml
此时,会在/etc/gost目录下创建一个gost.yaml文件,内容如下:
# /etc/gost/gost.yaml
services:
- name: service-0
addr: :8421
handler:
type: tun
metadata:
gw: 10.168.10.1
name: gost0
net: 10.168.10.1/24
route: 10.168.10.0/24
listener:
type: tun
metadata:
gw: 10.168.10.1
name: gost0
net: 10.168.10.1/24
route: 10.168.10.0/24
如果需要修改该文件,输入命令打开进行修改:
sudo vim /etc/gost/gost.yaml
注意,这里的端口号8421,记得在防火墙打开,tcp和udp都打开。 也可以改为其他端口号,同样的防火墙打开就好了。
把以下拷贝粘贴到命令行运行即可。
cat > /etc/systemd/system/gost.service <<EOF
[Unit]
Description=Gost tun private network
After=network.target network-online.target nss-lookup.target
[Service]
Type=simple
StandardError=journal
ExecStart=/usr/local/bin/gost -C /etc/gost/gost.yaml
Restart=on-failure
RestartSec=3s
[Install]
WantedBy=multi-user.target
EOF
启动gost sudo systemctl start gost
开启系统自动启动 sudo systemctl enable gost
确认开启的状态 sudo systemctl status gost
以Windows 10为例。
Windows下依赖于Tun/Tap驱动,这里我们安装OpenVPN开发的Tun/Tap驱动。
在 Tun/Tap驱动下载找到自己对应的版本进行安装。
安装完以后,会在本机网络适配器列表中,出现属性为 TAP Windows Adapter V9的适配器,修改适配器名称为“gost-Tun”。
在 Gost下载页面,下载amd64版本的gost文件,解压然后得到gost.exe文件。
把gost.exe文件放在C:\gost目录下,gost.exe的完整路径为 c:\gost\gost.exe
然后,在c:\gost目录下,创建一个文件为 startgost.bat 编辑c:\gost\startgost.bat文件,输入:
start gost.exe -L "tun://:8421/SERVER_IP:8421?net=10.168.10.2/24&name=gost-tap&gw=10.168.10.1&route=10.168.10.0/24"
创建一个配置文件为 c:\gost\gost.yaml 编辑,输入:
# c:\gost\gost.yaml
services:
- name: service-tun
addr: :8421
handler:
type: tun
metadata:
gw: 10.168.10.1
name: gost-tap
net: 10.168.10.2/24
route: 10.168.10.0/24
listener:
type: tun
metadata:
gw: 10.168.10.1
name: gost-tap
net: 10.168.10.2/24
route: 10.168.10.0/24
forwarder:
targets:
- SERVER_IP:8421
如果是配置文件启动,则 c:\gost\startgost.bat 内容如下:
start gost.exe
右键点击左下角 “开始” 按钮,打开管理员模式的cmd或者powershell,
然后输入回车运行 c:\gost\startgost.bat
然后另外打开一个cmd或者powershell,输入 ping 10.168.10.1 -n 3
正常应该是这样:
正在 Ping 10.168.10.1 具有 32 字节的数据:
来自 10.168.10.1 的回复: 字节=32 时间=7ms TTL=64
来自 10.168.10.1 的回复: 字节=32 时间=10ms TTL=64
来自 10.168.10.1 的回复: 字节=32 时间=9ms TTL=64
来自 10.168.10.1 的回复: 字节=32 时间=9ms TTL=64
10.168.10.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 7ms,最长 = 10ms,平均 = 8ms
以上配置,客户端和服务端,客户端和客户端之间已经基本可以通讯,但是经过测试,性能不佳。 一般最多也就是2-5MB,跑不满。
基本的做法是在客户端和服务端之间,增加Relay协议。 目前经过测试,可以使用以下几种搭配: Relay+mtls,Relay+mwss,Socks5+tls协议。
同时,我们在这里将会增加用户名鉴权。
我们以Relay+mtls为例。修改服务端配置文件 gost.yaml
services:
- name: service-0
addr: 127.0.0.1:7501
handler:
type: tun
metadata:
gw: 10.168.10.1
name: gost0
net: 10.168.10.1/24
route: 10.168.10.0/24
listener:
type: tun
metadata:
gw: 10.168.10.1
name: gost0
net: 10.168.10.1/24
route: 10.168.10.0/24
- name: service-mtls-tun
addr: :8421
handler:
type: relay
auth:
username: gost
password: "gost.123456"
metadata:
cert: /etc/keyfile/fullchain.pem
key: /etc/keyfile/privkey.pem
bind: "true"
listener:
type: mtls
metadata:
cert: /etc/keyfile/fullchain.pem
key: /etc/keyfile/privkey.pem
bind: "true"
注意:以上证书需要根据路径配置,也可以删除证书配置,使用gost自签名的证书。
然后重启gost服务 sudo systemctl restart gost
客户端同样优化gost.yaml文件。
优化后如下:
services:
- name: service-tun
addr: :8421
handler:
type: tun
chain: chain-tun
metadata:
gw: 10.168.10.1
name: gost-tap
net: 10.168.10.2/24
route: 10.168.10.0/24
listener:
type: tun
metadata:
gw: 10.168.10.1
name: gost-tap
net: 10.168.10.2/24
route: 10.168.10.0/24
forwarder:
targets:
- 127.0.0.1:7501
- name: chain-tun
hops:
- name: hop-0
nodes:
- name: node-0
addr: SERVER_IP:8421
connector:
type: relay
auth:
username: gost
password: "gost.123456"
dialer:
type: mtls
以上,配置完全结束。
Windows开机自动启动gost,可以借助“任务计划程序”。
输入 iperf3 -s
开启
输入 iperf3 -c 10.168.10.1
即可。
Connecting to host 10.168.10.1, port 5201
[ 4] local 10.168.10.3 port 65300 connected to 10.168.10.1 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.01 sec 5.75 MBytes 48.0 Mbits/sec
[ 4] 1.01-2.01 sec 5.50 MBytes 46.1 Mbits/sec
[ 4] 2.01-3.00 sec 5.88 MBytes 49.4 Mbits/sec
[ 4] 3.00-4.02 sec 5.88 MBytes 48.7 Mbits/sec
[ 4] 4.02-5.00 sec 6.50 MBytes 55.2 Mbits/sec
[ 4] 5.00-6.01 sec 5.50 MBytes 45.9 Mbits/sec
[ 4] 6.01-7.00 sec 4.75 MBytes 40.1 Mbits/sec
[ 4] 7.00-8.01 sec 4.75 MBytes 39.4 Mbits/sec
[ 4] 8.01-9.01 sec 5.75 MBytes 48.4 Mbits/sec
[ 4] 9.01-10.00 sec 4.62 MBytes 39.0 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.00 sec 54.9 MBytes 46.0 Mbits/sec sender
[ 4] 0.00-10.00 sec 54.9 MBytes 46.0 Mbits/sec receiver
iperf Done.
在办公室测试,因为已经开了一级nat,所以速度有所下降,不过这个已经很不错了。
Linux下安装比较简单,步骤和前面Linux服务端安装差不多。 只是配置文件 /etc/gost/gost.yaml 用和Windows下配置文件一样。 如下:
# /etc/gost/gost.yaml
services:
- name: service-tun
addr: :8421
handler:
type: tun
chain: chain-tun
metadata:
gw: 10.168.10.1
name: gost-tap
net: 10.168.10.2/24
route: 10.168.10.0/24
listener:
type: tun
metadata:
gw: 10.168.10.1
name: gost-tap
net: 10.168.10.2/24
route: 10.168.10.0/24
forwarder:
targets:
- 127.0.0.1:7501
- name: chain-tun
hops:
- name: hop-0
nodes:
- name: node-0
addr: SERVER_IP:8421
connector:
type: relay
auth:
username: gost
password: "gost.123456"
dialer:
type: mtls
然后启动gost服务 sudo systemctl start gost
并启用服务 sudo systemctl enable gost
待续。。。