Skip to content

使用Xray-core进行MitM,强制ECH直连Cloudflare DoH,一分钟搭建本地DoH服务,可自选DNS解析地 #1

@RememberOurPromise

Description

@RememberOurPromise

ECH + DoH

接上次提到的发现:CF 的边缘可以处理任意 CF 站点的 ECH 握手,即便 CF 账户面板上关闭了 ECH ,仍可被强制使用。

那么 cloudflare-dns.com 也只是打开小黄云的网站,因此我们使用 Xray-core MitM一下,强制启用 ECH即可。

通过优选 IP 自选 DNS 解析地

使用 CF 的 DoH 服务,客户端也是先连到 CF 的边缘,再由 CF 内部转到同一 CF POP 的递归 DNS 服务器。

访问 Anycast 的 1.1.1.1 可能被路由到延迟高的 CF POP,CF 的 DoH 域名解析出的 Anycast IP 也存在同样问题。

为此可以优选 CF IP,指定目标地区对应的 CF POP,避免被路由到远端节点。

使用著名的滥用工具 CloudflareSpeedTest ,这次就不用跑测速了,只测延迟以及通过 colo 参数筛选 CF POP。

常见且延迟较低的 colo 有:HKG(香港)、NRT(东京)、SIN(新加坡)、SJC(圣何塞)、LAX(洛杉矶)。

通过扫描得到的 IP,即可连上该POP的DNS递归服务器进行解析,只要能扫到的colo,就能自选作为解析地。

优点:

1.无DNS污染。

2.使用ECH,直连穿墙,延迟最低。

3.DoH 查询流量可混入普通 ECH 的 HTTPS 流量,更隐蔽(在不考虑流量指纹的情况下)。

4.可根据自选 IP ,选择延迟最低的递归 DNS 服务器;有需要时可灵活指定 DNS 解析地。

缺点:

1.遗憾的是,Cloudflare的DNS不支持EDNS Client Subnet,而Cloudflare和科赋锐中间隔着太平洋,没有中国大陆的colo。

2.需要自签 CA 证书并导入为受信任根证书;使用结束后记得吊销证书并销毁私钥。

配置与使用方法

1.创建证书xray tls cert -ca -file=mycert

2.手动导入mycert.crt,到受信任的根证书颁发机构

3.修改hosts文件:
(用于跳过解析连到本机xray mitm的443端口,涵盖绝大部分浏览器和客户端使用的CF DoH,浏览器直接开启安全DNS并选择Cloudflare即可,不用手动填DoH URL。)

127.0.0.1 cloudflare-dns.com
127.0.0.1 one.one.one.one
127.0.0.1 chrome.cloudflare-dns.com
127.0.0.1 mozilla.cloudflare-dns.com
127.0.0.1 azure.cloudflare-dns.com
127.0.0.1 opera.cloudflare-dns.com
127.0.0.1 odoh.cloudflare-dns.com
127.0.0.1 1dot1dot1dot1.cloudflare-dns.com
127.0.0.1 security.cloudflare-dns.com
127.0.0.1 family.cloudflare-dns.com

填写echConfigList方法

1.选取的域名,首先不能被DNS污染,其次得可以正常获取HTTPS记录中ECH config值
例如:

gitlab.io
ai.com
www.nslookup.io
esm.sh
cloudflare.dev
research.cloudflare.com
pq.cloudflareresearch.com
cloudflarechallenge.com

欢迎补充

2.选取的DNS解析方式和DNS服务器,没有限制,能够解析上述域名并可以获取ECH config值即可,udp,国内DoH,都可以,因为是fronting,解析的不是你真实访问的网站

配置文件:

{
  "log": {
    "loglevel": "none",
    "dnsLog": false,
    "access": "none"
  },
  "inbounds": [
    {
      "protocol": "tunnel",
      "listen": "127.0.0.1",
      "port": 443,
      "settings": {
        "port": 443,
        "network": "tcp,udp",
        "followRedirect": true
      },
      "streamSettings": {
        "security": "tls",
        "tlsSettings": {
          "alpn": ["h3", "h2", "http/1.1"], //暂且这么填,虽然没效果,但CFDoH是支持h3
          "certificates": [
            {
              "usage": "issue",
              "certificateFile": "mycert.crt", //自签CA证书,放到指定位置
              "keyFile": "mycert.key" //自签CA私钥,放到指定位置
            }
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {
      "redirect": "###########################:443",   //填写自选IP,注意ipv6加方括号
        "domainStrategy": "ForceIP"
      },
      "streamSettings": {
        "security": "tls",
        "tlsSettings": {
          "serverName": "fromMitM",
          "verifyPeerCertInNames": ["fromMitM"],
          "alpn": ["fromMitM"],
          "allowInsecure": false,
          "echConfigList": "ai.com+udp://9.9.9.9",  //参考echConfigList填写方法
          "echForceQuery": "full",
          "fingerprint": "chrome"
        }
      }
    }
  ]
}

一个inbound,一个outbound,完了,就是上次ECH fronting的配置的一部分,单独只做DoH服务

这下压力全部给到cloudflare-ech.com这个outter SNI上了。。。。。

欢迎转载传播改进,一切随意,无需注明出处XD

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions