最近chatGPT封的厉害,次元链的服务变得非常不稳定,外加openai近期升级了安全策略,开始大规模封禁ip和账号。封禁ip主要针对机场或者自建的节点,但是封账号就会变得很大条。很多机场提供商的海外节点是集群化的,经常切换节点ip,或账号同时挂载了多个地区的IP(共享号),或者频繁尝试通过不支持的区域访问(如香港),最终导致会导致chatgpt账号本身被封。

另外一个起因是有朋友委托去弄一条专属线路,于是把这个小项目的工程笔记贴出来,希望帮到有缘人。

其实最核心的一步就是开启warp服务,然后通过warp代理ipv4/ipv6的流量。对于稳定的线路没必要从头折腾,是可以直接开启warp服务的。wireguard不建议使用,因为chat GPT本质上是在翻,wireguard的方式进行直接通信会被识别,这个代理的过程是不应该跨墙的,而要放在外边完成。活儿细致一点用xray或者v系协议的配置,去代理本地wg流量,粗旷一点就直接让warp代理整个机器的流量,结果是一样的,都能达到所谓的“原生IP”的效果。

经过这番处理的机器,在上层做一次代理转发进行分流,让本机专门用来处理openai的流量。根据流量特征进行分组,可以显著降低封号和封ip的概率。

问题

  • 域名
    • 是否需要购买
  • amce.sh进行ssl加密
    • 这个是否会导致域名需要重新购买?
    • 是否可以加密子域名?
    • 子域名与二级域名是否冲突?
    • 用了一个旧的垃圾域名,所以暂时不用关注同一个二级域名在多个服务器间同步的问题
  • 面板

TODO问题

  • 配置转订阅地址
    • 编辑客户端模版,限制只在openai时访问外网
    • 编辑服务端模版,限制只接受openai入站

