云端Portainer部署AdGuard Home通过Nginx Proxy Manager实现DoH配置咨询
基于Nginx Proxy Manager + AdGuard Home实现公网DoH服务部署方案
前置准备
- 提前解析一个DoH专用域名(例:
doh.yourdomain.com)到云服务器公网IP - 确认Nginx Proxy Manager(下称NPM)已成功申请该域名的HTTPS证书,建议开启自动续期
- AdGuard Home需和NPM部署在同一个Docker自定义网桥下,保障内部网络互通
第一步:Portainer部署AdGuard Home实例
无需将53端口映射到公网,仅暴露容器端口到内部Docker网络即可,在Portainer中用Stack部署时使用以下Docker Compose配置:
version: "3" services: adguardhome: image: adguard/adguardhome container_name: adguardhome restart: unless-stopped volumes: # 自行替换为你的持久化存储路径 - ./adguard/work:/opt/adguardhome/work - ./adguard/conf:/opt/adguardhome/conf # 仅暴露端口到Docker网络,不绑定公网主机端口 expose: - "3000" # 初始安装配置端口 - "80" # 管理界面HTTP端口 - "443" # DoH服务默认端口 networks: # 替换为NPM所在的自定义Docker网桥名称 - npm-shared networks: npm-shared: external: true
部署完成后临时在Portainer中将AdGuard的3000端口映射到云服务器本地127.0.0.1:3000,通过SSH隧道访问http://127.0.0.1:3000完成初始化配置,配置完成后删除临时端口映射避免暴露。
注意:AdGuard Home的加密设置无需单独配置证书,HTTPS证书统一由NPM管理,内部Docker网络通信无需额外加密
第二步:NPM配置DoH流量反代
进入NPM管理后台新建代理主机,按以下要求配置:
- Details页配置
- Domain Names填写提前解析的DoH专用域名
- Scheme选择
http - Forward Hostname/IP填写AdGuard Home的容器名(同网桥下可直接通过容器名解析,例:
adguardhome) - Forward Port填写
80 - 勾选
Block Common Exploits、Websockets Support
- SSL页配置
- 选择该域名对应的HTTPS证书
- 勾选
Force SSL、HTTP/2 Support、HSTS Enabled
- Custom Locations页配置
新增路径规则:- 路径填写
/dns-query - 转发地址填写
http://adguardhome/dns-query - 点击配置齿轮,添加以下自定义Nginx规则:
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; proxy_pass_request_headers on; # 兼容GET/POST两种DoH请求方式 proxy_method GET; proxy_method POST;
- 路径填写
保存配置等待生效即可。
第三步:客户端配置验证
所有客户端直接配置DoH地址为https://你的DoH专用域名/dns-query即可使用,无需安装VPN,所有DNS请求均走HTTPS 443端口传输,无需开放53端口到公网。
配置完成后可在AdGuard Home的查询日志中看到客户端的DNS请求记录,即为配置生效。
可选配置:公网访问AdGuard管理界面
如需公网访问AdGuard后台,可单独新建NPM代理规则,转发到AdGuard的80端口,绑定独立二级域名后开启HTTPS和访问权限校验即可。
内容的提问来源于stack exchange,提问作者Rishi
相关产品推荐
相关产品推荐

