使用 Envoy 和 AdGuard Home 阻擋煩人的廣告

2021-01-14 雲原生實驗室

通常我們使用網絡時,寬帶運營商會為我們分配一個 DNS 伺服器。這個 DNS 通常是最快的,距離最近的伺服器,但會有很多問題,比如:

訪問某些網絡服務很緩慢,比如 Apple 的 iCloud 服務。

比較擔心安全問題,希望能通過設置 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 的安裝方法如下:


$ wget https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.98.1/AdGuardHome_MacOS.zip


$ unzip AdGuardHome_MacOS.zip && cd AdGuardHome_MacOS


$ cp ./AdGuardHome /usr/local/bin/


$ 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。

查看埠號:

打開瀏覽器,輸入網址 http://127.0.0.1:3000/ 即可訪問 AdGuard Home 的管理界面。

點擊「開始配置」,然後設定網頁管理界面和 DNS 服務的埠。

點擊「下一步」設置用戶名和密碼。

最後點擊「下一步」就大功告成了。

在儀錶盤上,我們可以看到 DNS 查詢次數、被過濾器攔截的網站、查詢 DNS 請求的客戶端地址等等信息。

現在再查看埠號,管理界面會變成你剛剛設定的埠,另外還會多出一個 DNS 服務的埠:



默認的配置比較簡單,為了更強力地攔截廣告,我們可以對配置進行優化。

常規設置

勾選【使用過濾器和 Hosts 文件以攔截指定域名】、【使用 AdGuard 瀏覽安全網頁服務】、【強制安全搜索】。如果你想攔截成人網站,也可以勾選【使用 AdGuard 家長控制服務】。

過濾器

雖然 AdGuard 本身提供了 AdGuard、AdAway 的廣告過濾規則,但在中國有點水土不服,如果要想更完美的實現廣告屏蔽還需要自己添加規則,AdGuard 可以兼容 Adblock 的語法。最知名的過濾規則 EasyList 就是由 Adblock Plus 團隊維護,過濾規則往往是一個 txt 文件,在文件的開頭部分會顯示規則的最後更新日期。

推薦廣告過濾規則:

優酷網如果播放無限加載,那在自定義靜態規則裡加入一條規則 @@mp4.ts (參考下圖)。

上遊 DNS 設置

官方默認使用 Cloudflare 的 DNS over HTTPS 作為上遊伺服器,在國內可能請求上遊 DNS 延遲比較高,可以加上或替換國內的 DNS。我自己另外加了中科大的兩組無汙染 DNS,每次查詢的時候會對所有的上遊 DNS 同時查詢,加速解析。

查詢日誌

在這個界面裡可以看見所有設備的 DNS 查詢日誌,可以下載整個日誌文件,也可以針對某個域名進行快速攔截和放行。

提升 QPS

有兩個參數可以明顯提升 QPS:

配置文件默認路徑是 /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 ...

🍺  /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 配置文件:

創建 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,這個就不用我教了吧?



碼關注公眾號

後臺回復◉圖譜◉領取史上最強 Kubernetes 知識圖譜



