Adguard Home 与加密DNS

DNS域名系统是我们使用网络过程中非常重要的一个系统,可以将DNS理解为互联网中的“电话簿”,它的作用是将我们常用的域名(例如:www.example.com)转换成计算机可以理解的IP地址(例如:192.0.2.1),因为计算机是通过IP地址来进行通信的。

DNS简述

假设你想给一个朋友打电话,但你手上只有朋友的名字,而没有电话号码。你去查找电话簿,输入朋友的名字,电话簿会告诉你朋友的电话号码。然后你就可以拨打这个电话号码,打通电话。朋友的名字就像是一个网站的域名,电话号码就是网站的IP地址,而电话簿就是DNS,它负责将域名转换成IP地址。当你在浏览器中输入网址时,DNS会帮助你找到对应的IP地址,然后你的计算机就能连接到正确的网站。

what-is-a-dns-proxy

普通的DNS数据使用UDP协议通过53端口明文传输,在传输过程中可以通过抢答和劫持修改查询信息,使用户无法访问到正确的IP地址,无法访问网站,就像你问路时被人故意指错方向,让你误入假网站,甚至泄露个人信息。一些国家和DNS服务提供者通过修改自家服务器的DNS地址为错误地址,使用户无法访问正常的网站。对于这种情况,使用加密DNS可以实现避免DNS污染和劫持。

加密DNS是通过加密传输的方式来保护DNS查询的安全,通常有以下方式:

  • DOH (通过https传输DNS数据,默认端口443)
  • DOT (通过TLS传输DNS数据,端口853)
  • DOQ (通过QUIC传输DNS数据,端口853,只有少数国家和组织能够审查此协议传输的数据)

目前windows10/11支持加密DOH,Andorid 9+ 系统支持DOT,Firefox 和 Chrome支持DOT

本文将在接下来的部分介绍Adguard Home用来配置DNS。

Adguard Home

Adguard Home 是一个用于DNS服务端软件,它通过查询上游DNS服务器的DNS记录给下游客户端实现工作,支持UDP、 TCP 、 DNS-over-TLS、DNS-over-HTTPS、h3(带有强制 HTTP/3 的加密 DNS-over-HTTPS不会回退到 HTTP/2 或更低版本)、DNS-over-QUIC、DNSCryp等协议,带有web界面,易于配置。

Windows端安装和配置

  1. Adguard Home 支持windows系统,可以从GitHub下载windows版本的程序
    GitHub : https://github.com/AdguardTeam/AdGuardHome
    下载时选择这个文件 AdGuardHome_windows_amd64.zip
  2. 将文件中的AdGuardHome.exe 移动到 ​C:\Program Files\AdGuard_Home​
  3. 创建文件run_adguardhome.bat,添加以下内容到文件
@echo off

if "%1" == "h" goto begin

mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit

:begin

REM

start /b adguardhome.exe

exit

  1. run_adguardhome.bat的快捷方式复制到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup,以此实现开机启动。
  2. 打开windows系统的设置,将DNS设置为127.0.0.1

Linux 端安装与配置

Adguard Home页可以安装到Linux系统,具体有三种方式:

  1. 方法一:官方脚本安装(推荐)
# 使用官方一键安装脚本
curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh

