原文链接:使用 Envoy 和 AdGuard Home 阻挡烦人的广告

通常我们使用网络时,宽带运营商会为我们分配一个 DNS 服务器。这个 DNS 通常是最快的,距离最近的服务器,但会有很多问题,比如:

  1. 访问某些网络服务很缓慢,比如 Apple 的 iCloud 服务。
  2. 比较担心安全问题,希望能通过设置 DNS 来保证你访问安全的网站。
  3. 厌烦了每当你输入一个不正确的网址,运营商总会给你跳转到一个充满广告的界面。

这个时候我们就需要自定义 DNS,自定义 DNS 不仅能够加快网页开启的速度,还能够提高浏览网页的安全性。更重要的一点是,如果你使用过 Google Chrome,应该知道 Google 未来将会限制“拦截广告”的扩展,要想解决此问题只能装个全局的拦截广告软件或者直接从 DNS 服务器层面拦截广告(如果你不想换浏览器)。

AdGuard Home 是一款全网广告拦截与反跟踪软件,可以将广告与追踪相关的域名屏蔽,指向空的主机(DNS 黑洞)。简单来说它就是一个开源的公共 DNS 服务,使用 Go 语言开发,支持家长控制和广告过滤!关键是它还支持 DNS over TLSDNS over HTTPS,可以运行在 x86 Linux,树莓派上,也可以通过 Docker 部署在群晖 NAS 上。

1. AdGuard Home 安装

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

2. 配置优化

默认的配置比较简单,为了更强力地拦截广告,我们可以对配置进行优化。

常规设置

勾选【使用过滤器和 Hosts 文件以拦截指定域名】、【使用 AdGuard 浏览安全网页服务】、【强制安全搜索】。如果你想拦截成人网站,也可以勾选【使用 AdGuard 家长控制服务】。

过滤器

虽然 AdGuard 本身提供了 AdGuardAdAway 的广告过滤规则,但在中国有点水土不服,如果要想更完美的实现广告屏蔽还需要自己添加规则,AdGuard 可以兼容 Adblock 的语法。最知名的过滤规则 EasyList 就是由 Adblock Plus 团队维护,过滤规则往往是一个 txt 文件,在文件的开头部分会显示规则的最后更新日期。

推荐广告过滤规则:

优酷网如果播放无限加载,那在自定义静态规则里加入一条规则 @@mp4.ts (参考下图)。

上游 DNS 设置

官方默认使用 Cloudflare 的 DNS over HTTPS 作为上游服务器,在国内可能请求上游 DNS 延迟比较高,可以加上或替换国内的 DNS。我自己另外加了中科大的两组无污染 DNS,每次查询的时候会对所有的上游 DNS 同时查询,加速解析。

查询日志

在这个界面里可以看见所有设备的 DNS 查询日志,可以下载整个日志文件,也可以针对某个域名进行快速拦截和放行。

提升 QPS

有两个参数可以明显提升 QPS:

  • ratelimit : DDoS 保护,客户端每秒接收的数据包数。建议禁用该参数(将值改为 0),默认值是 20。
  • blocked_response_ttl : TTL 缓存时间,建议设置为 60

配置文件默认路径是 /usr/local/bin/AdGuardHome.yaml

3. 使用 Envoy 作为前端代理

其实到这里已经算是结束了,但本人有强迫症,我可不想将应用的管理界面设置为一些奇奇怪怪的非标准端口。有人或许会说:那你为什么不将管理界面设置为 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%