相關焦點

  • AdGuard Home 安裝及使用指北
    Windows 系統下載二進位文件使用瀏覽器 / 下載工具下載:https://static.adguard.com/adguardhome/edge/AdGuardHome_windows_amd64.zip解壓壓縮包得到 AdGuardHome.exe 文件
  • 和廣告說再見!ADGUARD全客戶端設置教程4.0
    其實去廣告的方法和軟體有很多,選擇adguard的主要是因為全平臺支持,客戶端界面清爽,設置簡單。支持正版聲明:目前瀏覽器和路由器版本免費,電腦和手機需要收費,adguard個人版終身三設備官網售價189.9(安裝以後卸載會彈出優惠頁面,優惠後127可選銀聯卡片支付),某寶售價在120左右,強烈建議大家購買正版,避免使用未知來源的破解版出現任何問題,或者購買可安裝openwrt的路由器。
  • Android廣告攔截器——AdGuard Premium
    小編分享一個AdGuard Premium 廣告攔截破解版無需出米即是永久訂閱版。經過一段時間的使用比較滿意,就分享給大家。Adguard為你提供了一個可靠的、可管理的保護,就沒有你們的參與濾波器加載網頁。adguard移除所有煩人的廣告,阻止危險網站的加載,也不會允許任何人在網上跟蹤你的活動。
  • Adguard PRO v3.1.32高級版『去廣告大殺器』
    所有高級功能全開啟,無需Root,即可使用。Adguard為你提供了一個可靠的、可管理的保護,就沒有你們的參與濾波器加載網頁。adguard移除所有煩人的廣告,阻止危險網站的加載,也不會允許任何人在網上跟蹤你的活動。Adguard為你提供了一個可靠的、可管理的保護,就沒有你們的參與濾波器加載網頁。
  • AdGuard Home簡單配置
    安卓手機中搭建adguard home廣告攔截反跟蹤DNS服務AdGuardHome最主要的還是dns防汙染和提高網頁加載速度的,防廣告功能有限,只是攔截域名,還是用瀏覽器擴展比較好,可以屏蔽網頁元素,攔截廣告比較明顯。
  • 搭建屬於你自己的私人DNS及廣告過濾——AdGuardHome-92km教程
    AdGuard Home 是一款全網廣告攔截與反跟蹤軟體。在您將其安裝完畢後,它將保護您所有家用設備,同時您不再需要安裝任何客戶端軟體。隨著物聯網與連接設備的興起,掌控您自己的整個網絡環境變得越來越重要。
  • 搭建 AdGuard Home 幫助區域網內設備過濾廣告
    如果你的設備比較多的話可以在 區域網 內搭建並進行廣告過濾,本文以 Linux 平臺為例進行說明,視頻演示 中也將給大家帶來 Windows 版的使用教程。root 帳戶權限執行下方命令:yum install wget && wget https://static.adguard.com
  • AdGuard- 世界上最高級的廣告攔截器!
    今天小C分享的就是可以攔截那些煩人廣告的APP——AdGuard(安卓),還是永久免費版的!這個軟體是非常的強大,強大到什麼程度?聽小C娓娓道來!這款軟體是一個比較實用的廣告攔截管理軟體,可以攔截網絡上的各種廣告和瀏覽器上的追蹤器,不僅可以保護個人隱私信息,還可以可以締造一個安全、潔淨、
  • 廣告攔截專家 Adguard Premium v7.4.3121 中文特別版
    世界上最高級的廣告攔截程序!Adguard Premium是擺脫惱人廣告,在線跟蹤,保護您遠離惡意軟體的最佳方式。AdGuard 使您網絡衝浪更快速,更安全,更安逸!AdGuard for Windows 不只是廣告攔截程序,它還組合了可獲取最佳網絡體驗所需功能的多用途工具。其可攔截廣告和危險網站,加速網頁載入,保護兒童的在線安全。
  • 使用 AdGuard Home 屏蔽電腦手機投影電視廣告,並防止跟蹤
    好不容易有了一些廣告屏蔽大師什麼的程序,結果只能屏蔽電腦,個別還可以手機。但是智能電視、智能投影儀、車載平板等其他智能網絡設備該如何是好呢?昨天折騰了無憂雲的香港伺服器,發現適合用來做私人 DNS 伺服器,所以今天教你使用 AdGuard Home 搭建一個無廣告和跟蹤的私人 DNS 給電腦、手機、智能電視投影等設備去廣告。
  • 利用樹莓派+AdGuard屏蔽小米廣告
    其組合了世界上最高級的廣告攔截器,隱私保護模塊以及家長控制 - 可協同任何瀏覽器和應用工作。在樹莓派下安裝wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_arm.tar.gztar xvf AdGuardHome_linux_arm.tar.gzsudo .
  • 安卓手機中搭建adguard home廣告攔截反跟蹤DNS服務;iOS14beta版描述文件
    如果對運營商劫持,dns汙染深惡痛絕,就可以嘗試使用這些相對比較純淨的服務。adguard屏蔽廣告還算挺實用的,adguard home廣告攔截反跟蹤的DNS服務,延遲也不高,也可以提高響應速度,屏蔽廣告,屏蔽指定網站,屏蔽ipv6,自定義上遊dns,自定義hosts規則等等。
  • AdGuard Pro安卓廣告攔截「3.3.87」for Android內購特別版/廣告攔截大殺器
    這款 AdGuard for Android 是應用於安卓手機上面的廣告攔截APP軟體,使用 AdGuard for Android 可以有效的攔截各類視頻廣告,彈窗廣告,流氓廣告,色情網站等等不健康的內容,AdGuard for Android 移除所有煩人的廣告,阻止危險網站的加載,也不會允許任何人在網上跟蹤你的活動。
  • DNS層面的廣告過濾器:AdGuard Home
    AdGuard是優秀的廣告過濾工具,其公司推出了一系列廣告過濾工具包括:瀏覽器插件層面的廣告過濾器、各作業系統(Windows、iOS、Android、Mac、Linux等)層面的廣告過濾器,也賣帶廣告過濾功能的路由器設備,最近還推出了AdGuard DNS,只要將DNS地址設置為
  • AdGuard Home搭建私人無廣告無跟蹤的公共DNS伺服器
    放行3000埠(AdGuardHome初始化需要使用)註:如果你使用的是阿里雲伺服器的話,要進入阿里雲裡面開放埠的。2400:3200:baba::1https://dns10.quad9.net/dns-queryhttps://doh.360.cn/dns-queryhttps://dns.google/dns-queryhttps://doh.opendns.com/dns-queryhttps://1.1.1.1/dns-queryhttps://dns.adguard.com
  • 用上這個神器後,廣告從此去無憂!(全平臺免費支持,無需安裝任何客戶端軟體)
    雖然通過預編譯的二進位版本安裝已經很簡單了,但如果使用 Docker 來安裝,你會發現僅僅只需一條指令就可以搞定了。$ docker pull adguard/adguardhome# -v 參數後面指定的宿主機上的目錄主要用作永久保存 AdGuard Home 的數據文件和配置文件,可自行根據實際情況修改。
  • AdGuard Home 入門教程:通過搭建 DNS Server 實現多設備屏蔽廣告
    如果我要屏蔽整個設備上的廣告,光靠插件就束手無策了。這種情況下,我們可以藉助開源項目 AdGuard Home[1],在自己的 VPS 上搭建專屬的 DNS Server 來實現多設備屏蔽廣告。在這篇文章中,我將介紹下 AdGuard Home 安裝和使用方法。
  • Adguard 全平臺最新破解版 — 廣告攔截工具
    其組合了世界上最高級的廣告攔截器,隱私保護模塊以及家長控制 - 可協同任何瀏覽器和應用工作。比設置社更容易使用,而且強大高度可定製 ,擁有廣告攔截程序應有的一切。新的Adguard讓用戶完全享受網上衝浪沒有任何分心。在YouTube、Twitch或任何其他網站上觀看你想看的視頻,而不是視頻廣告。看看你朋友的照片,而不是Facebook和其他社交網絡上沒完沒了的橫幅。
  • AdGuard v3.6.1高級版
    ,堪稱去廣告大殺器。Adguard安卓版無需ROOT權限,可攔截所有應用和瀏覽器的廣告。具有廣告內容攔截跟蹤器(包括:廣告攔截過濾器、社交過濾器、隱私過濾器、安全過濾器、自定義過濾器)、DNS過濾、HTTPS過濾、節省應用流量數據管理及隱身模式保護個人隱私功能。
  • 使用adguard home半年體驗
    之前一直用的是運營商的dns,直到一次莫名其妙被劫持之後,就開始折騰各種防劫持防汙染的方法,兜兜轉轉還是用回了adguard home,開源免費,還可以攔截部分廣告,使用也相對比較簡單一點。AdGuard Home簡單配置自己電腦上主要是用dnscrypt-proxy;iOS14也開始支持doh了,可以通過添加描述文件使用doh:https://bbs.zsxwz.com/thread-3582.htmadguard home