如何使用gost实现https转(dai)发(li)

纪念2023年5月13日不幸去世的陈皓(左耳朵)。本文主要是在陈皓的文章指导下完成,一些细节上作了修正和补充。

一、安装docker

可以直接使用脚本安装docker。

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

也可以仅安装docker-ce。docker-ce是docker的免费版本(简单使用docker也不需要付费),但已经具备docker通常使用的所有功能。手动安装:

sudo apt update
#安装GPG key
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
#添加仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#再次更新列表
sudo apt update
#安装docker-ce
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

此时docker-ce已经安装成功。若要测试docker/docker-ce是否正常,可以:

docker run hello-world

docker的常用命令包括:

#显示所有运行中的容器
docker ps
#显示所有容器(包括停止的)
docker ps -a
#停止容器,Container-ID不一定需要写全,可以写前几个字符,只要确保没有重复
docker stop Container-ID
#启动容器,会自动以最初run的参数运行
docker start Container-ID
#重启容器
docker restart Container-ID
#删除容器
docker rm Container-ID
#列出镜像
docker images
#删除镜像,首先需要删除所有引用该镜像的容器
docker rmi Image-ID

注意,每次执行docker run ……命令,会重新创建一个新的容器。因此如果调整了run的参数,建议删除原来的容器。否则会留下一大堆不运行的容器。

二、域名和SSL

我们的目标是使用gos来利用https协议的TLS加密传输,因此域名和SSL证书是必须的。

由于我们将手动配置pem文件,所以certbot只需要以certonly模式执行。

sudo certbot certonly --standalone

执行后,手动输入邮箱(可选),以及域名。申请成功后,记录SSL证书保存路径,一般位于/etc/letsencrypt/<DOMAIN>。

如何申请域名、配置DNS,此处不再赘述。

三、安装和配置gost

安装gost-v2版本(v3版本即将发布,此处以v2版本为例)。

docker run --rm ginuerzh/gost -V

由于使用了--rm参数,该命令仅安装了gost,并没有运行它。-V参数显示出了当前安装的gost版本号。

手动创建一个脚本,路径和文件名随意,假设为/usr/bin/start_gost.sh。内容如下:

#替换成实际域名,并设定用户名、密码。
#如果不设定用户名密码,则无法开启反探测功能
DOMAIN="DOMAIN"
USER="username"
PASS="password"
#可以使用443,这样伪装成https网站更逼真
#为了避免端口冲突,也可以选择其他端口,https协议依然支持
PORT=443
#为了避免用户名、密码有特殊字符嵌入URL后出错,使用AUTH方式认证
AUTH=$(echo -n ${USER}:${PASS} | base64)

BIND_IP=0.0.0.0
#配置SSL
CERT_DIR=/etc/letsencrypt
CERT=${CERT_DIR}/live/${DOMAIN}/fullchain.pem
KEY=${CERT_DIR}/live/${DOMAIN}/privkey.pem
#运行gost
sudo docker run -d --name gost \
    -v ${CERT_DIR}:${CERT_DIR}:ro \
        -v /var/www/html/index.html:/var/local/index.html \
    --net=host ginuerzh/gost \
    -L "http2://${BIND_IP}:${PORT}?auth=${AUTH}&cert=${CERT}&key=${KEY}&probe_resist=file:/var/local/index.html&knock=www.google.com"

这里在运行参数中,指定了probe_resist反探测设定。当访问没有包含AUTH信息时,它将返回文件file:/var/local/index.html。这个index.html事先编好,内容就是一个普通的nginx初始安装页。但要注意的是,/var/local/index.html并不是宿主机的地址,而是容器内的地址。所以,需要在docker run中,额外用-v参数指定一个路径映射,将宿主机中/var/www/html/index.html这个真实存在的文件,映射到容器的/var/local/index.html,方可生效。

对start_gost.sh脚本赋予执行权限,然后执行它:

chmod +x <PATH>/start_gost.sh
<PATH>/start_gost.sh

此时gost执行成功。使用这个命令来检查443端口是否处于监听状态:

netstat -nolp | grep 443

如果用浏览器访问DOMAIN,会看到nginx欢迎页,也就是index.html的内容。

