開啟 3 天免費試用
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。


穩妥的 AdGuard Home 架設做法,是把解析服務放在一部區域網絡主機上,只回應你列明的裝置;指定域名交由各自的上游 DNS 處理,其餘查詢一律經一個加密的預設上游。先以一部裝置試用,確認過濾有效、沒有洩漏,並保留已驗證的還原方法。
關鍵要點:
- 固定一個發行版本並核對雜湊值,改動前先記錄主機原有的解析設定。
- 以可撤回的方式,讓 systemd-resolved 的 stub 監聽騰出 53 端口。
- 防火牆規則與允許客戶端清單共同決定誰能得到回應,兩者都要設定。
- 按域名指定上游,把本地名稱和公司域名交給各自的伺服器。
- 先還原裝置設定,再解除安裝服務並恢復解析設定。
準備一部家中區域網絡內的原生 Ubuntu 24.04 LTS x64 主機,或一部只能經私人網絡連接的 VPS,另加一部由你控制的測試裝置。本文以 AdGuard Home v0.107.79 為準,該版本於 2026 年 8 月 18 日發布。[1] 本文依據下列官方來源整理,未完成完整端到端實測。
AdGuard 官方說明了壓縮檔安裝、服務指令和端口:首次執行的設定精靈使用 TCP 3000,網頁介面預設使用 TCP 80,DNS 則用 UDP 53。[2] GitHub 上的舊 Wiki 已標示過時並指向 Knowledge Base,指令有出入時以 Knowledge Base 為準。[3]
長期運作的解析器代表持續維護,可先參考自行架設服務的維護責任總覽評估。本文有別於 Pi-hole 單一裝置試用,也不同於自行架設 Unbound 遞迴解析器:AdGuard Home 負責轉發查詢,並容許你按域名揀選上游。域名封鎖本身亦有任何解析器都無法消除的限制,可參閱 DNS 廣告封鎖的實際運作方式。
如主機屬於共用的正式環境、由他人管理,或 53 端口可從互聯網連入,請停止操作。切勿把這個解析器公開到互聯網。
AdGuard Home 可使用一般 DNS、DNS-over-TLS(tls://)、DNS-over-HTTPS(https://)、DNS-over-QUIC(quic://)及 DNS stamps 作為上游。以 [/example.local/] 加伺服器位址寫成的一行,會把該域名及其子域名送往該伺服器;# 則代表「使用預設上游」。[4]
| 查詢類型 | 建議上游 | 原因 |
|---|---|---|
| 公共域名 | 一個加密的預設上游 | 網絡供應商不再看到明文查詢 |
路由器本地名稱,例如 .lan | 路由器的區域網絡位址 | 只有路由器知道這些名稱 |
| 公司或實驗室域名 | 該網絡的內部解析器 | 公共解析器無法回應 |
| 私人位址的反向查詢 | Private reverse DNS servers 欄位 | AdGuard 要求私人網段寫在這裏 |
先保存現時的解析狀態,方便日後原樣還原:
readlink -f /etc/resolv.conf
resolvectl status
sudo ss -lntup
在 Ubuntu 上,systemd-resolved 於 127.0.0.53 和 127.0.0.54 執行 stub 監聽,而 /etc/resolv.conf 通常指向 stub 檔案。[5] 記下區域網絡介面、主機的區域網絡位址、測試裝置位址和管理裝置位址。
趁主機 DNS 仍然正常時下載發行檔,並以官方公布的校驗檔核對:
cd "$(mktemp -d)"
VER='v0.107.79'
BASE="https://github.com/AdguardTeam/AdGuardHome/releases/download/$VER"
curl -fLO "$BASE/AdGuardHome_linux_amd64.tar.gz"
curl -fLO "$BASE/checksums.txt"
sha256sum -c --ignore-missing checksums.txt
tar -xzf AdGuardHome_linux_amd64.tar.gz
sudo mv AdGuardHome /opt/AdGuardHome
校驗結果顯示 OK 才繼續。若 /opt/AdGuardHome 已經存在,先停下查明是誰安裝的。
首次執行時程式監聽 0.0.0.0:3000,區域網絡內任何裝置都能開啟設定精靈。[2] 在已經覆核、預設拒絕入站的 UFW 政策下,只放行今次試用所需的流量;請替換介面名稱及位址:[6]
LAN_IF='enp1s0'
TEST_V4='192.168.1.25'
ADMIN_V4='192.168.1.10'
sudo ufw allow in on "$LAN_IF" from "$TEST_V4" to any port 53 proto udp
sudo ufw allow in on "$LAN_IF" from "$TEST_V4" to any port 53 proto tcp
sudo ufw allow in on "$LAN_IF" from "$ADMIN_V4" to any port 3000 proto tcp
sudo ufw status numbered
保留 SSH 規則和本機主控台。若 UFW 尚未啟用,應先建立預設拒絕政策,而不是略過這一步。
DNSStubListener=no 會關閉 stub 監聽,而 /etc/systemd/resolved.conf.d/ 內的片段檔會覆蓋主設定檔。[7] AdGuard 的 FAQ 提供以下手動修正方法,並指明 DNS=127.0.0.1 這一行不可缺少:[8]
sudo mkdir -p /etc/systemd/resolved.conf.d
printf '[Resolve]\nDNS=127.0.0.1\nDNSStubListener=no\n' | sudo tee /etc/systemd/resolved.conf.d/adguardhome.conf
sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl reload-or-restart systemd-resolved
sudo ss -lntup | grep ':53 '
最後一個指令在 53 端口上應該沒有輸出。此後主機本身的域名查詢會失敗,直至 AdGuard Home 在 127.0.0.1 上回應,所以下載要放在前面。設定精靈也有針對這個衝突的 Fix 按鈕;手動做法會留下一個日後可直接刪除的檔案。[8]
cd /opt/AdGuardHome
sudo ./AdGuardHome -s install
sudo ./AdGuardHome -s status
在管理裝置開啟 http://HOST_LAN_IP:3000。在設定精靈中,把管理網頁介面綁定到主機區域網絡位址的 3000 端口,把 DNS 伺服器綁定到區域網絡位址的 53 端口,並建立一個使用長而獨特密碼的管理員帳戶。[2]
只可在服務停止時編輯設定檔,因為運作中的程式會覆寫檔案改動。[9] 只修改現有分節內的以下鍵值:
sudo /opt/AdGuardHome/AdGuardHome -s stop
sudoedit /opt/AdGuardHome/AdGuardHome.yaml
http:
address: 192.168.1.53:3000
dns:
bind_hosts:
- 127.0.0.1
- 192.168.1.53
port: 53
allowed_clients:
- 127.0.0.1
- 192.168.1.25
querylog:
enabled: true
interval: 24h
statistics:
interval: 24h
bind_hosts 限定在哪些位址提供 DNS;allowed_clients 清單不是空的時候,只有清單內的位址能得到回應。[9] 保留回送位址,是因為主機本身現時經 127.0.0.1 解析。查詢日誌輪替可設為 1h 至 8760h,試用期間保留一天已足夠。若不需要按客戶端記錄,可在 dns 下設定 anonymize_client_ip: true。[9]
sudo /opt/AdGuardHome/AdGuardHome --check-config --config /opt/AdGuardHome/AdGuardHome.yaml
sudo /opt/AdGuardHome/AdGuardHome -s start
getent hosts example.com
客戶端數目已知時,AdGuard 建議使用 Settings → DNS settings → Access settings 內的 Allowed clients 欄位,並提醒開放式解析器容易被濫用。[10]
在測試裝置上把 DNS 手動設為主機的區域網絡位址,只填這一項。不要保留公共後備解析器,並在測試用的瀏覽器設定檔中關閉安全 DNS,確保查詢真正到達 AdGuard Home。然後在該裝置執行:
nslookup example.com 192.168.1.53
nslookup example.com
兩次查詢都應連同測試裝置位址出現在 Query log。如只看到明確指定伺服器的那一次,代表裝置仍在使用其他解析器。
在 Settings → DNS settings → Upstream DNS servers 每行填寫一個上游;請替換路由器和公司的位址:
https://unfiltered.adguard-dns.com/dns-query
[/lan/]192.168.1.1
[/corp.example/]10.20.0.53
[/public.corp.example/]#
第一行是 AdGuard DNS 不作過濾的 DNS-over-HTTPS 位址,過濾只在你自己的實例進行。[11] DoH 上游以域名表示,所以要在 bootstrap DNS 欄位(bootstrap_dns)保留一個一般解析器,例如 94.140.14.140。[9][11] 最後一行把一個子域名交回預設上游;若寫成 [/*.corp.example/],只會配對子域名,並不包括 corp.example 本身。[4]
把路由器位址填入 Private reverse DNS servers,因為 AdGuard 只會把私人網段的反向查詢送往那裏。[4] 重複步驟 6 的查詢,再查詢一個 .lan 名稱,並在日誌中核對上游一欄。
在 Filters → Custom filtering rules 加入 ||example.org^,即可封鎖該域名及其子域名。再加入 @@||example.org^ 解除封鎖;以 ! 或 # 開頭的行屬註解。[12]
| 檢查方法 | 預期現象 | 失敗時處理 |
|---|---|---|
只有封鎖規則時執行 nslookup example.org | 日誌標示為已封鎖 | 確認裝置使用該主機且規則已儲存 |
| 加入例外後重複同一查詢 | 日誌重新標示為允許 | 刪除凌駕例外的 $important 規則 |
查詢一個 .lan 名稱 | 由路由器回應 | 檢查 [/lan/] 一行及路由器位址 |
| 以一部未列入清單的自家裝置查詢 | 沒有回應 | 修正 allowed_clients 或防火牆 |
| 在測試裝置做 DNS 洩漏測試 | 只出現預設上游的解析器 | 排查後備解析器、IPv6 DNS 或瀏覽器 DNS |
最後一項可按這套 DNS 洩漏檢查方法進行。IPv6 DNS 是另一條路徑:要麼設定並限制 IPv6 監聽,要麼把今次試用清楚標明為只限 IPv4。完成檢查後刪除兩條測試規則。
先還原測試裝置原有的 DNS 設定,確認新的查詢可正常返回,才處理主機。AdGuard 提醒先把裝置改用其他 DNS,再執行解除安裝指令並刪除目錄。[8]
sudo /opt/AdGuardHome/AdGuardHome -s uninstall
sudo rm /etc/systemd/resolved.conf.d/adguardhome.conf
sudo rm /etc/resolv.conf
sudo mv /etc/resolv.conf.backup /etc/resolv.conf
sudo systemctl restart systemd-resolved
getent hosts example.com
把 readlink -f /etc/resolv.conf 和 resolvectl status 的結果與步驟 1 對照。按編號只刪除今次試用加入的 UFW 規則。如日後可能再用,先私下保存一份 AdGuardHome.yaml,再刪除 /opt/AdGuardHome。
allowed_clients 限制回應對象。可以。只需以片段檔關閉它的 stub 監聽;systemd-resolved 會繼續運作,並把主機本身的查詢轉發至 127.0.0.1。
53 端口已被其他程式佔用,通常是 systemd-resolved 的 stub 監聽。按步驟 3 加入片段檔,或使用精靈內的 Fix 按鈕即可處理。
域名區塊後的 # 表示該域名不使用指定伺服器,而是交由預設上游處理,常用來把個別子域名排除在專用上游以外。
並非必要,但公共域名建議使用。明文上游查詢會被網絡路徑上的設備和網絡供應商看到,加密後可減少這類暴露。
不安全。開放式解析器容易被濫用,DNS 服務應只留在區域網絡或私人網絡內,並明確列出允許的客戶端位址。
DNS 規則以整個域名為單位封鎖。與內容同一域名投放的廣告、快取頁面以及瀏覽器自設的 DNS,都可能繞過這些規則。
不會。要先還原每部裝置的 DNS 設定,再刪除 resolved 片段檔,並把保存的 resolv.conf 連結放回原位。
免責聲明:本文步驟依據官方文件整理,並非已完成測試的紀錄。只在獲授權的主機和裝置上操作,並保留可用的復原途徑。
來源:
Sources checked 2026 年 10 月 14 日。
延伸閱讀:
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。