yanchang
yanchang
发布于 2026-02-14 / 15 阅读
0
0

【保姆级教程】用 AdGuard Home 打造极速、纯净的局域网 DNS 解析中心

碎碎念

你是否也遇到过这些痛点:

  1. 记不住端口号:每次访问服务都要输入 192.168.0.250:8889,不仅难记,还不够优雅。

  2. NAT 回环(Hairpin NAT)问题:在家里访问自己的域名 yanchang.cc,却被路由器“踢”回来,或者绕一大圈去公网再回来,速度慢且不稳定。

  3. DNS 污染与劫持:运营商的 DNS 经常把网页导向广告,或者解析速度慢如蜗牛。

  4. 科学环境下的 DNS 泄露:开了代理软件后,内网域名无法解析,或者被错误地发往公网 DNS。

今天,我们就用 AdGuard Home 来一站式解决这些问题,打造一个秒级响应、去广告、支持内网域名自动解析的 DNS 中心。

1. 准备工作

1.关闭原有53端口服务

Ubuntu 默认运行着 systemd-resolved 服务,它占用了 53 端口,这会与 DNS 服务器冲突。我们需要先禁用它:

# 停止并禁用 systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

# 备份原有的 resolv.conf
sudo mv /etc/resolv.conf /etc/resolv.conf.bak

# 创建一个新的 resolv.conf,让服务器自己能上网(暂时指向公共DNS)
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf

2. 准备工作

首先创建项目目录:

sudo mkdir -p /opt/adguardhome/work /opt/adguardhome/conf
cd /opt/adguardhome

3. 编写 docker-compose.yml

/opt/adguardhome 目录下创建并编辑文件:

Bash

sudo vi docker-compose.yml

将以下内容粘贴进去:

services:
  adguardhome:
    image: adguard/adguardhome
    container_name: adguardhome
    restart: unless-stopped
    ports:
      # 只监听内网 IP 的 53 端口,防止 DMZ 导致公网被扫描
      - "192.168.0.250:53:53/tcp"
      - "192.168.0.250:53:53/udp"
      # 管理界面也只允许自己访问,后续访问的时候建立ssh隧道
      - "127.0.0.1:3000:3000/tcp"
    volumes:
      - /opt/adguardhome/work:/opt/adguardhome/work
      - /opt/adguardhome/conf:/opt/adguardhome/conf
    networks:
      # 方便后续加入authentik网络
      - authentik-internal

networks:
  authentik-internal:
    external: true

关键点解析

  1. ports 映射- "127.0.0.1:3000:80/tcp"。注意,这里我们将宿主机的 3000 (Localhost) 映射到容器内部的 80(AdGuard 默认管理端口)。这样,只有宿主机自己能通过 localhost:3000 访问,局域网其他电脑无法访问。

  2. networks:加入 authentik-internal 网络。这是让 Authentik 能“摸”到 AdGuard Home 的唯一网线。

4.启动

sudo docker compose up -d

配置工作

1.修改用户界面为3000端口

2.配置DNS重写

我们要实现的效果是:无论你在哪里,输入 yanchang.cc 都能访问,但在家里时,它直接指向内网 IP,速度达到千兆/万兆。

进入 过滤器 -> DNS 重写,添加规则:

  • 域名*.yanchang.cc (注意前面的星号,代表泛解析)

  • 应答 IP192.168.0.250 (你的 Nginx 反代服务器 IP)

原理: 当你在家请求 music.yanchang.cc 时,AdGuard Home 不会去问阿里云,而是直接告诉你:“别出门了,就在你旁边,IP 是 192.168.0.250”。这样流量完全不经过路由器 WAN 口,速度极快且稳定。

3.clash代理DNS设置

很多同学配置好 AdGuard Home 后,发现一开 Clash,内网域名 yanchang.cc 就打不开了。这是因为 Clash 默认抢占了 DNS 查询,且不知道你内网的存在。

网上很多教程教你写复杂的脚本、改配置文件,其实根本不需要那么麻烦

我们只需要在 Clash Verge 的设置里,强制它使用“系统 DNS”即可。

操作步骤:

  1. 打开 Clash Verge -> 设置

  2. 找到 “DNS 设置” (或者叫 DNS 覆写)。

4. 配置“黄金”上游 DNS

为了让国内访问速度起飞,同时防止 DNS 劫持,我们采用 阿里 DoT + 腾讯 DoT 的组合。

进入 AdGuard Home 设置 -> DNS 设置

1. 上游 DNS 服务器

填入以下内容,建议勾选 “并行请求”(谁快用谁):

Plaintext

# 阿里云 DNS over TLS (DoT) - 极速且防劫持
tls://dns.alidns.com

# 腾讯云 (DNSPod) DoT - 备选,解析精准
tls://dns.pub

# 阿里云普通 UDP (作为兜底,防止加密握手失败)
223.5.5.5

2. Bootstrap DNS

用于解析上述 DoT 域名的 IP:

Plaintext

223.5.5.5
119.29.29.29

配置完成后,点击“测试上游”,你会发现响应时间通常在 10ms - 30ms 之间,网页打开速度会有肉眼可见的提升。

Authentik 设置(搭建外部VPN访问)

既然外网和内网都访问不了管理后台,我们怎么进去?答案是让 Authentik 做“摆渡人”。

因为两者都在 authentik-internal 同一个 Docker 网络里,Authentik 可以直接通过容器名访问 AdGuard Home。

第一步:创建 Proxy Provider (代理提供程序)

  1. 进入 Authentik 管理后台 ->(应用) -> (以提供程序创建)

2.点击 选择提供程序,选择 Proxy Provider

  1. 填写信息:

    • Name: Provider for ****

    • Authorization Flow: 选择默认授权流程。

    • 代理: 勾选(我们作为反向代理使用)。

    • 外部主机: https://dns.yanchang.cc:9001 (你希望用来访问的域名)。

    • 内部主机: http://adguardhome:3000

  2. 关键设置 - Upstream (上游)

    • 这里不要127.0.0.1,也不要填 192.168.0.250

    • 直接填 Docker 容器内的地址: http://adguardhome:3000

    • 原理:在 Docker 网络内部,通过容器名 adguardhome 直接解析 IP,完全绕过宿主机防火墙。

第二步:创建 Application (应用)

后续一路点默认即可

第三步:配置 Outpost (前哨站)

确保你的 Outpost(通常是内嵌的 docker outpost)已经包含了这个新应用。如果你使用的是默认的 docker-compose 部署 Authentik


评论