Life is fantastic

Life

隐匿攻防:通过 Nginx 混淆与路径鉴权加固 AdGuard Home服务

2026-05-01

一、引言:为什么你的 DNS 服务会被“盯上”?

自建 AdGuard Home (ADGH) 开启 DNS over HTTPS (DoH) 后,默认路径通常是 /dns-query。这产生两个致命风险:

  1. 特征探测:扫描器通过扫描常用 DoH 路径,可以将你的 IP 标记为公共 DNS 节点。

  2. 滥用风险:一旦路径暴露,任何人都可以通过你的服务器解析域名,消耗带宽并产生法律风险。

本文将通过 Nginx 路径混淆(Obfuscation)与 ADGH 客户端标识技术,实现“隐身”DNS 服务。

二、核心架构设计

我们的目标是:拒绝所有标准路径请求,仅响应私有路径。

  • 外部流量:访问 [https://abc.example.cc/dns-query](https://abc.example.cc/dns-query)\rightarrow 返回 404/444

  • 受信任流量:访问 [https://abc.example.cc/example](https://abc.example.cc/example)\rightarrow 转发至 ADGH 内部接口

三、Nginx 配置优化

在 Nginx 层,我们需要执行“先拦截、后转发”策略。

server {
    listen 80;
    server_name abc.example.cc;
    return 301 https://$host$request_uri; # 更加高效的重定向
}

server {
    listen 443 ssl http2;
    server_name abc.example.cc;

    # SSL 强化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    # [关键] 拦截标准特征路径
    # 使用 444 代表 No Response,让扫描器连接直接重置,比 404 更狠
    location ~* ^/(dns-query|adhdash/dns-query) {
        return 444;
    }

    # [关键] 混淆路径转发,example是文根,10010是你的adgh容器端口
    location ^~ /example{
        proxy_pass http://127.0.0.1:10010/dns-query; 
        
        # 传递真实 IP,用于 ADGH 统计
        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_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;

        # 缓存控制:DNS 响应不应被 Nginx 缓存
        add_header Cache-Control no-cache;
    }
}

四、AdGuard Home 端配置

仅在 Nginx 层混淆是不够的,我们还需要在 ADGH 内部建立白名单映射。

第一步:设置客户端标识

在 ADGH 后台中,进入 “客户端设置”

在【设置】-【客户端设置】新增一个客户端

第二步:强制白名单

“常规设置” -> “访问设置” 中:

  • 允许的客户端:填入 新增的客户端标识 以及其他你定义的标识符。

  • 拒绝其他所有客户端:确保未授权的请求即使绕过了 Nginx 路径,也无法获得解析。


五、使用方式

配置完成后,你的客户端 DoH 地址格式如下

客户端

外部访问URL

nginx内部重写路径

AdguardHome识别身份

手机

https://abc.example.cc/example/phone

/dns-query/phon

phone

电脑

https://abc.example.cc/example/macbook

/dns-query/macbook

macbook

Nginx 的正则表达式 ~^ /example 会匹配 /example/ 之后的所有字符并存入变量 $1。在执行 proxy_pass 时,Nginx 会将这个变量动态拼接到转发地址的末尾,完美契合了 ADGH 的路径鉴权机制。

五、总结

通过 Nginx 的 location 优先级机制,我们成功地为 DNS 服务搭建了一座“隐形长城”。这不仅解决了被探测的风险,更结合 ADGH 的客户端鉴权,实现了 DNS 访问控制。

提示:不要忘记清理你的 Nginx access_log,或者对 DNS 路径的 log 进行脱敏处理,保护你的解析隐私。