你是不是也覺得廣告非常煩人呢?就讓我們一起來看看 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 來實現,需要自行架設,可能會有漏網之魚,不過可調性高 | 否 |
這麼多選項怎麼選?如果需求是以下
- 免費
- 擋廣告
- 多裝置通用
我會建議使用 AdGuard DNS,主要原因為
- 智慧型裝置聯網都需要使用 DNS,是通用的阻擋廣告方式
- 電腦以 Chrome + AdGuard 瀏覽器擴充功能 為輔佐,基本上就能抵擋大部分的廣告與追蹤。
- 手機的話,瀏覽器可以改用 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,此時瀏覽器會做的事情:
- 向 DNS 詢問 google.com 的 IP
- DNS 回答 172.217.27.142
- 向 172.217.27.142 請求連線
- 連線成功,開始下載網頁並顯示
如果今天是一個壞壞的 DNS ,專門提供錯誤資訊,此時會發生
- 向 DNS 詢問 google.com 的 IP
- DNS 回答 0.0.0.0
- 向 0.0.0.0 請求連線
- 連線失敗,無法顯示網頁
看到這裡有什麼靈感嗎?如果 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 來啟動,其中
- 版本號可能會更新,請參考 https://hub.docker.com/r/adguard/adguardhome
- 在 docker-compose 同層目錄下建立 work 和 conf 兩個資料夾,用來儲存設定和運作時的資料
- 如果有裝防火牆,記得開啟 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/
會看到歡迎頁面,裡面全部中文化,可以輕鬆的一步步下去
管理介面的 port 可以沿用 3000,除非另有需求再自行變更。DNS 則建議保持 53。
緊接著設定管理員帳密
最後會提供配置指南,這邊我們後面再帶大家一起做
完成後,就可以看到 AdGuard Home 的 Dashboard,非常清晰明瞭的 UI
進階設定 AdGuard Home
架設好就可以開箱及用,但別忘記我們架他就是為了可調性,所以一起來看看哪些設定值得我們去微調
上游 DNS Server
之前在使用 AdGuard DNS 的時候,有時能夠感覺出他的延遲比 google 的 DNS 8.8.8.8 來得高。如果使用 AdGuard Home 就可以自行決定上游 DNS 為資料來源以解決此問題!方法如下:
- 到 設定 -> DNS 設定頁面
- 於輸入匡中填入上游 DNS 位置
- 下方可以勾選「並行的請求」,一次對所有 DNS 灑出 request,加快處理
我這邊除了加入 google DNS,也另外加入了中華電信的 DNS
DNS 封鎖清單
最重要的來了!可調性就在此,你可以自行封鎖網域,或是直接引用網路上現成的封鎖清單,組合成你自己的封鎖黑名單!
點選「新增封鎖清單」按鈕,會發現可以從 AdGuard 提供的清單下去直接勾選,也可以點選「新增一個自訂清單」,把檔案 url 填進去即可。AdGuard Home 就會定期自動去更新,保持黑名單最新狀態!
從查詢記錄下去增加封鎖
查詢記錄會列出所有裝置查詢的歷史,如果發現特定的網域要封鎖,游標移上去後直接點選右邊的封鎖按鈕即可
用戶端設定
如果需要對不同的裝置有不同的設定(比如對小孩要封鎖色情網站),就可以在這邊設定。在 識別碼 欄位中可填入對應的 IP 或 MAC address 等。
其他雜項這邊就不多說,大家可以自己調整玩玩看!
設定 WiFi router
只要你的 WiFi router 有提供 DHCP,裝置預設都會透過 DHCP 去抓 DNS 位置。所以我們透過 router 一次讓在此區網下的所有裝置都能使用我們架設的 AdGuard Home 或者是 AdGuard DNS。
註:如果你區網喜歡用固定 IP,或者電腦會自行設定 DNS 位置,就需要手動另外修改,而不完全適用這邊介紹的方法囉!但我相信大部分的使用者都會適用的XD
首先進入你的 router 管理介面,這邊以 Deco x60 app 為例,其他大同小異。
- 在 進階 頁面中點選 DHCP 伺服器
- 將「主要 DNS」填入 AdGuard Home IP 或者是 AdGuard DNS 的 IP
- 「次要 DNS」可以看成備用,除非主要 DNS 掛掉才會使用,所以填入 google DNS 8.8.8.8 。也可以依照你自己的喜好下去設定
儲存後離開,這樣就完成了!
隨便找一台裝置重新連結 Wifi,試試看廣告是不是都消失了呢?很簡單吧!如果覺得我文章內容對你有幫助的話,請在文章後面幫我按 5 個讚!讓我知道大家都喜歡什麼內容哦!
範例原始碼在此下載:github
延伸閱讀:十分鐘架設自己的 VPN server