记录下DoH和ECH配置

做个备忘录,记录下主力设备 Win11、安卓、IOS、路由器、浏览器 配置 DoH(DNS-over HTTPS) 的过程。以及浏览器开启 Encrypted Client Hello (Secure SNI) 。

国内的DNS服务商中,目前只有阿里和腾讯支持ipv4和ipv6的DoH。

测试DNS是否支持DoH:

curl -H 'accept: application/dns-json' 'https://doh.pub/dns-query?name=baidu.com&type=A'
curl -H 'accept: application/dns-json' 'https://doh.pub/dns-query?name=baidu.com&type=AAAA'

或者也可以通过dig AAAA dns.alidns.comdig A dns.alidns.com测试。

Windows11

设置 - 网络和Internet - WLAN - 硬件属性 - DNS服务器分配

通过在 PowerShell 中执行 Get-DnsClientDohServerAddress 或者在 Windows 终端 netsh dns show encryption 就可以查看目前已有的 DoH 配置

  • 使用 Get-DnsClientDohServerAddress 查看系统中已有的 DoH 命令(默认即是 Win11 原生支持的DoH服务):
ServerAddress        AllowFallbackToUdp AutoUpgrade DohTemplate
-------------        ------------------ ----------- -----------
149.112.112.112      False              False       https://dns.quad9.net/dns-query
9.9.9.9              False              False       https://dns.quad9.net/dns-query
8.8.8.8              False              False       https://dns.google/dns-query
8.8.4.4              False              False       https://dns.google/dns-query
1.1.1.1              False              False       https://cloudflare-dns.com/dns-query
1.0.0.1              False              False       https://cloudflare-dns.com/dns-query
2001:4860:4860::8844 False              False       https://dns.google/dns-query
2001:4860:4860::8888 False              False       https://dns.google/dns-query
2606:4700:4700::1001 False              False       https://cloudflare-dns.com/dns-query
2606:4700:4700::1111 False              False       https://cloudflare-dns.com/dns-query
2620:fe::9           False              False       https://dns.quad9.net/dns-query
2620:fe::fe          False              False       https://dns.quad9.net/dns-query
2620:fe::fe:9        False              False       https://dns.quad9.net/dns-query

查看系统中已有的 DoH 命令 netsh dns show encryption (PowerShell) Get-DnsClientDohServerAddress

  • 添加自定义DoH服务配置
netsh dns add encryption server=[resolver-IP-address] dohtemplate=[resolver-DoH-template] autoupgrade=no udpfallback=no

(PowerShell)

Add-DnsClientDohServerAddress -ServerAddress '<resolver-IP-address>' -DohTemplate '<resolver-DoH-template>' -AllowFallbackToUdp $False -AutoUpgrade $False

autoupgrade 是 自动升级,意思是当使用这个dns的时会自动启用DoH

另外也可以直接去编辑注册表添加或是用组策略

用 netsh 举例 (添加的时候需要管理员权限

# Alidns
netsh dns add encryption server=223.5.5.5 dohtemplate=https://dns.alidns.com/dns-query autoupgrade=yes udpfallback=no
netsh dns add encryption server=2400:3200::1 dohtemplate=https://dns.alidns.com/dns-query autoupgrade=yes udpfallback=no
# Tencent
netsh dns add encryption server=119.29.29.29 dohtemplate=https://doh.pub/dns-query autoupgrade=yes udpfallback=no
netsh dns add encryption server=2402:4e00:: dohtemplate=https://doh.pub/dns-query autoupgrade=yes udpfallback=no
# Quad101
netsh dns add encryption server=101.101.101.101 dohtemplate=https://dns.twnic.tw/dns-query autoupgrade=yes udpfallback=no
netsh dns add encryption server=2001:de4::101 dohtemplate=https://dns.twnic.tw/dns-query autoupgrade=yes udpfallback=no

Android

Android目前仅支持配置DoT,不支持配置DoH。系统是一加的Oxygen OS 11 (Android 11)

WLAN和互联网 - 私人DNS - 私人DNS提供商主机名称

使用alidns的话填 dns.alidns.com

IOS

通过添加配置描述文件的方式启用。

描述文件可以同时设置 WiFi 和蜂窝数据的 DNS

https://github.com/paulmillr/encrypted-dns

直接下载想要的那个描述文件.mobileconfig即可

可能是因为UUID相同的原因导致配置文件不能共存

IOS15 在 设置 - 通用 - 设备管理 - DNS 启用

路由器

梅林: WAN - DNS Privacy Protocol

老毛子(Padavan)身边暂时没有

另外 SmartDNS 直接添加即可

浏览器

Chrome: 设置 - 隐私设置和安全性 - 安全 - 使用安全DNS

Firefox: 设置 - 常规 - 网络设置 - 设置 - 启用基于 HTTPS 的 DNS

Ctrl + R 正常重加载

Ctrl + Shift + R 硬性重加载

按下F12进入调试后,右键地址栏左侧的刷新按钮,会出现 清空缓存并硬性重加载 。

检测是否正在使用DOH

https://www.cloudflare.com/zh-cn/ssl/encrypted-sni/

https://1.1.1.1/help/

https://crypto.cloudflare.com/cdn-cgi/trace/

Cloudflare Workers 自部署反代 1.1.1.1 的 DoH

为了避免国内的主动扫描探测,最好要配置成:DoH + 非标路径 + 客户端白名单(可选)的形式。也就是说要用/<random_str>/<secret>,不要直接用默认的/dns-query

国内目前53(UDP)和 853(DoT)都是重点关注对象,用国外服务器搭建也会被抢答或者阻断,所以目前只推荐使用 443(DoH 或 DoQ) 的方式连接。

https://github.com/tina-hello/doh-cf-workers

ECH

ECH 全称是 Encrypted Client Hello ,即安全 SNI。主要用于增强互联网连接的隐私保护。ECH 的核心是确保主机名不被暴露给互联网服务提供商、网络提供商,以及其它有能力监听网络流量的实体。

Chrome

开启ECH: chrome://flags/#encrypted-client-hello 将 Encrypted ClientHello 设置为Enabled

Firefox

开启ECH: 在 about:config 搜索条目 network.dns.echconfig.enablednetwork.dns.use_https_rr_as_altsvc,将它们的设定改为 true 即可。

about:config 中将 network.trr.mode设置为 2(默认是0),即优先使用用 TRR(也就是我们的 DNS over HTTPS),在解析失败时使用常规方式。也可以设置成3,强制 Firefox 使用 DoH。参见 https://wiki.mozilla.org/Trusted_Recursive_Resolver