赞
踩
通常我们使用网络时,宽带运营商会为我们分配一个 DNS 服务器。这个 DNS 通常是最快的,距离最近的服务器,但会有很多问题,比如:
这个时候我们就需要自定义 DNS,自定义 DNS 不仅能够加快网页开启的速度,还能够提高浏览网页的安全性。更重要的一点是,如果你使用过 Google Chrome
,应该知道 Google 未来将会限制“拦截广告”的扩展,要想解决此问题只能装个全局的拦截广告软件或者直接从 DNS 服务器层面拦截广告(如果你不想换浏览器)。
AdGuard Home 是一款全网广告拦截与反跟踪软件,可以将广告与追踪相关的域名屏蔽,指向空的主机(DNS 黑洞)。简单来说它就是一个开源的公共 DNS 服务,使用 Go 语言开发,支持家长控制和广告过滤!关键是它还支持 DNS over TLS
和 DNS over HTTPS
,可以运行在 x86 Linux,树莓派上,也可以通过 Docker
部署在群晖 NAS 上。
AdGuard Home 的安装方法根据你所使用的平台而有所不同,它的二进制文件位于 https://github.com/AdguardTeam/AdGuardHome/releases,可以根据自己的平台下载最新版本。MacOS 的安装方法如下:
# 下载 AdGuard Home | |
$ wget https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.98.1/AdGuardHome_MacOS.zip | |
# 解压并进入 AdGuardHome_MacOS 目录 | |
$ unzip AdGuardHome_MacOS.zip && cd AdGuardHome_MacOS | |
# 将二进制文件拷贝到 $PATH | |
$ cp ./AdGuardHome /usr/local/bin/ | |
# 创建 Launch Daemon 的 plist 文件并启动服务 | |
$ AdGuardHome -s install |
现在就可以看到服务的配置和状态信息了:
$ sudo launchctl list AdGuardHome | |
{ | |
"StandardOutPath" = "/var/log/AdGuardHome.stdout.log"; | |
"LimitLoadToSessionType" = "System"; | |
"StandardErrorPath" = "/var/log/AdGuardHome.stderr.log"; | |
"Label" = "AdGuardHome"; | |
"TimeOut" = 30; | |
"OnDemand" = false; | |
"LastExitStatus" = 0; | |
"PID" = 1464; | |
"Program" = "/usr/local/bin/AdGuardHome"; | |
"ProgramArguments" = ( | |
"/usr/local/bin/AdGuardHome"; | |
"-s"; | |
"run"; | |
); | |
}; |
plist 文件位于 /Library/LaunchDaemons/
目录下:
$ cat /Library/LaunchDaemons/AdGuardHome.plist | |
<?xml version='1.0' encoding='UTF-8'?> | |
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" | |
"http://www.apple.com/DTDs/PropertyList-1.0.dtd" > | |
<plist version='1.0'> | |
<dict> | |
<key>Label</key><string>AdGuardHome</string> | |
<key>ProgramArguments</key> | |
<array> | |
<string>/usr/local/bin/AdGuardHome</string> | |
<string>-s</string> | |
<string>run</string> | |
</array> | |
<key>WorkingDirectory</key><string>/Users/freya/Downloads/Compressed/AdGuardHome_MacOS</string> | |
<key>SessionCreate</key><false/> | |
<key>KeepAlive</key><true/> | |
<key>RunAtLoad</key><true/> | |
<key>Disabled</key><false/> | |
<key>StandardOutPath</key> | |
<string>/var/log/AdGuardHome.stdout.log</string> | |
<key>StandardErrorPath</key> | |
<string>/var/log/AdGuardHome.stderr.log</string> | |
</dict> | |
</plist> |
对 Launch Daemon 不熟悉的同学可以参考 Mac OS X 的 Launch Daemon / Agent。
查看端口号:
$ sudo lsof -iTCP -sTCP:LISTEN -P -n|grep AdGuard | |
AdGuardHo 9990 root 3u IPv6 0xb76d091ec878f951 0t0 TCP *:3000 (LISTEN) |
打开浏览器,输入网址 http://127.0.0.1:3000/
即可访问 AdGuard Home 的管理界面。
点击“开始配置”,然后设定网页管理界面和 DNS 服务的端口。
点击“下一步”设置用户名和密码。
最后点击“下一步”就大功告成了。
在仪表盘上,我们可以看到 DNS 查询次数、被过滤器拦截的网站、查询 DNS 请求的客户端地址等等信息。
现在再查看端口号,管理界面会变成你刚刚设定的端口,另外还会多出一个 DNS 服务的端口:
$ sudo lsof -iTCP -sTCP:LISTEN -P -n|grep AdGuard | |
AdGuardHo 10619 root 11u IPv6 0xb76d091eb6671751 0t0 TCP *:53 (LISTEN) | |
AdGuardHo 10619 root 12u IPv6 0xb76d091ebc3c7751 0t0 TCP *:5300 (LISTEN) | |
$ sudo lsof -iUDP -P -n|grep AdGuard | |
AdGuardHo 10619 root 10u IPv6 0xb76d091eb89601c1 0t0 UDP *:53 |
默认的配置比较简单,为了更强力地拦截广告,我们可以对配置进行优化。
勾选【使用过滤器和 Hosts 文件以拦截指定域名】、【使用 AdGuard 浏览安全网页服务】、【强制安全搜索】。如果你想拦截成人网站,也可以勾选【使用 AdGuard 家长控制服务】。
虽然 AdGuard 本身提供了 AdGuard
、AdAway
的广告过滤规则,但在中国有点水土不服,如果要想更完美的实现广告屏蔽还需要自己添加规则,AdGuard 可以兼容 Adblock
的语法。最知名的过滤规则 EasyList 就是由 Adblock Plus 团队维护,过滤规则往往是一个 txt
文件,在文件的开头部分会显示规则的最后更新日期。
推荐广告过滤规则:
优酷网如果播放无限加载,那在自定义静态规则里加入一条规则 @@mp4.ts
(参考下图)。
官方默认使用 Cloudflare
的 DNS over HTTPS 作为上游服务器,在国内可能请求上游 DNS 延迟比较高,可以加上或替换国内的 DNS。我自己另外加了中科大的两组无污染 DNS,每次查询的时候会对所有的上游 DNS 同时查询,加速解析。
在这个界面里可以看见所有设备的 DNS 查询日志,可以下载整个日志文件,也可以针对某个域名进行快速拦截和放行。
有两个参数可以明显提升 QPS:
ratelimit
: DDoS 保护,客户端每秒接收的数据包数。建议禁用该参数(将值改为 0),默认值是 20。blocked_response_ttl
: TTL 缓存时间,建议设置为 60配置文件默认路径是 /usr/local/bin/AdGuardHome.yaml
其实到这里已经算是结束了,但本人有强迫症,我可不想将应用的管理界面设置为一些奇奇怪怪的非标准端口。有人或许会说:那你为什么不将管理界面设置为 80 或 443 端口啊?问得好,因为我的电脑上部署了各种奇奇怪怪的应用,80 端口只有一个,不够用的,只能考虑加个前端代理了。
作为一名云原生狂热信徒,当然是选 Envoy
了,虽然 Envoy 很难编译,但 Tetrate 的工程师(包括 Envoy 的核心贡献者和维护者)发起了一个 GetEnvoy 项目,目标是利用一套经过验证的构建工具来构建 Envoy,并通过常用的软件包管理器来分发,其中就包括 Homebrew
。我们可以直接通过 Homebrew 来安装:
$ brew tap tetratelabs/getenvoy | |
==> Tapping tetratelabs/getenvoy | |
Cloning into '/usr/local/Homebrew/Library/Taps/tetratelabs/homebrew-getenvoy'... | |
Tapped 1 formula. | |
$ brew install envoy | |
==> Installing envoy from tetratelabs/getenvoy | |
==> Downloading ... | |
######################################################################## 100.0% | |
|