使用 Envoy 和 AdGuard Home 阻挡烦人的广告的更多相关文章

  1. sdibt 1244 烦人的幻灯片

    在这个OJ站还没号,暂时没提交,只是过了样例 真不愧是烦人的幻灯片,烦了我一小时 ---更新:OJ测试完毕,AC 烦人的幻灯片问题 Time Limit: 1 Sec  Memory Limit: 6 ...

  2. iOS 界面 之 EALayout 无需反复编译,可视化实时界面,告别Storyboard AutoLayout Xib等等烦人的工具

    http://blog.csdn.net/fatherhui iOS开发,EALayout 无需反复编译,可视化实时界面,告别Storyboard AutoLayout Xib等等烦人的工具 EALa ...

  3. Jmeter之解决烦人的中文乱码问题

    Jmeter是一款国外开源工具,所以就跟LR一样,对中文的支持不是很好,经常会有同学录制脚本后回放或者是发送HTTP请求,看到响应报文里面有乱码! 那如何才能解决这个问题呢?我们分2个情况来分析: 一 ...

  4. Windows10获取VS管理员权限总是很烦人

    之前在Windows 7中,只要关闭了UAC,给当前账户管理员权限,任何程序都会以管理员身份启动.现在,在Windows 10上就行不通了.而VS又需要管理员权限才能使用附加调试等一些功能.虽然我们可 ...

  5. ASP.NET Core API 接收参数去掉烦人的 [FromBody]

    在测试ASP.NET Core API 项目的时候,发现后台接口参数为类型对象,对于PostMan和Ajax的Post方法传Json数据都获取不到相应的值,后来在类型参数前面加了一个[FromBody ...

  6. 工作效率提升之Eclipse篇(1):干掉烦人的xml文件的validation

    每次启动maven项目,都会有一堆烦人的xml文件的validation,一旦网络较慢,项目重新启动的时候,这些多余的验证纯属浪费时间. Eclipse上取消validation的方法: 1.菜单[W ...

  7. 【拓扑排序】烦人的幻灯片(slides)

    1395:烦人的幻灯片(slides) 时间限制: 1000 ms         内存限制: 65536 KB提交数: 753     通过数: 416 [题目描述] 李教授将于今天下午作一次非常重 ...

  8. 使用call、apply和bind解决js中烦人的this,事件绑定时的this和传参问题

    1.什么是this 在JavaScript中this可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式,this 绑定的对象即函数执行的上下文环境(context). 为了帮助理解,让我 ...

  9. 〖Linux〗干掉Kubuntu烦人的软件升级提示“Update notification daemon”,Your should update ..

    Kubuntu是很好使用,但是升级提示也是太烦人了,开机的时候总是显示如下画面: 使用System Load Indicator(sudo apt-get install indicator-mult ...

随机推荐

  1. Laya 中缩放的实现

    Laya 缩放功能的实现 在 laya 中实现滚轮对选中对象的缩放,涉及到以下两个模块: 事件 容器坐标 1. 事件 在 Laya 中, Event 是事件类型的集合.包含了常见的鼠标事件.键盘事件. ...

  2. 云片RocketMQ实战:Stargate的前世今生

    RocketMQ消息队列,专业消息中间件,既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积.高吞吐.可靠重试等特性,是应对企业业务峰值时刻必备的技术. 云片由于 ...

  3. JS 一些有意思的写法

    对于 C语言中的 &&(有一个为假,返回的为false) 和 || (有一个为真,即为真),但是对于 JS中的 && 和 || 运算是有所不同的. 详情见下面: &am ...

  4. Nginx+Zuul集群实现高可用网关

    代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...

  5. MySQL主从配置图文详解

    #环境配置#master IP:192.168.46.137 slave IP:192.168.46.138 database:v1 1.在两台机器,分别安装mysql数据库,分别添加远程连接权限 2 ...

  6. 重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)

    定场诗 伤情最是晚凉天,憔悴厮人不堪言: 邀酒摧肠三杯醉.寻香惊梦五更寒. 钗头凤斜卿有泪,荼蘼花了我无缘: 小楼寂寞新雨月.也难如钩也难圆. 前言 本章为重读<学习JavaScript数据结构 ...

  7. SpringBoot:高并发下浏览量入库设计

    一.背景 文章浏览量统计,low的做法是:用户每次浏览,前端会发送一个GET请求获取一篇文章详情时,会把这篇文章的浏览量+1,存进数据库里. 1.1 这么做,有几个问题: 在GET请求的业务逻辑里进行 ...

  8. 【原创】想了解Mysql事务,知道这些就够了

    Mysql事务:1. 事务进行一次数据库操作时将数据会存到BufferPoll缓存池中2. 数据存入缓存池后,Mysql会新建一个线程将数据存入到RedoLogBuffer中3. 事务提交时RedoL ...

  9. Servlet 常用API学习(一)

    Servlet常用API学习 一.Servlet体系结构(图片来自百度图片) 二.ServletConfig接口 Servlet在有些情况下可能需要访问Servlet容器或借助Servlet容器访问外 ...

  10. [Python] 通过采集23万条数据,对《哪吒》影评分析

    一.说明 数据来源:猫眼: 运行环境:Win10/Python3.7 和 Win7/Python3.5: 分析工具:jieba.WorldCloud.pyecharts和matplotlib: 程序基 ...