【Openwrt】一鍵改善Adguard Home擋廣告效果、解決過濾不全的簡單方法

你也有在Openwrt路由器上用Adguard Home來過濾廣告嗎?但是發現過濾不全、有時有效有時無效?本文分享一個極其簡單的方法,提高Adguard Home的過濾效果。

本文又是一個20分鐘寫出的文章。我發現這個20分鐘寫作大法極其有效,每週能有1~2篇更新。這不是犧牲質量換取數量的做法,而是0和1的做法,如果不是逼着自己20分鐘寫出來,我一個月也寫不了一個分享。所以我應該會堅持20分鐘寫作大法一段時間看看。

什麼是Adguard Home (已經在用的用戶請跳過)

 AdGuard Home 是一個免費的廣告阻擋解決方案,通過自行架設,你可以有效地阻擋大部分廣告和追蹤。以下是一些相關資訊:

  1. 什麼是 AdGuard Home?
    • AdGuard Home 是一個基於 DNS sinkhole 技術的廣告阻擋工具。
    • 你可以自行在 路由器 (Openwrt系統)、Raspberry Pi 等Linux架構設備上架設 AdGuard Home。
  2. 如何簡單架設 AdGuard Home?
    • Openwrt 可以使用AdGuard Home 套件。Linux 使用 Docker Compose 配置文件來啟動 AdGuard Home。
    • 設定管理介面的 port(通常使用 3000)和 DNS(通常使用 53,或者其他端口以避免和本身的DNS服務衝突)。
    • 設定管理員帳號和密碼。
  3. 進階設定:上游 DNS Server 和過濾列表
    • 你可以自行選擇上游 DNS 伺服器,以解決延遲問題。
    • 在 AdGuard Home 的設定中,你可以指定上游 DNS 的位置,例如 Google DNS(8.8.8.8),或者加密DNS(DNS ON TLS,DNS ON HTTPS等等)。
    • 可以設定廣告、不良網站、成人網站等等的過濾列表
  4. 為什麼使用 AdGuard Home?
    • AdGuard Home 具有高度的可調性,你可以自行調控黑白名單,達到客製化的效果。
    • 如果你需要更精細的控制,AdGuard Home 是一個不錯的選擇。

Adguard Home的配置方法

根據Openwrt的官方Adguard Home說明文檔,是需要更改原本的DNS服務(dnsmasq)的DNS綁定端口,讓出53端口給Adguard Home去用。但對於一個新手來說,這樣做的風險有兩個,

  1. 如果做錯了,整個路由器會無法解析域名,
  2. 如果修改端口做對了,但是Adguard Home出了什麼問題,要還原端口修改又是一大工程

因此,小U更推薦一種折衷的方法:DNS Forwarding。就是讓原本的DNS繼續運作在53端口, Adguard Home運作在5333之類的隨機端口,然後透過 DNS Forwarding 轉發 DNS請求給54端口。因爲DNS轉發的設置極其簡單,如果 Adguard Home 有什麼三長兩短,可以立即 fallback 回原來的DNS服務,而無需修改端口。小U爲Ups-WR30U、Ups-AX6000等等Openwrt路由器配置 Adguard Home 過濾廣告都是用這種方法。如下圖:

DNS Forwarding導致的過濾不全問題

在開發 X-RAY VPN直連路由器套裝的時候,因爲要確保沒有DNS泄漏(被污染),我開着 WIREGUARD 去抓包DNS的數據,發現爲什麼開了 Adguard Home ,依然有在使用 ISP 提供的DNS服務器?難道 Adguard Home 有問題?但不對啊,多數廣告還是會被擋掉的?這是什麼原因呢?

尋找了一段時間,我翻看 Openwrt 的 System Logs 發現當路由器啓動不久,從WAN端口拿到 IP後,後自動把WAN端口的DHCP信息(包含DNS)都綁定到了 dnsmasq 服務上。然而在 Adguard Home 啓動後,這些 ISP的 DNS nameserver 是和 Adguard Home 並存的!也就是說,有部分的 DNS 請求,並沒有100%走到Adguard Home之中。

這也解釋了爲什麼最近小U不時都會看到網頁廣告,我以爲這是 Adguard Home 的過濾列表不全、或者是網站自己客製化、或非主流的廣告系統。

屏蔽 ISP DNS Nameserver伺服器的方法

現在解決方法有兩個:

  1. 跟回官方的指引,修改原來 dnsmasq 的DNS端口
  2. 讓 dnsmasq 不去用 ISP的 nameserver

第一種方法的“難處”一開始已經說了。第二種方法,是極其簡單。首先來到 Network -> DHCP and DNS , 然後選擇 Resolv & Hosts Files 選單:

勾選 Ignore resolv file , 這樣子系統就不會使用WAN 的DHCP 的 DNS Nameserver。如果Adguard 有什麼問題,只需要把這一項去掉,就能夠正常上網。

P.S. 測試環境是 23.05.3 的官方Openwrt 版本。

本文完成時間:25分鐘,超時啦!!! 有問題請留言,下次見拜拜~

本文是小U的「玩開源、從OpenWRT開始」系列文章的其中一篇。自從Ups-WR30U開源路由器得到大家的熱烈支持,小U也收到了客戶的各種使用OpenWRT的問題查詢,順勢就着手把大家會遇到的,想要用的,都集結成這個系列的文章,希望讓各位從OpenWRT體驗和玩樂開源系統。不需要靠AI,你就能讓路由器變得更”聰明“!

如果你還未有OpenWRT路由器,不妨從 Ups-WR30U 上手吧:

歡迎你的留言討論:

你可以一針見血

by Upsangel
Logo