基于Gost搭建科学上网服务

3 minute read

准备

VPS一台,目前在用的有以下几个服务商。

在国外注册商购买的域名一个。

服务搭建

Docker安装

在VPS上安装Docker CE,具体参看文档:

非root用户使用Docker如果遇到错误:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied.

解决办法如下:

# 创建docker用户组
sudo groupadd docker
# 将当前用户添加进docker用户组
sudo gpasswd -a ${USER} docker
# 重启docker服务,退出当前用户重新登录即可
service docker restart

开启TCP BBR

参见文档开启 TCP BBR 拥塞控制算法

域名和证书配置

设置DNS解析,将域名解析到对应VPS。 使用certbot在服务器上生成 Let’s Encrypt 证书。使用以下命令以standalone方式生成证书,按照提示输入域名和邮箱等信息。

$ sudo certbot certonly --standalone

启动gost服务

使用Docker来部署gost服务,创建如下脚本:

#!/bin/bash

## 下面的四个参数需要改成你的
DOMAIN="YOU.DOMAIN.NAME"
USER="username"
PASS="password"
PORT=443

BIND_IP=0.0.0.0
CERT_DIR=/etc/letsencrypt
CERT=${CERT_DIR}/live/${DOMAIN}/fullchain.pem
KEY=${CERT_DIR}/live/${DOMAIN}/privkey.pem
sudo docker run -d --name gost \
    -v ${CERT_DIR}:${CERT_DIR}:ro \
    --net=host ginuerzh/gost \
    -L "http2://${USER}:${PASS}@${BIND_IP}:${PORT}?cert=${CERT}&key=${KEY}&probe_resist=code:404&knock=www.google.com"

执行上述脚本,成功后gost服务就部署完成了。可以使用以下命令检查是否正常运行。

curl -v "https://www.google.com" --proxy "https://DOMAIN" --proxy-user 'USER:PASS'

自动更新证书

因为Let’s Encrypt的证书半年后会过期,所以要添加定时任务,自动更新证书。使用 crontab -e 编辑Crontab定时任务,添加以下内容:

0 0 1 * * /usr/bin/certbot renew --force-renewal
5 0 1 * * /usr/bin/docker restart gost

Mac 客户端配置

首先下载 程序到本地,解压后添加可执行权限,改名为 gost。 执行命令:

gost -L ss://aes-128-cfb:passcode@:1984 -F 'https://USER:PASS@DOMAIN:443'

成功后本地就启动了一个Shadowsocks服务,在ClashX中配置好该本地Shadowsocks服务即可。

手机客户端

  • iPhone,购买ShadowRocket 或者 Quantumult ,然后添加HTTPS服务。
  • Android,可以使用插件 ShadowsocksGostPlugin,我没用过,可以自行测试。

参考