自建dns教程 DoH服务搭建 使用AdGuard Home自行搭建doh服务

本文分享一下使用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服务-管理界面端口设置

配置doh服务

自建doh-配置doh-adguard加密设置

真实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
喜欢就支持一下吧
点赞2 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容