AdGuard Home 安装使用教程

2023-05-16

原文链接:使用 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 文件,在文件的开头部分会显示规则的最后更新日期。

推荐广告过滤规则:

EasyList China : 国内网站广告过滤的主规则。
EasyPrivacy : EasyPrivacy 是隐私保护,不被跟踪。
CJX’s Annoyance List : 过滤烦人的自我推广,并补充EasyPrivacy隐私规则。
广告净化器规则 : 国内大部分视频网站的广告过滤。
I don’t care about cookies : 我不关心 Cookie 的问题,屏蔽网站的 cookies 相关的警告。

优酷网如果播放无限加载,那在自定义静态规则里加入一条规则 @@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%
?  /usr/local/Cellar/envoy/1.10.0: 3 files, 27.9MB, built in 13 seconds

$ envoy --version
envoy  version: e349fb6139e4b7a59a9a359be0ea45dd61e589c5/1.11.1/clean-getenvoy-930d4a5/RELEASE/BoringSSL

这是我的 envoy 配置文件:

static_resources:
  listeners:
  - address:
      # Tells Envoy to listen on 0.0.0.0:80
      socket_address:
        address: 0.0.0.0
        port_value: 80
    filter_chains:
    # Any requests received on this address are sent through this chain of filters
    - filters:
      # If the request is HTTP it will pass through this HTTP filter
      - name: envoy.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
          codec_type: auto
          stat_prefix: http
          access_log:
            name: envoy.file_access_log
            typed_config:
              "@type": type.googleapis.com/envoy.config.accesslog.v2.FileAccessLog
              path: /dev/stdout
          route_config:
            name: search_route
            virtual_hosts:
            - name: backend
              domains:
              - "*"
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: adguard
          http_filters:
          - name: envoy.router
            typed_config: {}
  clusters:
  - name: adguard
    connect_timeout: 1s
    type: strict_dns
    dns_lookup_family: V4_ONLY
    lb_policy: round_robin
    load_assignment:
      cluster_name: adguard
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: 127.0.0.1
                port_value: 5300
admin:
  access_log_path: "/dev/stdout"
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 15001

创建 Launch Agent 的 plist 文件:

$ cat /Library/LaunchAgents/envoy.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>envoy</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/envoy</string>
      <string>--config-path</string>
      <string>/Users/freya/bin/front-proxy.yaml</string>
    </array>
    <key>StandardOutPath</key>
    <string>/var/log/envoy.stdout.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/envoy.stderr.log</string>
    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
    <key>Disabled</key>
    <false/>
  </dict>
</plist>

加载 envoy 服务:

$ sudo launchctl load /Library/LaunchAgents/envoy.plist

现在就可以在浏览器中通过 url http://127.0.0.1/ 来访问 AdGuard Home 的管理界面啦~

后续如果还有其他不可描述的应用,它们的管理界面都可以根据不同的 url 路径加到 envoy 的后端中。更高级的玩法还可以接入 Prometheus 监控,envoy 的 metrics 路径是 /stats/prometheus

如果你很好奇为什么我的浏览器能够输出彩色的 metrics,请在公众号后台回复◉prometheus◉

最后,别忘了将 MacOS 的 DNS 设为 127.0.0.1,这个就不用我教了吧?

微信公众号