四、SSL证书自动更新及定期重启gost

配置cron任务:

crontab -e

假设选择nano编辑器,在弹出的文件内加上两行:

#注意,用snap方式安装的certbot位于/snap/bin,如果是直接安装的位于/usr/bin
0 0 1 * * /snap/bin/certbot renew --force-renewal
5 0 1 * * /usr/bin/docker restart gost

对于nano编辑器,ctrl+o保存,ctrl+x退出。 crontab -e命令下,文件保存退出后立即生效。

这两个任务将每个月执行一次。

五、配置clash

强烈建议在现有的yml文件上直接编辑,这样可以利用现成的rules。前面的配置可以不要动它,只需要编辑yml的proxies块和proxy-groups块,根据自定义需要也可以调整一下rules。

一个典型的,基于http的proxies块如下。可以逐个添加多个proxy。(你问我什么是“节点”?不懂,没有听说过)

proxies:
  - name: PROXY-NAME
    type: http
    server: DOMAIN
    port: "443"
    username: "username"
    password: "password"
    tls: true
    skip-cert-verify: false

通常,proxy-groups需要3个,一个用来自动测速自动选择,type是url-test;一个用来手动选择作为分流逻辑的基础,type是select;一个是专门用来识别境内网站,默认要让它们DIRECT。一个典型的proxy-groups长这样:

proxy-groups:
  - name: Auto
    type: url-test
    url: http://www.google.com/generate_204
    interval: 300
    proxies:
      - PROXY-NAME-01
      - PROXY-NAME-02
  - name: Manual
    type: select
    proxies:
      - Auto
      - PROXY-NAME-01
      - PROXY-NAME-02
  - name: China-Websites
    type: select
    proxies:
      - DIRECT
      - Manual

对于rules块,则需要列出尽可能多的、常用的境内网站域名(注意,境内网站不代表它们的服务在境内,所以直接列出域名与用GEOIP来识别地理位置是两个不同的概念),将他们匹配到在proxy-groups中定义的China-Websites。内网地址也要避开,同时对IP进行地理位置分析,如果是CN也全部算作China-Websites。