安装成功后,输出信息会显示:

  • AdGuard Home 服务已安装并运行
  • 管理界面访问地址(通常是 http://IP:3000
  • 服务管理命令
  1. 方法二:手动安装
# 下载AdGuard Home
wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz
# 解压
tar xvf AdGuardHome_linux_amd64.tar.gz
# 进入目录并安装
cd AdGuardHome
sudo ./AdGuardHome -s install
  1. 方法三:Docker安装
docker run -d \
  --name adguardhome \
  --restart unless-stopped \
  --network host \
  -v $PWD/adguardhome/work:/opt/adguardhome/work \
  -v $PWD/adguardhome/conf:/opt/adguardhome/conf \
  adguard/adguardhome
  1. 安装完成后可以把系统的DNS设置为127.0.0.1以此启用DNS:
sudo nano /etc/systemd/resolved.conf

找到 [Resolve] 部分,取消注释并修改 DNS 和 Domains 行:

[Resolve]
DNS=127.0.0.1
#Domains=~.

重启 systemd-resolved 服务:

sudo systemctl restart systemd-resolved

验证设置:

resolvectl status

在输出中,你应该会在 Global 部分看到 DNS Server: 127.0.0.1。

  1. 服务管理命令
# 启动服务
sudo /opt/AdGuardHome/AdGuardHome -s start
# 停止服务
sudo /opt/AdGuardHome/AdGuardHome -s stop
# 重启服务
sudo /opt/AdGuardHome/AdGuardHome -s restart
# 查看状态
sudo /opt/AdGuardHome/AdGuardHome -s status
  1. 防火墙配置
# 开放必要端口
sudo ufw allow 3000/tcp  # 管理界面
sudo ufw allow 53/tcp    # DNS (TCP)
sudo ufw allow 53/udp    # DNS (UDP)
sudo ufw allow 853/tcp   # DNS-over-TLS

web面板配置

安装完成后,我们需要打开Adguard Home的web管理面板设置。

  1. 打开 http://127.0.0.1:3000,按照页面的步骤完成设置,设置监听端口和账户密码。
  2. 打开设置的管理面板地址http://127.0.0.1:您设置的端口,打开设置->DNS设置,在上游DNS服务器填入可用的DNS地址,可以参考以下网站的地址:全量加密 DNS 大全 - 安全解析隐私保护解决方案 | 国内/国际安全 DNS 解析地址推荐(DoH/DoT/QUIC): https://encrypteddns.pages.dev/#cn-dns,保存配置,测试上游服务器响应,去除无法使用的服务器地址。
  3. Adguard Home提供了其他的强大功能,例如广告过滤器安全搜索成人内容拦截时间段控制设备识别个性化设置速率限制DNSSEC 配置,大家可以按需求配置。

加密DNS配置

Adguard Home 支持加密DNS,如果你的Adguard Home安装在服务器或想要在本地体验加密服务,可以启用它。

在加密设置界面启用加密,输入你的服务器名称(ip地址或域名),设置DOH、DOT、DOQ的端口,将你的证书和私钥的路径或内容填入,保存配置后就能使用了。

证书获取可以参考以下:

方案一:使用Let's Encrypt证书(推荐)

  1. *安装Certbot*

sudo apt update

sudo apt install certbot

  1. 申请证书

sudo crtbot certonly --standalone -d 你的域名 --preferred-challenges http --agree-tos --register-unsafely-without-email

  1. 证书位置
/etc/letsencrypt/live/你的域名/fullchain.pem
/etc/letsencrypt/live/你的域名/privkey.pem

方案二:使用Cloudflare Origin CA证书

  1. 在Cloudflare创建证书

    • 登录Cloudflare控制面板
    • 进入 SSL/TLS > Origin Server
    • 点击"Create Certificate"
    • 选择15年有效期证书
    • 下载证书和私钥
  2. 上传证书到服务器

# 创建证书目录
mkdir -p /etc/ssl/adguard

# 上传证书文件

# cert.pem - 证书文件

# key.pem - 私钥文件

故障排除——常见问题及解决方案

  1. 端口占用问题
    检查端口占用

sudo netstat -tulpn | grep :80

sudo lsof -i :443

解决方案

  • 停止占用端口的服务
  • 或使用其他端口
  • 或使用DNS挑战方式申请证书
  1. 防火墙问题

检查防火墙状态

sudo ufw status

开放必要端口


sudo ufw allow 80/tcp    # HTTP验证

sudo ufw allow 443/tcp   # HTTPS

sudo ufw allow 853/tcp   # DoT

  1. 无法访问管理界面

排查步骤:
​ 1. 检查 AdGuard Home 服务是否运行
​ 2. 确认防火墙没有阻止访问
​ 3. 尝试使用 http://127.0.0.1:3000
​ 4. 检查浏览器代理设置

  1. 广告拦截效果不佳
    优化建议:

    1. 添加更多过滤规则
    2. 检查是否启用了合适的过滤器
    3. 确认设备 DNS 设置正确
    4. 清空 DNS 缓存
    
    ipconfig /flushdns
    
    
  2. 网络速度变慢
    解决方法:

  3. 更换更快的上游 DNS 服务器

  4. 减少过滤规则数量

  5. 检查系统资源使用情况

  6. 启用缓存优化

结语

Adguard Home 通过提供安全的DNS保障网络访问的安全,如果你感兴趣,那么赶快来配置。

参考:

  1. 域名系统 - 维基百科,自由的百科全书——https://zh.wikipedia.org/wiki/域名系统
  2. DNS over TLS | DNS 安全性 | Cloudflare——https://www.cloudflare.com/zh-tw/learning/dns/dns-over-tls/
  3. AdGuard Home — 家庭实验室中的全网广告拦截 |阿卡什·拉杰普罗希特——https://akashrajpurohit.com/blog/adguard-home-network-wide-ad-blocking-in-your-homelab/
  4. AdguardTeam/AdGuardHome: Network-wide ads & trackers blocking DNS server——https://github.com/AdguardTeam/AdGuardHome
  5. 入门 | AdGuard DNS Knowledge Base——https://adguard-dns.io/kb/zh-CN/adguard-home/getting-started/
  6. AdGuard Home——https://adguard.com/en/adguard-home/overview.html
  7. 全量加密 DNS 大全 - 安全解析隐私保护解决方案 | 国内/国际安全 DNS 解析地址推荐(DoH/DoT/QUIC)——https://encrypteddns.pages.dev/#cn-dns
  8. AdGuard Home 安装及使用指北 - 少数派——https://sspai.com/post/63088