扫一扫下面的二维码关注微信公众号,在公众号中回复◉加群◉即可加入我们的云原生交流群,和孙宏亮、张馆长、阳明等大佬一起探讨云原生技术

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AdGuard Home 安装使用教程 的相关文章

  • TCP IP与UDP含义 区别 总结

    TCP IP协议 xff08 一 xff09 网络基础知识 OSI参考模型中每个分层的作用 1 3 1 应用层 xff1a 为应用程序提供服务并规定应用程序中通信相关的细节 xff1b 包括的协议如下 xff1a xff1a 超文本传输协议
  • STM32F103 CAN总线配置总结

    stm32的can总线的配置如下 xff1a CAN InitStructure CAN TTCM 61 DISABLE 禁止时间触发通信模式 CAN InitStructure CAN ABOM 61 DISABLE CAN InitSt
  • 新版标准日本语初级_第四十八课

    语法 1 自谦语 xff1a 自谦语是通过压低说话人自身或说话人一方的形式表示敬意的表达方式 如跟别人谈到自己的家人或自己公司的上级时 xff0c 也使用自谦语 2 43 一类动 二类动 或 43 三类动的汉字部分 xff1a 这是自谦语中
  • STM32同时使用多个定时器

    代码如下 xff1a span class token keyword void span span class token function TIM2 IRQHandler span span class token punctuatio
  • Qt之定时器

    文章目录 QObject类的定时器定时器类QTimer Qt使用定时器有两种方法 xff0c 一种是使用QObiect类的定时器 xff0c 一种是使用QTimer类 定时器的精确性依赖于操作系统和硬件 xff0c 大多数平台支持20ms的
  • ucos信号量集

    事件标志组 信号量集 的使用 xff1a span class token keyword static span OS STK task testled span class token punctuation span STARTUP
  • Ubuntu 18.04 swap分区扩展

    在开始之前 xff0c 请先使用命令检查您的 Ubuntu 系统的SWAP 分区 sudo swapon show 创建 swap 的文件 xff08 分配 1G 的swap分区大小 xff09 sudo fallocate l 1G sw
  • ping通ipv6地址

    文章目录 WindowsLinux为什么Link local地址后面要有百分号 xff1f Windows ping ipv6主机名的方法如下 xff1a span class token function ping span 6 ipv6
  • STM32_串口的DMA接收

    STM32使用DMA在串口接收数据的方法如下 xff1a span class token macro property span class token directive hash span span class token direc
  • CopyMakeBorder函数

    其作用是复制图像并且制作边界 处理边界卷积 xff1a span class token keyword void span span class token function cvCopyMakeBorder span span clas
  • Altium designer中文化设置

    Altium designer中文化设置的步骤如下 xff0c 然后重启软件即可 xff1a
  • zipfile.BadZipFile: File is not a zip file

    zipfile BadZipFile File is not a zip file的问题复现步骤 xff1a 使用openpyxl的save函数 xff0c 将数据保存在Excel文件中 在没有保存完成的情况下 xff0c 又使用load
  • OpenCV_图像二值化

    对图像进行二值化的关键函数为cvThreshold xff0c 它采用Canny方法对图像进行边缘检测 xff1a span class token keyword void span span class token function c
  • cvSetImageROI函数

    有时候我们需要从一幅图像中获取感兴趣的区域 region of interesting xff0c ROI xff0c 将该区域裁剪成小图像 xff0c 作为后期处理的输入 利用cvSetImageROI函数便可以轻松搞定 xff1a sp
  • 原码、反码和补码

    文章目录 机器数和真值机器数真值 原码 反码和补码原码反码补码 编码原因 机器数和真值 机器数 一个数在计算机中的二进制表示形式叫做这个数的机器数 机器数是带符号的 xff0c 计算机用一个数的最高位来存放符号 xff0c 正数为0 xff
  • 阿里云服务器为Ubuntu配置图形化界面

    准备工作 xff1a 台云服务器 ubuntu系统20 04 连接网络 首先打开控制台 紧接着连接服务器 第一次登录需设置登录密码 xff0c 设置好之后会出现以下界面 xff0c 点击确定 配置图形界面 登陆好之后先切换root用户 su
  • 信用卡欺诈检测:2021 年顶级机器学习解决方案

    在公众号 python风控模型 里回复关键字 xff1a 学习资料 从电子商务支付系统出现的那一刻起 xff0c 总是有人会找到新的方法来非法获取某人的资金 这已成为现代时代的一个主要问题 xff0c 因为只需输入您的信用卡信息即可轻松在线
  • 矩阵分解

    1 先了解一下 矩阵乘法 xff08 内积 点乘 矩阵的内积参照向量的内积的定义的 xff0c 先说说向量 xff1a 两个向量对应乘积之和 比如 61 1 2 3 61 4 5 6 xff0c 则 的内积等于 1 4 43 2 5 43
  • 建立一个消息队列,OSQCreate()

    程序清单 L6 21是OSQCreate 函数的源代码 该函数需要一个指针数组来容纳指向各个消息的指针 该指针数组必须声名为void类型 OSQCreate 首先从空闲事件控制块链表中取得一个事件控制块 xff08 见图F6 3 xff09
  • 最优化算法汇总,及计算实例20220621(持续更新中)

    目录 0 最优化问题分类 xff0c 求解方法分类 1 最优化问题分类 xff08 线性规划与最小二乘法的关系 xff09 1 1 请问什么才是线性规划 xff0c 什么是线性回归呢 xff1f 1 2 线性规划与最小二乘法的关系 2 最小

随机推荐