DNS-Blocklists证书配置:启用DNS over HTTPS的完整步骤
什么是DNS over HTTPS(DoH)
DNS over HTTPS(DoH,DNS加密传输协议)通过HTTPS加密DNS查询,防止网络运营商或第三方监听、篡改您的域名解析请求。传统DNS查询(端口53)使用明文传输,存在隐私泄露和劫持风险,而DoH将DNS查询伪装成普通HTTPS流量(端口443),显著提升网络隐私安全性。
为什么需要DoH证书配置
- 隐私保护:防止ISP跟踪您的浏览记录
- 防劫持:避免DNS查询被恶意篡改导致重定向
- 合规要求:满足企业或组织的数据安全规范
- 绕过限制:规避部分网络对传统DNS的封锁
准备工作
在开始配置前,请确保:
- 已安装DNS服务器(如AdGuard Home、Unbound或Pi-hole)
- 拥有域名(用于证书申请)
- 服务器开放443端口(HTTPS默认端口)
- 已下载项目证书文件:adblock/doh.txt
配置步骤
1. 选择合适的DoH证书文件
项目提供多种格式的DoH配置文件,根据您的DNS服务器类型选择:
| 服务器类型 | 推荐文件 | 路径 |
|---|---|---|
| AdGuard Home | doh.txt | adblock/doh.txt |
| DNSMasq | doh.txt | dnsmasq/doh.txt |
| RPZ兼容服务器 | doh.txt | rpz/doh.txt |
| 域名列表 | doh.txt | domains/doh.txt |
2. 申请SSL/TLS证书
以Let's Encrypt为例,使用Certbot申请免费证书:
# 安装Certbot
sudo apt install certbot python3-certbot-nginx
# 申请证书(替换example.com为您的域名)
sudo certbot certonly --nginx -d dns.example.com
证书文件默认保存路径:
- 私钥:
/etc/letsencrypt/live/dns.example.com/privkey.pem - 证书链:
/etc/letsencrypt/live/dns.example.com/fullchain.pem
3. 配置AdGuard Home的DoH服务
- 登录AdGuard Home管理界面(默认端口3000)
- 进入设置 > DNS设置 > 加密设置
- 启用DNS over HTTPS服务器
- 填写证书信息:
- 服务器名称:
dns.example.com - 证书路径:
/etc/letsencrypt/live/dns.example.com/fullchain.pem - 私钥路径:
/etc/letsencrypt/live/dns.example.com/privkey.pem
- 服务器名称:
- 上传项目DoH规则文件:adblock/doh.txt
- 保存设置并重启服务
4. 配置客户端使用DoH
Windows 10/11设置
- 打开设置 > 网络和Internet > Wi-Fi/以太网
- 点击当前网络连接 > 硬件属性
- 下滑找到DNS设置 > 点击编辑
- 选择手动 > 启用IPv4
- 设置首选DNS:
- 首选DNS加密:
加密(HTTPS) - 首选DNS:
https://dns.example.com/dns-query
- 首选DNS加密:
- 保存设置
Android设置
- 安装AdGuard应用并打开
- 进入设置 > DNS保护 > DNS服务器
- 点击添加自定义DNS服务器
- 输入:
- 服务器名称:
自定义DoH - DoH URL:
https://dns.example.com/dns-query
- 服务器名称:
- 启用该服务器并验证连接
验证DoH配置是否生效
使用以下方法确认配置成功:
命令行验证
# 使用curl测试DoH查询
curl -H 'accept: application/dns-json' 'https://dns.example.com/dns-query?name=example.com&type=A'
在线检测工具
访问 DNS Leak Test 进行扩展测试,确认显示的DNS服务器为您配置的DoH服务器,而非ISP默认服务器。
日志监控
查看DNS服务器日志,确认存在DoH请求记录:
# AdGuard Home日志示例
tail -f /var/log/AdGuardHome/query.log | grep "doh"
常见问题解决
证书错误
问题:客户端提示证书无效
解决:确保证书包含完整链(fullchain.pem),且域名与证书匹配。可使用以下命令检查证书:
openssl x509 -in /etc/letsencrypt/live/dns.example.com/cert.pem -noout -text
连接超时
问题:DoH查询超时
解决:
- 检查443端口是否开放:
telnet dns.example.com 443 - 确认防火墙规则允许HTTPS流量
- 验证DoH URL格式是否正确(需包含
/dns-query路径)
性能下降
问题:启用DoH后解析速度变慢
解决:
- 选择距离更近的DNS服务器
- 启用缓存:在AdGuard Home中设置缓存大小为10000条
- 检查服务器资源使用情况,确保CPU/内存充足
高级配置:自动更新证书
Let's Encrypt证书有效期为90天,建议配置自动续期:
# 添加crontab任务
crontab -e
# 添加以下行(每天凌晨3点执行续期)
0 3 * * * /usr/bin/certbot renew --quiet --renew-hook "/usr/bin/systemctl restart adguardhome"
总结
通过本文步骤,您已成功配置基于DNS-Blocklists项目的DoH证书服务。关键要点:
- 选择正确的证书文件:adblock/doh.txt
- 确保证书路径和权限正确
- 客户端配置时使用完整的DoH URL
- 定期验证配置并更新证书
相关资源
- 项目文档:README.md
- DoH规则文件:adblock/doh.txt
- DNS服务器配置示例:dnsmasq/doh.txt
- 证书自动更新脚本:share/
若配置过程中遇到问题,可提交issue至项目仓库或参考项目FAQ获取帮助。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