行动路径

  • 购买vps+垃圾域名

    • 套warp+v2ray,理论上不需要高配置只需要大带宽
    • vultr的ip质量低下,大量滥用导致很多ipv4都已被墙,因此生成服务器实例后的第一件事就是去ping.pe检测ip质量。
  • 初始化服务器

    • 开放端口80 443 34728

      • echo "Now, display default allowed ssh ports"
        semanage port -l | grep ssh
        echo "Now, add 34728 to default allowed ssh ports"
        semanage port -a -t ssh_port_t -p tcp 34728
        echo "Now, display default allowed ssh ports"
        semanage port -l | grep ssh
        echo "Now, enable 80 443 34728 at firewalld service"
        sudo firewall-cmd --permanent --list-port
        sudo firewall-cmd --zone=public --add-port=80/tcp --permanent &&
        sudo firewall-cmd --zone=public --add-port=80/udp --permanent &&
        sudo firewall-cmd --zone=public --add-port=443/tcp --permanent &&
        sudo firewall-cmd --zone=public --add-port=443/udp --permanent && 
        sudo firewall-cmd --zone=public --add-port=34728/tcp --permanent && 
        sudo firewall-cmd --zone=public --add-port=34728/udp --permanent && 
        sudo firewall-cmd --reload
        echo "Now, display allowed firewalld ports"
        sudo firewall-cmd --permanent --list-port
        
      • firewall-cmd –zone=public –add-port=80/tcp –permanent && firewall-cmd –zone=public –add-port=80/udp –permanent && firewall-cmd –zone=public –add-port=443/tcp –permanent && firewall-cmd –zone=public –add-port=443/udp –permanent && firewall-cmd –zone=public –add-port=34728/tcp –permanent && firewall-cmd –zone=public –add-port=34728/udp –permanent && sudo firewall-cmd –reload

    • 修改默认ssh端口 34728

    • 删除22端口

    • 支持ssh登录

  • curl chat.openai.com 测试ip本身是否能访问

  • 知晓Cloudflare Global API Key

    • api key,不安全,需要换成api token,否则黑客一旦攻克则cloudflare上所有服务全部暴露在攻击面之下。
  • 安装ngx

    • sudo yum install epel-release
      sudo yum install nginx
      sudo systemctl start nginx
      sudo systemctl status nginx
      
  • bbr加速: https://github.com/ylx2016/Linux-NetSpeed

  • amce支持ssh

    • curl https://get.acme.sh | sh -s [email protected]
      cd && cd .acme.sh
      export CF_Key="xxxxxxxxxxxxxxxxx" && export CF_Email="[email protected]"
      ./acme.sh --issue --nginx --dns dns_cf -d yourdomain.com -d '*.yourdomain.com' --server letsencrypt
      
    • 【问题】好神奇,上面命令执行之后,nginx还没配置证书,访问域名就直接https了,而且泛域名支持了

    • 2021年8月开始,acme开始使用ZeroSSL作为CA服务,导致在centos7直接issue会发生类似于“Can not resolve _eab_id”的报错。通过指定--server letsencrypt来使用let’sencrypt,换回原来的配方。

    • # 安装证书到nginx
      ./acme.sh --install-cert -d yourdomain.com \
      --key-file       /etc/nginx/cert/yourdomain.com/key.pem  \
      --fullchain-file /etc/nginx/cert/yourdomain.com/cert.pem \
      --reloadcmd     "service nginx force-reload"
      
      acme.sh --install-cert -d yourdomain.com \
      --key-file       /root/.acme.sh/yourdomain.com_ecc/yourdomain.com.key  \
      --fullchain-file /root/.acme.sh/yourdomain.com_ecc/fullchain.cer \
      --reloadcmd     "service nginx force-reload"
      
  • 域名解析到服务器

    • 如果用了全新的域名,就暂时不用关注同一个二级域名证书在多个服务器间同步的问题
    • 执行了通配符解析
  • 安装warp

  • 安装x-ui

    • bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)
      
    • x-ui比较傻瓜,蜜罐概率貌似较小

    • x-ui 管理脚本使用方法:
      
      x-ui              - 显示管理菜单 (功能更多)
      x-ui start        - 启动 x-ui 面板
      x-ui stop         - 停止 x-ui 面板
      x-ui restart      - 重启 x-ui 面板
      x-ui status       - 查看 x-ui 状态
      x-ui enable       - 设置 x-ui 开机自启
      x-ui disable      - 取消 x-ui 开机自启
      x-ui log          - 查看 x-ui 日志
      x-ui v2-ui        - 迁移本机器的 v2-ui 账号数据至 x-ui
      x-ui update       - 更新 x-ui 面板
      x-ui install      - 安装 x-ui 面板
      
      x-ui uninstall    - 卸载 x-ui 面板
      
    • x-ui会自动安装了xray

      • 确认xray是否运行
    • 通过x-ui安装最新内核的bbr

      • 检验是否开启成功
    • 反向代理问题

      • 修改x-ui根路径
      • 域名和网站是同一个
      • 添加入站
        • 监听ip: 0.0.0.0
        • 端口随便写?:54321
        • ws
        • ws路径自定义
        • tls关闭
  • 配置nginx

    • 反向代理x-ui面板
  • 安装v2ray

    • ws伪装
    • 开启tls
    • 套cdn
    • 配置分流规则
  • 配置node环境

    • curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash &&
      cd &&
      source ~/.bashrc &&
      nvm install 14.20.1 &&
      nvm use 14.20.1 &&
      npm install pm2 -g &&
      npm install yarn -g
      
  • 配置xray分流策略

    • 一部分受限制,一部分全量翻。合理利用xray规则,配合ngxin就可以实现。

    • 受限部分

      • xui配置入站

        • ws路径:/hello
        • 端口:20237
      • nginx

        • location /hello { # 与x-ui中的ws路径保持一致
                    proxy_redirect off;
                    proxy_pass http://127.0.0.1:20237;
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";
                    proxy_set_header Host $host;
                    # Show real IP in v2ray access.log
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          }
          
    • 全量部分

      • xui配置入站

        • ws路径:/hithere
        • 端口:20238
      • nginx

        • location /hithere { # 与x-ui中的ws路径保持一致
                    proxy_redirect off;
                    proxy_pass http://127.0.0.1:20238;
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";
                    proxy_set_header Host $host;
                    # Show real IP in v2ray access.log
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          }
          
    • xray配置增加路由规则,根据坚挺端口判断

  • 线上订阅,不建议用开源的sub-web。x-ui的入站只提供二维码,不提供订阅地址,而clash系列客户端最简单的导入方式是订阅。这种服务随便写个express脚本都能解决,用开源的反而不安全。找一个现成的规则模版,用yaml解析后,修改一下配置对象,然后再解析回yaml。

nginx问题:

Ref:

IP质量,ChinaMobile影响不会很大,CN2基本上也用不起,主要看China Unicom和Telecom,是可以接受的:

套CDN: