gost GitHub:

https://github.com/ginuerzh/gost

下载gost

直接转发

以上转发类似iptables的转发。

下面为加密转发,gost自带tls证书。

加密转发

TLS 加密方式:

中转机:

落地机:

wss 加密方式:

中转机:

落地机:

使用 shadowsocks

直接运行 shadowsocks

之后直接使用shadowsocks的客户端连接就能使用。

Shadowsocks Over TLS:

Shadowsocks Over WSS:

Shadowsocks Over KCP:

运行原版 shadowsocks 并加密转发

中转机IP为1.1.1.1,落地机IP为2.2.2.2,均使用443端口。shadowsocks 运行在落地机的 8338 端口。

中转机:

落地机:

shadowsocks 客户端连接 1.1.1.1 的IP,443的端口,加上加密方式及密码即可成功连接。

以上端口可随意指定,不是一定要用443。当然最好也是用443。

gost 使用自定义的SSL证书

使用 gost 自带的 tls 证书虽然很方便,但是存在安全隐患(详见:为什么Gost默认TLS隧道不安全)。

我们最好使用自己域名的证书。

操作起来略微有点麻烦,具体的步骤为:申请证书——转换证书——启用证书

申请证书

使用 acme.sh 脚本申请 SSL证书 是最好的方式。

安装 acme.sh:

这条命令主要做了2件事情:

1、把 acme.sh 安装到你的用户目录下(比如你用 root 执行安装,就会在 /root/.acme.sh);

2、自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

获取证书:

获取证书有很多种方式。这里我们选择合适 gost 的方式,即只需要获取证书。

有公网IP的VPS:

没有公网IP的 nat vps:

–httpport 指定端口申请 SSL证书

或者,用 手动dns 的方式, 手动在域名上添加一条 txt 解析记录来获取证书:

之后会出现提示,让你在域名解析那里添加 txt解析。

添加后继续执行:

如果 nat vps 指定了端口仍然申请不了证书,则使用 API 的方式,这里用 cloudflare 做演示。

cloudflare API 分两种方式:使用 Global API Key 或 API Token。一般推荐用 API Token,更安全。

API Token:

Token、Account ID、Zone ID的获取请看 使用CloudFlare做DDNS解析(API Token)

Account ID、Zone ID都是在一个地方查看。

注意这里API Token的权限应为:

cloudflare

Global API Key:

CF_Key 就是 Global API Key,CF_Email 就是你 cloudflare 的用户邮箱,如果不懂请见之前的文章:

使用CloudFlare做DDNS解析

选用上面其中一种方式并执行后,开始用 API 申请证书:

稍等片刻,证书就申请好了!

——————————-更多 acme.sh 的用法详见 Github

转换证书

申请的证书在 /root/.acme.sh 目录下,我们 copy 到 gost 所在的目录 /root,比如域名为 abc.com:

将cer、key 两个证书转换成 pem 格式:

如果你的 key 文件是 EC 格式的,执行:

其他格式的以此类推。

启用证书

此时,gost 所在的目录已经有 cert.pem、key.pem 两个文件了,启动 gost,gost 就会自动使用证书。

如前面的例子,服务端执行:

或者 如果有多个证书,可以直接指定证书位置来运行:

之后再将 cert.pem、key.pem 传输到 gost 的客户端。

gost 的客户端执行:

secure=true  指定了必须验证证书。

ca=$PATH  锁定了证书,服务端传回的证书必须是它,否则断开连接。

上面是单向的证书认证,下面是更安全的双向证书认证。

启用双向证书校验

服务端:

客户端:

如果是通过 acme.sh 脚本申请的证书,可在 /root/.acme.sh/abc.com 下面找到 ca.cer,这个就是ca证书,复制过来转换成pem即可。

开启双向证书认证后,只要有一方的证书不对就无法建立连接。

如客户端使用自带或其他域名的证书,服务端就会提示:

tls: client didn't provide a certificate

OK,这样 gost 就用我们的域名证书跑起来了。

唯一的问题是3个月换一次证书???

gost 以配置文件方式运行

配置文件为标准json格式:

  • {
  • "Debug": true,
  • "Retries": 0,
  • "ServeNodes": [
  • ":8080",
  • "ss://chacha20:12345678@:8338"
  • ],
  • "ChainNodes": [
  • "http://192.168.1.1:8080",
  • "https://10.0.2.1:443"
  • ],
  • "Routes": [
  • {
  • "Retries": 1,
  • "ServeNodes": [
  • "ws://:1443"
  • ],
  • "ChainNodes": [
  • "socks://:192.168.1.1:1080"
  • ]
  • },
  • {
  • "Retries": 3,
  • "ServeNodes": [
  • "quic://:443"
  • ]
  • }
  • ]
  • }
  • Debug – 对应命令行参数-D。(2.4+)
  • Retries – 通过代理链建立连接失败后的重试次数。(2.5+)
  • ServeNodes – 必须项,等同于命令行参数-L。
  • ChainNodes – 等同于命令行参数-F。
  • Routes – 可选参数,额外的服务列表,每一项都拥有独立的转发链。(2.5+)

比如

配置文件可以写成:

之后执行:

就能运行了

gost 开机启动

创建 /etc/systemd/system/gost.service 文件:

输入以下内容:

ExecStart  gost 的启动命令,记得用绝对路径
WorkingDirectory  指定 gost 的工作目录,使 gost 能读取目录下的SSL证书

之后,如果这个 gost.service 有修改的话,需要执行刷新才能生效:

设置开机启动:

这样Linux重启,gost 也会跟着跑起来。

以后也能通过 systemctl 命令来控制 gost,如:

或者用 service 命令:

更多用法详见 gost 的GitHub。gost 远远不止这些用途。


openwrt 运行 gost

https://github.com/ginuerzh/gost/releases 下载对应的版本,这里以 斐讯N1 为例,下载 gost-linux-armv8-2.11.1.gz。

下载后通过 web 上传到 openwrt。如果需要使用到证书,也一起传进去。

启用

方式1:打开openwrt 的 Web页面, 找到启动项,在里面找到gost,点击启动即可
方式2:重启openwrt即可

作者 灰武士