你是否遇到过:
- 用户反馈明明网站没问题却打不开?
- 某些地区访问你的站点会跳转到奇怪的页面?
- 使用第三方DNS时经常加载异常或速度不稳定?
这些问题,很多时候并不是你网站的错,而是 DNS 被劫持或污染了。
在传统DNS协议中,查询是明文传输的,任何中间节点都可能拦截、修改甚至伪造响应。这在部分网络环境下非常常见,尤其是公共Wi-Fi、运营商出口节点、甚至部分CDN中转。
为了解决这个问题,越来越多网站与技术团队选择部署 DoH(DNS over HTTPS),让DNS查询变成加密的HTTPS流量,从而有效防止中间人攻击、审查和篡改。
一、什么是 DoH?为什么它比传统DNS更安全?
DoH(DNS over HTTPS)是一种将DNS请求通过HTTPS协议发送的方式,具有以下特点:
特性 | 对比传统DNS的优势 |
---|---|
加密传输 | 请求内容无法被中间人查看或篡改 |
不走53端口 | 难以被简单封锁或探测 |
可自定义服务端 | 用户可搭建自己的 DoH Resolver |
可嵌入Web服务 | 与已有HTTPS服务共享端口,部署更灵活 |
目前主流浏览器(Chrome、Firefox)和系统(Android、Windows 11)均支持 DoH 模式,部分已默认启用。
二、自建 DoH 服务方案选型
你可以选择以下三种方式来自建加密DNS服务:
方案 | 说明 | 推荐场景 |
---|---|---|
Cloudflare DNS + Nginx 转发 | 使用Cloudflare作为上游,Nginx转发DoH请求 | 快速搭建、轻量易管控 |
CoreDNS + DoH 插件 | 原生DNS服务器,带DoH输出能力 | 控制力强,适合复杂业务需求 |
dnsdist + PowerDNS | 企业级高性能DNS方案 | 大规模访问或DNS集群部署场景 |
本教程以 Cloudflare 提供的公共DNS为上游,搭配 Nginx 实现一个简洁易用的 DoH 接入层。
三、部署步骤:用 Nginx 快速搭建一个 DoH 转发服务
✅ Step 1:准备工作
- 一台服务器(VPS即可)
- 安装好 Nginx
- 域名 + SSL证书(建议使用 Cloudflare / Let’s Encrypt)
✅ Step 2:配置Nginx DoH转发
nginxserver {
listen 443 ssl http2;
server_name doh.yourdomain.com;
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/private/privkey.pem;
location /dns-query {
proxy_pass https://1.1.1.1/dns-query;
proxy_set_header Host 1.1.1.1;
proxy_ssl_server_name on;
proxy_pass_request_headers on;
add_header Access-Control-Allow-Origin *;
add_header Content-Type application/dns-message;
}
}
✅ Step 3:验证服务是否正常
使用命令行验证:
bashcurl -H 'accept: application/dns-message' \
'https://doh.yourdomain.com/dns-query?dns=BASE64_ENCODED_QUERY'
可使用工具如 dnscrypt-proxy 或在浏览器中设置自定义 DoH 服务地址测试。
四、将 DoH 应用于你的设备或用户浏览器
✅ 在 Chrome 浏览器中设置 DoH
地址栏输入:
arduinochrome://settings/security
→ 找到“使用安全DNS”,启用 → 输入你的 DoH 服务地址
示例格式:
arduinohttps://doh.yourdomain.com/dns-query
✅ 在本地系统中设置全局 DoH(适用于自用或局域网共享)
推荐搭配 dnscrypt-proxy
工具,将你的自建服务写入配置文件,实现全局 DNS 加密。
五、进阶优化建议
项目 | 建议 |
---|---|
上游解析 | 推荐使用 Cloudflare 或 Google DNS,保障稳定性 |
缓存策略 | 使用本地 DNS 缓存工具减少查询次数 |
日志控制 | 禁止记录用户请求,保护隐私 |
HTTPS加速 | 启用HTTP/2、开启gzip减少延迟 |
自动更新证书 | 使用certbot + cron实现免维护部署 |
六、适用场景推荐
- 部署海外网站节点时避免国内DNS劫持问题
- 用户端访问需保障隐私(如内网办公、教育场景)
- 防止中间人攻击、钓鱼DNS劫持、SSL伪造提示等问题
- 做为自建加密DNS服务出口,结合广告过滤(如配合Pi-hole)
通过自建DoH服务,你不仅保护了自己服务器域名的访问链路,还为用户提供了更私密、可信、稳定的DNS解析体验。
如果你希望进一步强化安全性,还可以加入 DNSSEC 验证、ECS 地理感知等策略。
你的域名解析,不该被随意篡改。是时候让DNS也具备和HTTPS一样的防护等级了。