AdGuard Home 超簡單架設教學!

你是不是也覺得廣告非常煩人呢?就讓我們一起來看看 AdGuard 出品,免費的 AdGuard Home 實現原理,以及如何架設吧!

什麼是 AdGuard Home

首先簡單介紹一下 AdGuard ,主要是推出廣告阻攔、隱私保護解決方案的公司。旗下有非常多產品,我們可以簡單用一個表格來呈現

名稱描述是否收費?
AdGuard最主要的商品之一,透過安裝 AdGuard 程式在電腦或手機裡來達成其功能。有 windows, mac, android, ios 版本
AdGuard VPN透過 VPN server 來實現,同時也能滿足 VPN 飛人的需求
AdGuard DNS利用 DNS sinkhole 來實現,可以阻擋大部分的廣告和追蹤,可能會有漏網之魚
AdGuard 瀏覽器擴充功能chrome 的擴充功能,透過分析網頁內容來實現
AdGuard Home也是利用 DNS sinkhole 來實現,需要自行架設,可能會有漏網之魚,不過可調性高

這麼多選項怎麼選?如果需求是以下

  1. 免費
  2. 擋廣告
  3. 多裝置通用

我會建議使用 AdGuard DNS,主要原因為

  1. 智慧型裝置聯網都需要使用 DNS,是通用的阻擋廣告方式
  2. 電腦以 Chrome + AdGuard 瀏覽器擴充功能 為輔佐,基本上就能抵擋大部分的廣告與追蹤。
  3. 手機的話,瀏覽器可以改用 Brave 來做輔佐。App 內廣告依然只能靠 AdGuard DNS 阻擋,可能會有漏網之魚

那何時需使用 AdGuard Home 呢?前面表格分析可以看出,AdGuard DNS 和 AdGuard Home 原理都是透過 DNS sinkhole 來實現,但就差在「可調性」!有時候 AdGuard DNS 會誤殺或少殺廣告,如果使用 AdGuard Home 的話,就可以自行調控黑白名單,達到客製化的效果。

什麼是 DNS sinkhole

前面提到 AdGuard DNS 和 AdGuard Home 的原理為 DNS sinkhole,這是什麼意思呢?首先我們需要了解整個網頁請求的過程。

假設今天你想透過瀏覽器前往 google.com,你會在瀏覽器中輸入 url 後按下 enter,此時瀏覽器會做的事情:

  1. 向 DNS 詢問 google.com 的 IP
  2. DNS 回答 172.217.27.142
  3. 向 172.217.27.142 請求連線
  4. 連線成功,開始下載網頁並顯示

如果今天是一個壞壞的 DNS ,專門提供錯誤資訊,此時會發生

  1. 向 DNS 詢問 google.com 的 IP
  2. DNS 回答 0.0.0.0
  3. 向 0.0.0.0 請求連線
  4. 連線失敗,無法顯示網頁

看到這裡有什麼靈感嗎?如果 DNS 內部有一個黑名單,記載所有廣告資源的網域名稱 (domain name) ,在使用者詢問時,故意給予錯誤的 IP 位置,這樣就能讓他連線失敗而無法顯示廣告!

正因為使用 DNS sinkhole 的方式,我們只能對網域名稱下去做阻擋,如果該廣告資源使用的網域名稱和正常的網頁相同,我們反而無法對他做阻擋,否則會導致正常網頁也無法顯示,這也是 DNS sinkhole 的能力限制(比如 youtube 內置的影片型廣告)。為了補足這方面的缺失,才會建議搭配 AdGuard 瀏覽器擴充功能 或是 Brave 瀏覽器,他會透過分析 html 或者 javascript 的內容來做更近一步的阻擋,完善整個防護。

如何簡單架設 AdGuard Home

如果你需要可調性,又有一點 DIY 和 docker 的知識,我們就可以一起來架設他!反之可以跳過這一塊,直接看後面 設定 WiFi router 章節使用 AdGuard DNS。

我們使用 Raspberry pi 來架設,如果你手上有其他的 SBC 基本上也能通用。

直接用以下 docker compose file 來啟動,其中

  1. 版本號可能會更新,請參考 https://hub.docker.com/r/adguard/adguardhome
  2. 在 docker-compose 同層目錄下建立 work 和 conf 兩個資料夾,用來儲存設定和運作時的資料
  3. 如果有裝防火牆,記得開啟 53 和 3000 port
