本文分享一下使用AdGuard Home自行搭建doh服务的过程。自建dns服务在保护隐私、解决dns污染等方面能起到一定作用。这里介绍的是通过AdGuard Home,使用docker compose方式一键搭建doh服务的过程。
自建dns过程
- docker compose运行adguard服务;
- 配置网站nginx反向代理
- 测试dns服务;
运行adguard服务
使用docker compose可以很方便的搭建adguard home环境,compose.yaml文件内容如下:
services:
adguardhome:
image: adguard/adguardhome
container_name: adguardhome
restart: unless-stopped
volumes:
- /root/adguard-data/workdir:/opt/adguardhome/work
- /root/adguard-data/confdir:/opt/adguardhome/conf
- /www/server/panel/vhost/cert:/opt/adguardhome/cert
ports:
- "653:53/tcp"
- "653:53/udp"
- "67:67/udp"
- "68:68/udp"
- "880:80/tcp"
- "8443:443/tcp"
- "8443:443/udp"
- "3000:3000/tcp"
- "853:853/tcp"
- "853:853/udp"
- "5443:5443/tcp"
- "5443:5443/udp"
- "6060:6060/tcp"
因为这里使用nginx反向代理的方式使用,所以对官方文档中使用的端口做了更改。
- 653端口:debian系统默认dns会占用53端口,这里使用doh方式使用dns服务,此端口没有用到;
- 8443端口:doh服务使用的端口,官方是443端口,这里通过反向代理8443来使用;
- 3000端口:管理后台界面入口端口;
目录映射时需要读取证书路径,所有映射此路径,具体位置针对自己的情形修改:
- /www/server/panel/vhost/cert:/opt/adguardhome/cert
修改完配置文件,执行启动命令:
docker compose up -d
配置反向代理
完整反向代理部分的配置如下:
#PROXY-START/
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
}
# DoH 服务接口
location /dns-query {
proxy_pass https://127.0.0.1:8443/dns-query;
# 保持客户端原始请求头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 使用 HTTP/1.1,但去掉非必须的 Upgrade 头(除非使用 WebSocket)
proxy_http_version 1.1;
# 忽略后端自签名/内部证书校验
proxy_ssl_verify off;
proxy_ssl_server_name on;
# DoH 必须关闭缓冲以实现实时流式传输
proxy_buffering off;
}
#PROXY-END/
访问管理界面
浏览器输入网址: https://www.your-domain.com,进入管理界面,管理界面的端口配置为反向代理的3000端口,其他默认:

配置doh服务

真实ip获取配置修改
这里配置了反向代理,adguard home默认拒绝了其他代理,这样会导致我们在管理后台“查询”日志那里看到的不是客户端的真实 IP,而是 Docker 网桥(docker0 / custom bridge)的网关 IP 。这里需要增加一行:
trusted_proxies:
- 127.0.0.0/8
- ::1/128
- 172.16.0.0/12
测试doh效果
终端命令测试
在终端执行:
kdig @your-domain.com +https=/random-string google.com
这里的random-string请替换为nginx反向代理部分配置的路径,如果你就是默认的dns-query,直接如下命令就可以,如果不是就替换为自己的路径:
kdig @your-domain.com +https baidu.com
浏览器测试
在chrome浏览器,设置->隐私安全->安全那里,填入自定义dns供应商,也就是你的网址。访问google等网站,看看adguard home后台查询日志那里有没有记录。
参考文章:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END




![Vercel网站国内加速 – Cloudflare IP优选实现国内Vercel网站极致加速[小白图文教程]-创世AI](https://www.aichuangshi.com/wp-content/uploads/2025/07/Vercel网站国内加速-–-Cloudflare-IP优选实现国内Vercel网站极致加速小白图文教程.png)




暂无评论内容