Android 系统设置私密 DNS

Android 系统设置私密 DNS

💡 原文中文,约9900字,阅读约需24分钟。
📝

内容提要

本文介绍了作者为安卓用户重新设计的 DNS over HTTPS (DoH) 服务 ZNS,解决了安卓系统无法直接使用的问题。通过将用户标识放入子域名中,支持 DoH 和 DNS over TLS (DoT) 协议,并分享了申请泛域名证书的过程及安全措施,最终实现了 ZNS 服务的正常运行。

🎯

关键要点

  • 作者推出了自建的 DNS over HTTPS (DoH) 服务 ZNS,解决安卓用户无法直接使用的问题。
  • 为了支持安卓,用户标识被放入子域名中,形式为 https://${TOKEN}.zns.lehu.in/dns-query。
  • 申请泛域名证书需要使用 DNS-01 challenge,存在安全风险,因此在安全设备上申请并上传证书。
  • 使用 acme.sh 脚本申请泛域名证书,并通过 rsync 同步到 ZNS 服务器。
  • ZNS 服务实现了自动加载 SSL 证书的功能,确保证书更新时不会影响服务。
  • 安卓系统默认不支持 DoH,只有在白名单中的私密 DNS 才会使用 DoH,其他则使用 DoT。
  • 实现 DoT 协议的处理逻辑,监听 853 端口并将请求转换为 DoH 请求处理。
  • ZNS 支持 DDR(RFC9462),通过 SVCB 记录告知客户端支持的通信协议。
  • 希望安卓能够支持通过 DoT 查询 DDR 的 SVCB 记录,以便自动选择更优的协议。

延伸问答

ZNS 服务是什么?

ZNS 服务是一个自建的 DNS over HTTPS (DoH) 服务,旨在解决安卓用户无法直接使用 DoH 的问题。

如何在安卓系统中设置私密 DNS?

在安卓系统中设置私密 DNS 时,需要输入格式为 https://${TOKEN}.zns.lehu.in/dns-query 的域名。

申请泛域名证书的过程是怎样的?

申请泛域名证书需要使用 DNS-01 challenge,通过提供域名管理 API 创建和删除特定 TXT 记录来验证域名所有权。

安卓系统为什么不支持 DoH?

安卓系统默认不支持 DoH,只有在白名单中的私密 DNS 才会使用 DoH,其他则使用 DoT 协议。

ZNS 如何处理 DoT 请求?

ZNS 通过监听 853 端口,将 DoT 请求转换为 DoH 请求处理,并将返回内容转换为 DoT 数据返回给客户端。

DDR 和 SVCB 记录有什么关系?

DDR(RFC9462)使用 SVCB 记录来告知客户端当前递归解析服务器支持的通信协议,以便客户端选择合适的协议。

➡️

继续阅读