DNS服务器搭建指南

📖 阅读时间:50分钟 🎯 难度:高级 🔧 实践操作:高

搭建私有DNS服务器,实现去广告、防污染和加密查询,全面掌控域名解析过程,提升网络安全与隐私。本指南将主讲 AdGuard Home 的部署与配置。

📚 DNS基础知识

DNS (Domain Name System),即域名系统,是互联网的“电话簿”。它负责将人类易于记忆的域名(如 `google.com`)翻译成机器能够理解的IP地址(如 `172.217.160.142`)。

每次您访问网站时,您的设备都会先向一个DNS服务器查询该网站的IP地址,然后再通过IP地址与网站服务器建立连接。您使用的DNS服务器的优劣,直接决定了您的网络体验的安全性、隐私性和速度。

🚀 为何自建DNS服务器

虽然您的ISP或路由器已经提供了默认的DNS服务,但自建DNS服务器能带来革命性的体验提升。

🚫

拦截广告与跟踪

从源头过滤广告域名,保护所有接入设备的网络环境,提升浏览体验。

🔒

增强隐私与安全

防止ISP或公共DNS记录您的浏览历史,通过加密查询(DoH/DoT)防止DNS污染和中间人攻击。

✍️

自定义解析规则

强制重定向特定域名,或为内网服务设置友好域名,完全掌控网络访问。

提升解析速度

利用本地缓存加速重复请求的解析速度,并可选用全球最快的上游DNS服务。

🤔 DNS方案选择

在VPS上搭建DNS服务,我们有多种成熟的方案可选。

CoreDNS

一个用Go语言编写的、插件化的、灵活的DNS服务器。通过编辑配置文件驱动,没有Web界面,但扩展性极强,适合需要高度定制化规则的高级用户。

BIND9

历史最悠久、应用最广泛的DNS软件。功能极其强大和稳定,是搭建权威DNS服务器的行业标准,但配置相对复杂,不适合新手。

🛡️ AdGuard Home实战

我们将使用Docker来快速部署AdGuard Home,这是最推荐的方式,因为它隔离了环境且易于管理。

» 安装与初始化

1

安装Docker

如果您的VPS尚未安装Docker,请先执行官方一键安装脚本:

curl -fsSL https://get.docker.com | bash
2

运行AdGuard Home容器

执行以下命令来启动AdGuard Home。请注意,`53`端口是DNS服务的标准端口,如果被占用,您需要先停止占用该端口的服务(如`systemd-resolved`)。

docker run --name adguardhome \ -v /my/adguard/workdir:/opt/adguardhome/work \ -v /my/adguard/confdir:/opt/adguardhome/conf \ -p 53:53/tcp -p 53:53/udp \ -p 80:80/tcp -p 443:443/tcp \ -p 853:853/tcp \ -p 3000:3000/tcp \ -d --restart unless-stopped \ adguard/adguardhome

注意: 上述命令将Web管理界面映射到了80/443端口。如果您的VPS上已运行网站,请将 `-p 80:80/tcp` 和 `-p 443:443/tcp` 修改为其他端口,例如 `-p 3000:3000/tcp`。

3

初始化设置

在浏览器中访问 `http://<您的VPS IP>:3000`。您会看到AdGuard Home的初始化向导。按照提示设置好Web管理端口和DNS服务端口(保持默认即可),并创建您的管理员账号和密码。

» 核心配置详解

登录AdGuard Home仪表盘后,我们关注几个核心设置区域。

过滤器 -> DNS封锁清单 (广告过滤)

这里是广告过滤的核心。AdGuard Home内置了一些列表,您可以点击“添加阻止列表” -> “从列表中选择”来添加更多社区维护的规则,例如:

  • AdAway Default Blocklist: 移动端广告过滤。
  • EasyPrivacy: 隐私保护,屏蔽跟踪器。
  • NoCoin Filter List: 屏蔽网页挖矿脚本。

对于国内用户,可以手动添加 `https://gitee.com/privacy-protection-rules/dead-simple-ad-rules/raw/master/adguard-home.txt` 等知名规则源。

» 配置加密DNS (防污染与隐私)

这是自建DNS最重要的功能之一,它可以加密您的DNS查询,防止被窃听或篡改。

设置 -> DNS设置

  1. 上游DNS服务器: 这里是AdGuard Home向谁请求DNS记录的地方。删除默认的,并填入您信赖的加密DNS地址。推荐使用 DNS-over-HTTPS (DoH) 或 DNS-over-TLS (DoT)。
    服务商DNS-over-HTTPS (DoH) 地址DNS-over-TLS (DoT) 地址
    Cloudflare https://cloudflare-dns.com/dns-query tls://1.1.1.1
    Google https://dns.google/dns-query tls://8.8.8.8
    Quad9 (安全) https://dns.quad9.net/dns-query tls://9.9.9.9
    DNSPod (国内) https://doh.pub/dns-query tls://dns.pub
  2. Bootstrap DNS服务器: 用于解析上游DoH/DoT服务器的域名。可以设置为可靠的公共DNS,如 `1.1.1.1` 或 `8.8.8.8`。
  3. 并行请求: 勾选此项可以同时向上游DNS服务器发送请求,取最快返回的结果,提升解析速度。

💻 客户端配置

服务器搭建好后,需要将您的设备指向它。最佳实践是在**路由器**上设置,这样所有连接到该WiFi的设备都能自动享受去广告和安全DNS的好处。

  • 路由器设置: 登录路由器管理后台,在“网络设置”或“DHCP服务器”中,将主DNS服务器地址修改为您的VPS IP地址。
  • Windows/macOS: 在网络连接设置中,手动指定DNS服务器为您的VPS IP地址。
  • iOS/Android: 可以使用系统自带的“私有DNS”功能,填入您的域名并选择DoT模式,或者使用AdGuard官方客户端。

🌐 权威DNS简介

我们上面搭建的属于**递归DNS**(或转发DNS),它负责替我们向别人查询。而**权威DNS**则正好相反,它负责“持有”一个域名的官方记录,并告诉别人“这个域名对应的IP是多少”。

如果您想自己托管域名的解析,而不是使用Cloudflare或域名注册商的DNS服务,您就需要搭建权威DNS服务器。这通常使用BIND9或CoreDNS软件,配置更为复杂,需要管理域名的Zone文件和各种记录(A, CNAME, MX等),属于更专业的范畴。

🔧 故障排查

❌ 客户端无法上网

排查: 1. 检查VPS防火墙是否开放了DNS端口(TCP/UDP 53)。 2. 在客户端使用 nslookup google.com <您的VPS IP> 命令测试DNS服务器是否能正常响应。 3. 查看AdGuard Home的“查询日志”,看是否有请求进入和被阻止。

❌ 某个网站或App无法正常工作

排查: 很可能是该服务依赖的某个域名被广告过滤规则误杀。在AdGuard Home的“查询日志”中找到被阻止的相关域名,并将其加入白名单。