由于 Cloudflare worker 的 vless 存在无法访问 cloudflare 托管页面的缺陷,于是找了另外一种代理方式。

基本思路

本地使用中间人攻击的思路,将 HTTPS 代理到自己的服务器上,然后通过 Lambda 代理请求并返回。

为什么这么复杂?

  • 单纯的 HTTP 代理,即 Connect Tunnel 方案,无法做协议转换,比如:Lambda 的 API Gateway 不支持 Connect 请求。
  • Connect Tunnel 无法解密相关具体流量,且有诸多限制,比如:只能 IP(域名) + Port,API Gateway 无法指定到根路径。

    为什么用 AWS 的 Lambda ?

  • 有免费额度
  • 大厂产品,较为稳定(尽可能采用大厂,小厂的免费产品也很多,但很容易倒闭,封锁什么的)
  • AWS 的 lambda 能直接访问,Google Cluod 和 Cloudflare worker 无法直接访问

实现方案

  • HTTPS 代理使用现成的代理工具,whistle
    • 通过安装本地 CA 证书,whistle 可以将浏览器代理的 HTTPS 流量,解密转成本地服务的可以识别的流量请求
    • 此处为本地中间人代理,无相关安全问题
    • 需要用到 whistle 脚本,参考 代码
  • 本地服务器,将相关请求,包装为与 Lambda 可以是被的协议 JSON,然后 HTTPS 请求给 Lambda
    • 即把 headers、method、body 封装为 json,参考 代码
  • Lambda 函数,获取请求 JSON,发起请求,然后返回相关数据即可。
    • Lambda 获取 json 中的相关参数,发起请求并发挥,参考 代码

    Image

References