如何部署私人 DoH 服务器

如何部署私人 DoH 服务器

DNS

DNS 是一个古老的协议,在互联网诞生之初的纯真年代便已出现,自然也有有古老协议的通病:不设防,或者说不安全。为了解决明文传输的问题,加密 DNS 的方案有很多,DoH 是其中之一,DoH 全称是 DNS Queries over HTTPS,其协议设计参考 RFC8484

在正常国家应该不太需要考虑自己部署 DoH 服务,但是中国大陆存在的 DNS 污染以及对国外公共 DoH 服务器的阻断导致了本文描述的这个需求。我的使用场景主要是作为 Adguard Home 的上游 DNS,提供无污染的/加密的境外服务域名解析。本文采用的技术方案是 coredns,下面简述步骤。

  1. 需要一台境外服务器,一个域名[^1],建议使用 acme.sh 项目申请 https 证书

  2. coredns 官网下载二进制文件,配置文件如下,注意该配置文件只启用了 DoH 服务。

    https://.:443 {
        tls ./acme/fullchain.pem ./acme/key.pem ./acme/ca.pem
        whoami
        forward . tls://1.1.1.1
        log
        errors
    }
    
  3. 使用 DoH 测试工具 https://github.com/curl/doh 进行测试

当然你也可以采用 docker 方式部署。

参考链接

脚注

  • [^1] Cloudflare 的 DoH 地址是 https://1.1.1.1 ,自然是可能给 IP 颁发 https 证书的,只是更罕见,限制更多。至少 Let’s Encrypt 不允许。