前言

当代信息技术起源于美丽国,随着中国近20年产业发展,站在巨人的肩膀上,互联网应用在国内遍地开花,发扬光大。遥想自己还是程序员那会儿,每操作一台Linux服务器,或是用PHP写一段代码,内心充满了对欧美祖师爷的感恩之情。
为了离他们更近,快速高效的使用google和chatGPT,成为程序员的必备技能,下面介绍自己使用中的代理加速方案,做个记录,同时分享给有需要的人。
苍天在上,本人郑重声明,本人爱国爱党爱人民,热爱这片土地,使用代理技术只是满足个人学习工作需求,绝不做汉奸和背叛人民的事情!!

代理加速的使用场景

  • 访问Google/SlideShare/ChatGPT/Wikipedia等常用工具网站,使用其提供的产品和服务
  • 娱乐需求(如访问Youtube/Pornhub/Instagram等)
  • 一些云服务(如Dropbox)
  • 中立媒体的新闻评论
  • 想看一些不那么容易好找的书籍(如《鸿:三代中国女人的故事》)
  • 访问github
  • “go get”命令中,下载某些轮子库

准备工作

  • 一台具备固定IPV4地址的VPS,如手头购买的是AWS服务1C512M的基础款,已足够个人使用。
  • 操作系统选择的是OpenSUSE15.5, AWS上的VPS已使用了近2年,换来换去,觉得这款易用性最高~
  • Linux系统基础知识
  • 提前申请好的域名和证书

加速方案

  • 目前流行的代理加速方案有很多,我这里选用的是gost。
  • 优点:
    • 使用docker镜像部署,方便快捷,易用省心。
    • 国人开发,中文支持好,使用群体广泛。
    • 代码开源,方便二次开发。

操作步骤

  • 操作系统更新(openSuSE15.5, 登录用户为ec2-user)

    1
    sudo zypper update
  • 安装docker

    1
    sudo zypper install docker docker-compose docker-compose-switch
  • 下载镜像

    1
    sudo docker pull ginuerzh/gost
  • 编写启动脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/bin/bash

    # 创建一个配置目录(/etc/gost/pems),用来存放证书,本例中的域名证书,申请于腾讯云。

    # 下面的四个参数需要改成你的
    DOMAIN="这里填写域名"
    USER="这里填写认证用户名"
    PASS="这里填写认证密码"
    PORT=443

    BIND_IP=0.0.0.0
    CERT_DIR=/etc/gost/pems
    CERT=${CERT_DIR}/*.pem
    KEY=${CERT_DIR}/*.key
    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 的参数, 你可以参看其文档:Gost Wiki,上面我设置一个参数 probe_resist=code:404 意思是,如果服务器被探测,或是用浏览器来访问,返回404错误,也可以返回一个网页(如:probe_resist=file:/path/to/file.txt 或其它网站 probe_resist=web:example.com/page.html)
    • 开启了探测防御功能后,当认证失败时服务器默认不会响应 407 Proxy Authentication Required,但某些情况下客户端需要服务器告知代理是否需要认证(例如Chrome中的 SwitchyOmega 插件)。通过knock参数设置服务器才会发送407响应。对于上面的例子,我们的knock参数配置的是www.google.com,所以,你需要先访问一下 https://www.google.com 让服务端返回一个 407 后,SwitchyOmega 才能正常工作。
      如果认证信息(也就是用户名和密码)中包含特殊字符,则可以(应该是必须!否则客户端一侧会有很多不兼容)通过auth参数来设置,下面是使用 auth 参数的例子(注意,需要 gost 在 2.9.2+ 以上版本):
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      DOMAIN="YOU.DOMAIN.NAME"
      USER="username"
      PASS="password"
      PORT=443
      AUTH=$(echo -n ${USER}:${PASS} | base64)

      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://${BIND_IP}:${PORT}?auth=${AUTH}&cert=${CERT}&key=${KEY}&probe_resist=code:404&knock=www.go ogle.> com"
  • 执行脚本,看到端口443已经处于监听状态

    1
    2
    3
    4
    5
    ip-172-26-10-179:~ # ss -nltp
    State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
    LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=4551,fd=3))
    LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=4551,fd=4))
    LISTEN 0 4096 *:443 *:* users:(("gost",pid=3597,fd=6))
  • 在VPS提供商控制面板,打开443端口的防火墙

  • windows系统,配置clash,启用全局代理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    port: 1080
    allow-lan: false
    mode: Global
    log-level: info

    proxies:
    - name: "gost"
    type: http
    server: 填写域名
    port: 填写端口
    username: 用户名
    password: 密码
    tls: true
    skip-cert-verify: true
    proxy-groups:
    - name: DefaultProxyGroup
    type: url-test
    proxies:
    - gost
    url: 'https://www.google.com/'
    interval: 300
    rules:
    - "MATCH,DIRECT"
  • iphone手机,配置shadowrocket…

    推荐最详细教程:https://haoel.github.io/