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


Ubuntu Unbound 設定可為小型可信區域網絡提供會驗證 DNSSEC 的遞迴解析器,而毋須開放公網服務。本文採用 Ubuntu 24.04 LTS amd64 的維護套件,於 2026 年 10 月 11 日核對為 1.19.2-1ubuntu3.10。更新可能改變修訂號,應查閱本機 Ubuntu 套件庫,不鎖定過時版本。作者未完成端對端實測。[1]
關鍵要點
- 先從回環開始,再綁定一個真實 LAN 位址及最小授權網段。
- 保留 Ubuntu 信任錨、服務身份及 chroot 安排。
- DNSSEC 驗證簽名資料,既不加密 DNS,也不自動過濾廣告。
- 明確指定解析器測試後,才更改一部客戶端並保留原設定。
你須擁有主機及區域網絡管理權,並能維護遞迴解析器。按自建服務責任指南分配更新、日誌、存取策略及復原工作。若要出口位址或不同流量路徑,先比較 DNS 與 VPN 用途:解析器回答名稱,不傳送全部應用流量。
Unbound 不會自動提供廣告攔截;DNS 過濾另有策略及流程。主機原已無法解析時,先排查 Ubuntu 解析鏈。裝置排查次序有助分清應用程式與 DNS 故障。
這是小型遞迴解析器,不是轉送設定、路由器部署或公用 DNS。遞迴須獲准以出站 UDP、TCP 53 存取權威伺服器;網絡不允許時應採用獲批准替代方法,不停用其控制。透過網絡擁有者現有地址管理程序,保留穩定 LAN 位址。
私下記錄套件、Unbound 設定與 includes、單元及 drop-in、啟用狀態、防火牆、位址、路由與解析器擁有者。備份放在有效 include 目錄之外,保留獨立管理連接。已有 Unbound 或自動管理器負責這些路徑時,先協調,不貼入另一段衝突的 server 設定。
安裝前查看綁定及系統 DNS。Ubuntu 的 systemd-resolved 可能監聽 127.0.0.53,與 127.0.0.1 不同;萬用位址監聽則可能與兩者衝突。不要為騰出連接埠而停用系統解析器或改寫 /etc/resolv.conf。[6]
sudo ss -lntup 'sport = :53'
resolvectl status
ip -4 address
ip -6 address
sudo apt-get update
sudo apt-get install unbound dnsutils
apt-cache policy unbound
unbound -V
sudo unbound-checkconf /etc/unbound/unbound.conf
sudo systemctl status unbound.service --no-pager
安裝套件可能啟動服務,應立即檢視實際監聽及狀態。出現意外寬泛監聽時,先停止後續操作並調查原因。原已安裝時保留其基準。apt-cache policy 顯示已安裝與候選版本;unbound -V 是程式構建資訊,未必包含完整 Ubuntu 套件修訂號。
新增檔案前,閱讀 /etc/unbound/unbound.conf、include 指令及 /etc/unbound/unbound.conf.d/。確認套件提供的根信任錨與可存取狀態目錄,保持原安排。不重複 auto-trust-anchor-file,不盲目初始化第二個信任錨,不設 username: "",也不移除 chroot 來消除權限錯誤;應在套件設計下修正路徑和權限。[2][6]
上游最新手冊可解釋概念,但例子及版本或與 Noble 不同。此處欄位與預設以 Ubuntu 手冊為準。除非現有管理員有意另作設定,信任錨維護及加固繼續由發行套件安排。[2][3]
協調現有 interface 及 ACL 指令後,以具權限編輯器建立原本不存在的 /etc/unbound/unbound.conf.d/reader-lan.conf,root 擁有、權限 644。確認主檔確實 include 此目錄,只加入以下範圍,保留套件其餘檔案:
server:
interface: 127.0.0.1
port: 53
access-control: 127.0.0.0/8 allow
access-control: 0.0.0.0/0 refuse
access-control: ::/0 refuse
hide-identity: yes
hide-version: yes
verbosity: 1
log-queries: no
廣泛 IPv4、IPv6 ACL 用來拒絕來源,不是監聽位址;較具體的回環允許優先。本新增內容只要求 IPv4 回環,不要求入站 IPv6。其他 include 仍可增加介面或 ACL,因此要看合併設定與實際 socket。[2]
重啟前驗證有效檔案。unbound-checkconf 應以零退出,但不驗證答案、網絡、DNSSEC 或防火牆安全。[4]
sudo unbound-checkconf /etc/unbound/unbound.conf
sudo systemctl restart unbound.service
sudo systemctl status unbound.service --no-pager
sudo ss -lntup 'sport = :53'
dig @127.0.0.1 example.com A
以 sudo journalctl -u unbound.service -n 30 --no-pager 查閱有限診斷。明確指向回環的查詢應由目標程式回應;狀態與答案分開理解,NOERROR 沒有所問記錄亦可有效。綁定失敗應處理實際位址衝突,權限失敗則核對套件路徑,不用 0.0.0.0 走捷徑。
回環正常後才換掉練習檔案。以下 192.168.50.2 與查詢命令須換成主機真實穩定 LAN IPv4;192.168.50.0/24 換成實際最小授權網段,不能假設全部私有位址都屬自己的網絡。
server:
interface: 127.0.0.1
interface: 192.168.50.2
port: 53
access-control: 127.0.0.0/8 allow
access-control: 192.168.50.0/24 allow
access-control: 0.0.0.0/0 refuse
access-control: ::/0 refuse
hide-identity: yes
hide-version: yes
verbosity: 1
log-queries: no
只可綁定已分配位址。避免 0.0.0.0、::、寬泛私網許可及路由器連接埠轉送。最具體匹配的 ACL 決定存取。本例沒有新增 IPv6 介面或客戶端許可;如需要,另行設計真實介面、最小前綴與策略。入站監聽、出站 IPv6 查詢及 AAAA 答案並非同一回事。[2]
再檢查有效設定,重啟並核對 UDP、TCP 監聽。介面改動須重新啟動,不假設 reload 會建立新 socket。沿用既有防火牆管理者;如需規則,只允許授權網段至主機 LAN 位址 UDP、TCP 53。記錄準確新增項,保留管理通道,不清空或停用共用防火牆。ACL 與防火牆是不同層的限制。
若 UFW 已啟用並掌管策略,可加入以下窄範圍許可:
sudo ufw allow proto udp from 192.168.50.0/24 to 192.168.50.2 port 53 comment 'unbound-lan'
sudo ufw allow proto tcp from 192.168.50.0/24 to 192.168.50.2 port 53 comment 'unbound-lan'
先替換示例網段及位址,不為執行這些命令而啟用 UFW。其他管理者掌管防火牆時,採其相應程序。
在一部獲授權 LAN 測試客戶端用 dig,先指定解析器,不更改系統 DNS:
dig @192.168.50.2 example.com A
dig @192.168.50.2 example.com A +tcp
dig @192.168.50.2 example.com AAAA
dig @192.168.50.2 com. SOA +dnssec
dig @192.168.50.2 dnssec-failed.org A +dnssec
dig @192.168.50.2 dnssec-failed.org A +dnssec +cdflag
檢視伺服器位址、狀態、答案類型與旗標。com. SOA 等已簽名正例成功驗證時,應回傳認證資料及 ad。dnssec-failed.org 是刻意損壞的示例,仍為 bogus 時應回傳 SERVFAIL。加 +cdflag 後結果不同可協助區分驗證失敗與連通性問題;CD 只用於這項診斷,不作日常客戶端策略。這些是預期現象,不是本文聲稱的即時結果。[2][5]
| 讀者核對 | 預期現象 | 不符時處理 |
|---|---|---|
| 授權客戶端明確發 UDP、TCP 查詢 | 回應來自指定 LAN 位址 | 分別查兩種傳輸的監聽及防火牆 |
| 已簽名正例 | 驗證成功,認證資料有 ad | 核對時間、信任錨、日誌及名稱是否仍簽名 |
| 已知 bogus 查詢不帶 CD | 仍為 bogus 時 SERVFAIL | 核對有效驗證器及測試域名,不停用驗證 |
| TTL 到期前重複可快取正例 | 快取答案或顯示遞減 TTL | 預取、到期及快取路徑會影響觀察 |
| 可到達監聽的受控網段外來源 | 此 ACL 回傳 REFUSED | 防火牆丟棄亦可能逾時,查明真實來源及策略 |
| IPv4、IPv6 socket 清單 | 只有預期監聽 | 核對全部 includes 及防火牆位址族才確認邊界 |
| 重啟後的新查詢 | 授權解析恢復 | 基準未復原便還原安全設定 |
拒絕測試須用真正獨立而獲授權的來源。單一網絡逾時不證明所有未授權網絡都被排除;不為得到拒絕回應而開放公網或增加寬泛許可。沒有受控來源便記錄未執行。
觀察快取時,成功後短時間內重複同一名稱、類型與 class,比較 TTL 及顯示的伺服器。查詢時間較短不是效能基準:排程、網絡快取、預取與上游條件均會影響。DNSSEC 保護簽名資料真確性,不保護查詢機密。本例關閉查詢日誌,但診斷仍可含位址,應私下保存。
明確查詢完成後,保存一部客戶端原有 DNS 及管理者,例如 DHCP、NetworkManager、networkd、VPN 或其他支援管理器。透過其支援介面,將該客戶端 DNS 改為解析器真實 LAN 位址。路由器及其他客戶端不變。查核有效解析狀態及一般應用解析;應用程式自帶 DoH 可繞過系統 DNS,瀏覽器成功不證明系統使用 Unbound。
復原先經同一管理者還原客戶端確切 DNS,核對一般解析。只移除記錄中的防火牆新增項,再還原 Unbound 設定。若本次建立原先不存在的 reader-lan.conf,只移除此檔,保留套件信任錨與其他 includes。驗證有效基準,按原狀態重啟或停止服務,恢復原啟用狀態,核對監聽、系統解析器、DNS 答案與管理存取。
若既有部署流程改過單元或 drop-in,也須還原並在重啟前執行 sudo systemctl daemon-reload。套件只在基準證明本次新增且沒有其他依賴時移除。不刪已有安裝的信任錨狀態,不盲改 /etc/resolv.conf。復原未確認便停止更改,使用獨立管理通道。
若想在這個解析器前加一層過濾,按域名分流上游的 AdGuard Home可以把指定域名轉給 Unbound。
預期設定只綁定指定私有介面並允許一個授權網段。仍須核對合併 includes、socket、防火牆位址族及上游 NAT;片段不能證明整個部署邊界。
不用。先看實際綁定及解析鏈。不同明確回環位址可以共存,真正衝突應按擁有權修正。[6]
不會。它驗證已簽名 DNS 資料;此遞迴 UDP/TCP 設定不增加客戶端加密,也不向網絡隱藏查詢。
DNS 兩者都使用。UDP 答案不能證明需要較大回應或其他支援交換時 TCP 可用。
不是。記錄類型、入站傳輸位址族及出站連通性是不同屬性,應直接查看 socket。
不能。可受控觀察快取,但一次時間差異不是可靠的效能基準或比較。
不應。先核對一部客戶端及復原;全網分發超出本範圍,需要獨立維護與回退方案。
免責聲明:只操作獲授權主機與網絡,遵守適用法例及政策。本文列出文件支持的步驟和讀者預期核對,並非部署紀錄、相容性認證或效能保證。
來源:
Sources checked 2026 年 10 月 11 日。
延伸閱讀:
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。