version: '2.3'
services:
  vpn-service:
    image: adguard/adguardhome:v0.107.0-b.5
    container_name: adguardhome
    restart: always
    mem_limit: 256M
    logging:
      driver: "json-file"
      options:
        max-size: "1k"
        max-file: "3"
    ports:
     - "53:53/tcp"
     - "53:53/udp"
     - "3000:3000/tcp"
    networks:
      - adguardhome
    volumes:
      - ./work:/opt/adguardhome/work
      - ./conf:/opt/adguardhome/conf      

networks:
  adguardhome:
    name: adguardhome-network
    driver: bridge

到 console 下

docker-compse up -d

即可順利啟動,就這麼簡單一步驟!

初始設定 AdGuard Home

請先確認你的 Raspberry pi 的 內網 IP,我們假設是 192.168.68.57,於是我們在瀏覽器輸入

http://192.168.68.57:3000/

會看到歡迎頁面,裡面全部中文化,可以輕鬆的一步步下去

AdGuard Home 超簡單架設!

管理介面的 port 可以沿用 3000,除非另有需求再自行變更。DNS 則建議保持 53。

AdGuard Home 超簡單架設!

緊接著設定管理員帳密

AdGuard Home 超簡單架設!

最後會提供配置指南,這邊我們後面再帶大家一起做

AdGuard Home 超簡單架設!

完成後,就可以看到 AdGuard Home 的 Dashboard,非常清晰明瞭的 UI

AdGuard Home 超簡單架設!

進階設定 AdGuard Home

架設好就可以開箱及用,但別忘記我們架他就是為了可調性,所以一起來看看哪些設定值得我們去微調

上游 DNS Server

之前在使用 AdGuard DNS 的時候,有時能夠感覺出他的延遲比 google 的 DNS 8.8.8.8 來得高。如果使用 AdGuard Home 就可以自行決定上游 DNS 為資料來源以解決此問題!方法如下:

  1. 到 設定 -> DNS 設定頁面
  2. 於輸入匡中填入上游 DNS 位置
  3. 下方可以勾選「並行的請求」,一次對所有 DNS 灑出 request,加快處理

我這邊除了加入 google DNS,也另外加入了中華電信的 DNS

AdGuard Home 超簡單架設!

DNS 封鎖清單

最重要的來了!可調性就在此,你可以自行封鎖網域,或是直接引用網路上現成的封鎖清單,組合成你自己的封鎖黑名單!

AdGuard Home 超簡單架設!

點選「新增封鎖清單」按鈕,會發現可以從 AdGuard 提供的清單下去直接勾選,也可以點選「新增一個自訂清單」,把檔案 url 填進去即可。AdGuard Home 就會定期自動去更新,保持黑名單最新狀態!

AdGuard Home 超簡單架設!
AdGuard Home 超簡單架設!

從查詢記錄下去增加封鎖

查詢記錄會列出所有裝置查詢的歷史,如果發現特定的網域要封鎖,游標移上去後直接點選右邊的封鎖按鈕即可

AdGuard Home 超簡單架設!

用戶端設定

如果需要對不同的裝置有不同的設定(比如對小孩要封鎖色情網站),就可以在這邊設定。在 識別碼 欄位中可填入對應的 IP 或 MAC address 等。

AdGuard Home 超簡單架設!

其他雜項這邊就不多說,大家可以自己調整玩玩看!

設定 WiFi router

只要你的 WiFi router 有提供 DHCP,裝置預設都會透過 DHCP 去抓 DNS 位置。所以我們透過 router 一次讓在此區網下的所有裝置都能使用我們架設的 AdGuard Home 或者是 AdGuard DNS。

註:如果你區網喜歡用固定 IP,或者電腦會自行設定 DNS 位置,就需要手動另外修改,而不完全適用這邊介紹的方法囉!但我相信大部分的使用者都會適用的XD

首先進入你的 router 管理介面,這邊以 Deco x60 app 為例,其他大同小異。

  1. 在 進階 頁面中點選 DHCP 伺服器
  2. 將「主要 DNS」填入 AdGuard Home IP 或者是 AdGuard DNS 的 IP
  3. 「次要 DNS」可以看成備用,除非主要 DNS 掛掉才會使用,所以填入 google DNS 8.8.8.8 。也可以依照你自己的喜好下去設定
AdGuard Home 超簡單架設!

儲存後離開,這樣就完成了!

隨便找一台裝置重新連結 Wifi,試試看廣告是不是都消失了呢?很簡單吧!如果覺得我文章內容對你有幫助的話,請在文章後面幫我按 5 個讚!讓我知道大家都喜歡什麼內容哦!

範例原始碼在此下載:github

延伸閱讀:十分鐘架設自己的 VPN server

Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。 離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。 可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。