rules:
  - DOMAIN-SUFFIX,taichi-maker.com,China-Websites
  - DOMAIN-SUFFIX,leaguehd.com,China-Websites
  - DOMAIN-SUFFIX,plex.tv,China-Websites
  - DOMAIN-SUFFIX,qhres.com,China-Websites
  - DOMAIN-SUFFIX,qhres.com,China-Websites
  - DOMAIN-SUFFIX,qhimg.com,China-Websites
  - DOMAIN-SUFFIX,akadns.net,China-Websites
  - DOMAIN-SUFFIX,alibaba.com,China-Websites
  - DOMAIN-SUFFIX,alicdn.com,China-Websites
  - DOMAIN-SUFFIX,alikunlun.com,China-Websites
  - DOMAIN-SUFFIX,alipay.com,China-Websites
  - DOMAIN-SUFFIX,amap.com,China-Websites
  - DOMAIN-SUFFIX,dingtalk.com,China-Websites
  - DOMAIN-SUFFIX,taobao.com,China-Websites
  - DOMAIN-SUFFIX,tmall.com,China-Websites
  - DOMAIN-SUFFIX,tmall.hk,China-Websites
  - DOMAIN-SUFFIX,ykimg.com,China-Websites
  - DOMAIN-SUFFIX,youku.com,China-Websites
  - DOMAIN-SUFFIX,xiami.com,China-Websites
  - DOMAIN-SUFFIX,xiami.net,China-Websites
  - DOMAIN-SUFFIX,baidu.com,China-Websites
  - DOMAIN-SUFFIX,baidubcr.com,China-Websites
  - DOMAIN-SUFFIX,bdstatic.com,China-Websites
  - DOMAIN-SUFFIX,acgvideo.com,China-Websites
  - DOMAIN-SUFFIX,biliapi.com,China-Websites
  - DOMAIN-SUFFIX,biliapi.net,China-Websites
  - DOMAIN-SUFFIX,bilibili.com,China-Websites
  - DOMAIN-SUFFIX,hdslb.com,China-Websites
  - DOMAIN-SUFFIX,blizzard.com,China-Websites
  - DOMAIN-SUFFIX,battle.net,China-Websites
  - DOMAIN,blzddist1-a.akamaihd.net,China-Websites
  - DOMAIN-SUFFIX,feiliao.com,China-Websites
  - DOMAIN-SUFFIX,pstatp.com,China-Websites
  - DOMAIN-SUFFIX,snssdk.com,China-Websites
  - DOMAIN-SUFFIX,iesdouyin.com,China-Websites
  - DOMAIN-SUFFIX,toutiao.com,China-Websites
  - DOMAIN-SUFFIX,343480.com,China-Websites
  - DOMAIN-SUFFIX,baduziyuan.com,China-Websites
  - DOMAIN-SUFFIX,com-hs-hkdy.com,China-Websites
  - DOMAIN-SUFFIX,czybjz.com,China-Websites
  - DOMAIN-SUFFIX,dandanzan.com,China-Websites
  - DOMAIN-SUFFIX,fjhps.com,China-Websites
  - DOMAIN-SUFFIX,kuyunbo.club,China-Websites
  - DOMAIN-SUFFIX,21cn.com,China-Websites
  - DOMAIN-SUFFIX,hitv.com,China-Websites
  - DOMAIN-SUFFIX,mgtv.com,China-Websites
  - DOMAIN-SUFFIX,iqiyi.com,China-Websites
  - DOMAIN-SUFFIX,iqiyipic.com,China-Websites
  - DOMAIN-SUFFIX,71.am.com,China-Websites
  - DOMAIN-SUFFIX,jd.com,China-Websites
  - DOMAIN-SUFFIX,jd.hk,China-Websites
  - DOMAIN-SUFFIX,360buyimg.com,China-Websites
  - DOMAIN-SUFFIX,iciba.com,China-Websites
  - DOMAIN-SUFFIX,ksosoft.com,China-Websites
  - DOMAIN-SUFFIX,meitu.com,China-Websites
  - DOMAIN-SUFFIX,meitudata.com,China-Websites
  - DOMAIN-SUFFIX,meitustat.com,China-Websites
  - DOMAIN-SUFFIX,meipai.com,China-Websites
  - DOMAIN-SUFFIX,duokan.com,China-Websites
  - DOMAIN-SUFFIX,mi-img.com,China-Websites
  - DOMAIN-SUFFIX,miui.com,China-Websites
  - DOMAIN-SUFFIX,xiaomi.com,China-Websites
  - DOMAIN-SUFFIX,microsoft.com,China-Websites
  - DOMAIN-SUFFIX,windows.com,China-Websites
  - DOMAIN-SUFFIX,windowsupdate.com,China-Websites
  - DOMAIN-SUFFIX,visualstudio.com,China-Websites
  - DOMAIN-SUFFIX,msecnd.net,China-Websites
  - DOMAIN,officecdn-microsoft-com.akamaized.net,China-Websites
  - DOMAIN-SUFFIX,163.com,China-Websites
  - DOMAIN-SUFFIX,126.net,China-Websites
  - DOMAIN-SUFFIX,127.net,China-Websites
  - DOMAIN-SUFFIX,163yun.com,China-Websites
  - DOMAIN-SUFFIX,lofter.com,China-Websites
  - DOMAIN-SUFFIX,ydstatic.com,China-Websites
  - DOMAIN-SUFFIX,sina.com,China-Websites
  - DOMAIN-SUFFIX,weibo.com,China-Websites
  - DOMAIN-SUFFIX,sohu.com,China-Websites
  - DOMAIN-SUFFIX,sohucs.com,China-Websites
  - DOMAIN-SUFFIX,sohu-inc.com,China-Websites
  - DOMAIN-SUFFIX,v-56.com,China-Websites
  - DOMAIN-SUFFIX,sogo.com,China-Websites
  - DOMAIN-SUFFIX,sogou.com,China-Websites
  - DOMAIN-SUFFIX,sogoucdn.com,China-Websites
  - DOMAIN-SUFFIX,qq.com,China-Websites
  - DOMAIN-SUFFIX,tencent.com,China-Websites
  - DOMAIN-SUFFIX,jstucdn.com,China-Websites
  - DOMAIN-SUFFIX,zimuzu.io,China-Websites
  - DOMAIN-SUFFIX,zimuzu.tv,China-Websites
  - DOMAIN-SUFFIX,zmz2019.com,China-Websites
  - DOMAIN-SUFFIX,zmzapi.com,China-Websites
  - DOMAIN-SUFFIX,zmzapi.net,China-Websites
  - DOMAIN-SUFFIX,zmzfile.com,China-Websites
  - DOMAIN-SUFFIX,chinanetcenter.com,China-Websites
  - DOMAIN-SUFFIX,wangsu.com,China-Websites
  - DOMAIN-SUFFIX,meixincdn.com,China-Websites
  - DOMAIN-SUFFIX,ipip.net,China-Websites
  - DOMAIN-SUFFIX,ip.la,China-Websites
  - DOMAIN-SUFFIX,ip-cdn.com,China-Websites
  - DOMAIN-SUFFIX,ipv6-test.com,China-Websites
  - DOMAIN-SUFFIX,test-ipv6.com,China-Websites
  - DOMAIN-SUFFIX,whatismyip.com,China-Websites
  - DOMAIN,ip.bjango.com,China-Websites
  - DOMAIN-SUFFIX,netspeedtestmaster.com,China-Websites
  - DOMAIN,speedtest.macpaw.com,China-Websites
  - DOMAIN-SUFFIX,awesome-hd.me,China-Websites
  - DOMAIN-SUFFIX,broadcasthe.net,China-Websites
  - DOMAIN-SUFFIX,chdbits.co,China-Websites
  - DOMAIN-SUFFIX,classix-unlimited.co.uk,China-Websites
  - DOMAIN-SUFFIX,empornium.me,China-Websites
  - DOMAIN-SUFFIX,gazellegames.net,China-Websites
  - DOMAIN-SUFFIX,hdchina.org,China-Websites
  - DOMAIN-SUFFIX,hdsky.me,China-Websites
  - DOMAIN-SUFFIX,jpopsuki.eu,China-Websites
  - DOMAIN-SUFFIX,keepfrds.com,China-Websites
  - DOMAIN-SUFFIX,m-team.cc,China-Websites
  - DOMAIN-SUFFIX,nanyangpt.com,China-Websites
  - DOMAIN-SUFFIX,ncore.cc,China-Websites
  - DOMAIN-SUFFIX,open.cd,China-Websites
  - DOMAIN-SUFFIX,ourbits.club,China-Websites
  - DOMAIN-SUFFIX,passthepopcorn.me,China-Websites
  - DOMAIN-SUFFIX,privatehd.to,China-Websites
  - DOMAIN-SUFFIX,redacted.ch,China-Websites
  - DOMAIN-SUFFIX,springsunday.net,China-Websites
  - DOMAIN-SUFFIX,tjupt.org,China-Websites
  - DOMAIN-SUFFIX,totheglory.im,China-Websites
  - DOMAIN-SUFFIX,cn,China-Websites
  - DOMAIN-SUFFIX,8686c.com,China-Websites
  - DOMAIN-SUFFIX,aixifan.com,China-Websites
  - DOMAIN-SUFFIX,beitaichufang.com,China-Websites
  - DOMAIN-SUFFIX,booking.com,China-Websites
  - DOMAIN-SUFFIX,bstatic.com,China-Websites
  - DOMAIN-SUFFIX,cailianpress.com,China-Websites
  - DOMAIN-SUFFIX,chunyu.mobi,China-Websites
  - DOMAIN-SUFFIX,chushou.tv,China-Websites
  - DOMAIN-SUFFIX,cmbchina.com,China-Websites
  - DOMAIN-SUFFIX,cmbimg.com,China-Websites
  - DOMAIN-SUFFIX,ctrip.com,China-Websites
  - DOMAIN-SUFFIX,dfcfw.com,China-Websites
  - DOMAIN-SUFFIX,douban.com,China-Websites
  - DOMAIN-SUFFIX,doubanio.com,China-Websites
  - DOMAIN-SUFFIX,douyu.com,China-Websites
  - DOMAIN-SUFFIX,dxycdn.com,China-Websites
  - DOMAIN-SUFFIX,eastmoney.com,China-Websites
  - DOMAIN-SUFFIX,futunn.com,China-Websites
  - DOMAIN-SUFFIX,geilicdn.com,China-Websites
  - DOMAIN-SUFFIX,hicloud.com,China-Websites
  - DOMAIN-SUFFIX,hostbuf.com,China-Websites
  - DOMAIN-SUFFIX,huya.com,China-Websites
  - DOMAIN-SUFFIX,infinitynewtab.com,China-Websites
  - DOMAIN-SUFFIX,ithome.com,China-Websites
  - DOMAIN-SUFFIX,keepcdn.com,China-Websites
  - DOMAIN-SUFFIX,kkmh.com,China-Websites
  - DOMAIN-SUFFIX,luojilab.com,China-Websites
  - DOMAIN-SUFFIX,maoyun.tv,China-Websites
  - DOMAIN-SUFFIX,meituan.net,China-Websites
  - DOMAIN-SUFFIX,mobike.com,China-Websites
  - DOMAIN-SUFFIX,mubu.com,China-Websites
  - DOMAIN-SUFFIX,myzaker.com,China-Websites
  - DOMAIN-SUFFIX,nvidia.com,China-Websites
  - DOMAIN-SUFFIX,paypal.com,China-Websites
  - DOMAIN-SUFFIX,paypalobjects.com,China-Websites
  - DOMAIN-SUFFIX,qyer.com,China-Websites
  - DOMAIN-SUFFIX,qyerstatic.com,China-Websites
  - DOMAIN-SUFFIX,ronghub.com,China-Websites
  - DOMAIN-SUFFIX,ruguoapp.com,China-Websites
  - DOMAIN-SUFFIX,smzdm.com,China-Websites
  - DOMAIN-SUFFIX,snapdrop.net,China-Websites
  - DOMAIN-SUFFIX,sspai.com,China-Websites
  - DOMAIN-SUFFIX,teamviewer.com,China-Websites
  - DOMAIN-SUFFIX,tianyancha.com,China-Websites
  - DOMAIN-SUFFIX,udacity.com,China-Websites
  - DOMAIN-SUFFIX,uning.com,China-Websites
  - DOMAIN-SUFFIX,weather.com,China-Websites
  - DOMAIN-SUFFIX,weidian.com,China-Websites
  - DOMAIN-SUFFIX,xmcdn.com,China-Websites
  - DOMAIN-SUFFIX,yangkeduo.com,China-Websites
  - DOMAIN-SUFFIX,zhangzishi.cc,China-Websites
  - DOMAIN-SUFFIX,zhihu.com,China-Websites
  - DOMAIN-SUFFIX,zhimg.com,China-Websites
  - DOMAIN-SUFFIX,zhuihd.com,China-Websites
  - DOMAIN,download.jetbrains.com,China-Websites
  - DOMAIN-SUFFIX,local,China-Websites
  - DOMAIN,mtalk.google.com,China-Websites
  - IP-CIDR,192.168.0.0/16,China-Websites
  - IP-CIDR,10.0.0.0/8,China-Websites
  - IP-CIDR,172.16.0.0/12,China-Websites
  - IP-CIDR,127.0.0.0/8,China-Websites
  - IP-CIDR,100.64.0.0/10,China-Websites
  - GEOIP,CN,China-Websites
  - MATCH,Auto

在clash中导入该yml……Hello world!

六、开启BBR(可选)

服务器开启BBR可能会带来4%~14%的速度提升。BBR要求linux的内核版本高于4.9,对于ubuntu 16.04以上的版本而言已经满足要求,无需更换内核。

查看内核版本:

uname -r

先查看有没有开启BBR:

lsmod | grep bbr

如果没有,则:

sudo modprobe tcp_bbr
echo "tcp_bbr" | sudo tee --append /etc/modules-load.d/modules.conf
#保存配置并生效
sudo sysctl -p

检查BBR配置:

sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

最后用这个命令确认BBR是否已经启用:

lsmod | grep bbr

Done.