使用 AdGuard Home 来守护自己的 DNS 查询
前言
众所周知,国内的软件开发商比较没有底线,为了利益,不惜牺牲用户体验,比如某大学生常用的跑步软件《运动世界校园》,每次使用就感觉被强制(),特别难受。
Firefox 因为扩展商店提供了广告拦截插件,就被国内的利益方送上了法庭,带来的结果就是,来自中国大陆的 IP 试图下载广告拦截插件的时候,会被拒绝服务;国内很多内置广告拦截的浏览器,也是被一众利益方送上法院,广告的利益太大了,甚至能大到让相关利益者铤而走险,践踏法律!(居然连避风港原则都不承认了捏)
国内的 DNS 一直存在各种劫持和篡改问题,但是 Public DNS 却不开启 DNSSEC 套件,助长了 DNS 任意劫持和篡改之风。自然,推出的 DOH / DOT 的 DNS 方案就应运而生,尊重用户隐私,加密,防篡改。
AdGuard 作为著名的广告拦截软件开发商,推出了 AdGuard Home 这套开箱易用的 DNS 软件,而且支持 Docker 部署。
开始
初始化
既然支持 Docker 部署,那就自己写一份 docker-compose.yml 即可,示例如下
version: '3'
services:
dns-server:
container_name: dns-server
image: adguard/adguardhome:latest
environment:
- TZ=Asia/Shanghai
volumes:
# 配置文件,数据挂载
- ./data/confdir:/opt/adguardhome/conf
- ./data/workdir:/opt/adguardhome/work
ports:
# DNS 服务默认端口,国内服务器建议关闭 53 端口,使用 DoT/DoH
- '53:53/udp'
- '53:53/tcp'
# httspdns,管理端口,也就是 DoH 方案
- '443:443/tcp'
# 后期可以考虑 close (没有开启的必要性)
- '80:80/tcp'
# 初始化端口
- '3000:3000/tcp'
# 853 端口,是 DoT & DoQ 方案
- '853:853/tcp'
- '853:853/udp'
- '5443:5443/udp'
- '5443:5443/tcp'
- '784:784/udp'
- '8853:8853/udp'
networks:
- dns-network
restart: always
networks:
dns-network:
driver: bridge
首先,在国内的服务器上,架设 53 ,853 端口通行的服务器,可能会被警告(需要有相关的许可证),所以我们只能考虑 DoH,DoT (自定义端口)和 DoQ 方案,但是 DoT 方案在 Android 上可能验证的是 IP 证书,而且不支持自定义端口,然而 IP 证书却不好获取(HiCA 改政策了)。DoQ 太新了,只有 Adguard 自己的客户端和一些核心支持。
那么其实做的事情就很简单了,先通过 3000 端口,进行初始化,然后 3000 端口就可以 close 了,已经完成了任务。然后我们去添加 SSL 证书,这样 80 端口,也可以 close 了,仅使用 443 / 853 端口即可。最后端口映射如下
version: '3'
services:
dns-server:
container_name: dns-server
image: adguard/adguardhome:latest
environment:
- TZ=Asia/Shanghai
volumes:
# 配置文件,数据挂载
- ./data/confdir:/opt/adguardhome/conf
- ./data/workdir:/opt/adguardhome/work
ports:
# DNS-over-HTTPS,管理端口,也就是 DoH 方案
- '443:443/tcp'
# DoQ 方案
- '853:853/udp'
# DNS-over-TLS,DoT 方案
- '853:853/tcp'
networks:
- dns-network
restart: always
networks:
dns-network:
driver: bridge
如果你不是架设在国内公网上,仅仅是内网自己用,那么仅仅使用 53 端口即可。同样,这个也支持 DHCP 服务器,(某些设备不支持修改全局 DNS)。
规则
规则就是这个 DNS 服务的灵魂,你可以在过滤器的 DNS 黑名单里面,直接导入现成的规则,来实现广告域名阻断效果(广告域名直接不解析,返回空,服务器 IP 都找不到,自然拿不到广告)
国内用户可以使用 https://gitea.com/Cats-Team/AdRules/raw/branch/main/dns.txt 这个规则库,针对性的阻断。
使用
对于 Android 手机来说,一般给自定义 DNS 设置项的话,走的时候 DOT,对于我们来说,这不合适。所以我们可以下载对应的 APP,即 Adguard For Android APP。然后导入我们自己的 DNS Server 即可。这时候该 APP 会建立 VPN,所有流量走 VPN,这样就可以拦截 DNS 请求(root 用户直接开自动代理)。
对于 iOS,我记得这个软件应该上架了吧?不过 iOS 没有 Android 这边这么流氓,大概不需要吧?
对于 Windows 11 可以直接去设置里面设置 DOH。
对于 macOS,可以导入 DNS 配置文件。
对于 ArchLinux,可以安装使用 dns-over-https
这个软件包,在配置文件写好 DoH 地址,然后让其监听本地 53 端口,修改 /etc/resolv.conf
这个配置文件,使其使用本地的 DNS Client。
效果
DNS 服务端数据
手机 APP 数据
该死的运动世界校园终于没有广告了!