起因
GFW看了直呼内行😂

一直都是vless+xhttp套CDN+优选IP,直到SNI被阻断。

于是开始使用ECH对SNI加密。
什么是ECH
ECH 含义是 Encrypted Client Hello。它是传输层安全(TLS)背景下的协议扩展。ECH加密部分握手过程,并掩盖用于协商TLS会话的服务器名称指示(SNI)。这意味着每当用户访问启用ECH的Cloudflare网站时,中介机构可以看到你正在访问Cloudflare上的网站,但无法确定是哪一个。
简而言之就是加密后的 Client Hello
未加密的Client Hello包TLS部分servername会显示建立连接的域名

加密后的Client Hello包TLS部分servername只显示cloudflare-ech.com

ECH使用条件:
TLS 1.3
DOH(支持https解析)
CDN (支持ECH)
教程
这里以Cloudflare为例,不建议滥用,仅提供学习和交流。
Cloudflare开启ECH
cf官方文档中提到了开启ECH的方法,但是事实却是没有这个按钮

问题不大,这里可以使用API开启Cloudflare ECH的方法(针对单个域名区域)
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/域名区域ID/settings/ech" \
-H "X-Auth-Email: 你的注册邮箱" \
-H "X-Auth-Key: 你的Global_API_Key" \
-H "Content-Type: application/json" \
--data '{"value": "on"}'返回 success后为开启成功。
验证ECH是否开启
使用在线dig工具验证:工具
输入套CDN的IP域名使用https解析,查看下发是否存在ech公钥字段,存在ech为开启成功

开启TLS1.3
Cloudflare 域名页面下 SSL/TLS 中的 边缘证书 开启TLS 1.3

客户端配置
客户端这里以mihomo内核的Clash Verge为例
在mihomo官方文档中介绍了,ech-opts 字段
上述已经开启了https的解析,并且公钥在解析中,这里ech-opts字段只需要enable: true即可,其他的字段可以不写

DOH服务器选择
DOH服务器是必须的,否则无法获取公钥对Client Hello包中的ServerName字段进行加密。
推荐自建更安全,如果为方便使用,阿里云和腾讯云的DOH即可,前提是该DOH必须支持https解析
# 腾讯云
https://doh.pub/dns-query
#阿里云
https://dns.alidns.com/dns-query如何检测DOH服务器是否支持https解析
#安装工具
apt install dnsutils -y
#验证域名
dig @223.5.5.5 域名 https上述223.5.5.5为public1.alidns.com的解析结果
存在ech返回,即为DOH支持https解析。

clash verge DOH配置
过于基础不再解释

验证
配置完成后使用套了CDN并且开启了ECH的节点,使用wireshark抓包查看client hello包的tls包头下的servername字段是否为cloudflare-ech.com即可

评论