前言
HTTP 和 SOCKS5 协议由于没有加密,所以在使用时会有一定的风险,而 HTTPS 协议则是一种加密的协议,可以有效的保护数据的安全性。本文将介绍如何使用 Docker 部署 GOST 并开启 HTTPS 代理。
方案概述
- 安装 Docker 环境
- 使用 Docker 部署 GOST 并开启 HTTP 代理
- 使用 acme.sh 申请证书
- 将证书挂载到 GOST 容器中并开启 HTTPS 代理
操作步骤
一、安装 Docker 环境
参考:Ubuntu 20.04 从官方源安装最新的 Docker
二、使用 Docker 部署 GOST 并开启 HTTP 代理
官方仓库:gogost/gost
# 拉取镜像并检查版本
docker run --rm gogost/gost -V
# 启动容器
docker run -d \
--name gost \
-p 8080:8080 \
gogost/gost \
-L http://username:password@:8080
测试本地代理是否正常:
curl -x http://username:password@localhost:8080 ipinfo.io
如果镜像拉取有问题,可以参考:自建 Docker Registry 镜像加速服务
三、使用 acme.sh 申请证书
# 申请证书
acme.sh --issue -d proxy.example.com --webroot /var/acme/webroot/ --force
mkdir -vp /etc/nginx/ssl/proxy.example.com/
# 安装证书
acme.sh --install-cert -d proxy.example.com \
--fullchain-file /etc/nginx/ssl/proxy.example.com/certificate.crt \
--key-file /etc/nginx/ssl/proxy.example.com/private.key \
--reloadcmd "docker restart gost"
之后你的 SSL 证书目录中会多两个文件:
certificate.crtprivate.key
四、将证书挂载到 GOST 容器中并开启 HTTPS 代理
官方文档:TLS
由于 GOST 会自动加载当前工作目录下的 cert.pem、key.pem 和 ca.pem 文件来初始化全局证书,因此我们需要把证书挂载到相应目录中并改名:
# 停止并删除旧容器
docker stop gost && docker rm gost
# 启动新容器
docker run -d \
--name gost \
--restart always \
-p 8443:8443 \
-v /etc/nginx/ssl/proxy.example.com/:/ssl \
--entrypoint "/bin/sh" \
gogost/gost \
-c "cp -f /ssl/certificate.crt /bin/cert.pem && cp -f /ssl/private.key /bin/key.pem && /bin/gost -L http+tls://username:password@:8443"
如果需要调试的话:
docker stop gost && docker rm gost docker run -it \ --name gost \ -p 8443:8443 \ -v /etc/nginx/ssl/proxy.example.com/:/ssl \ --entrypoint /bin/sh \ gogost/gost
之后使用你的客户端连接即可:

当然也可以使用 curl 测试:
curl -x https://username:password@localhost:8443 ipinfo.io