Ubuntu Unbound 設定:限制區域網絡 DNS 存取及復原

Ubuntu Unbound 設定:限制區域網絡 DNS 存取及復原

Marcus Reid
2026年10月11日· 7 分鐘讀完

Ubuntu Unbound 設定可為小型可信區域網絡提供會驗證 DNSSEC 的遞迴解析器,而毋須開放公網服務。本文採用 Ubuntu 24.04 LTS amd64 的維護套件,於 2026 年 10 月 11 日核對為 1.19.2-1ubuntu3.10。更新可能改變修訂號,應查閱本機 Ubuntu 套件庫,不鎖定過時版本。作者未完成端對端實測。[1]

關鍵要點

  • 先從回環開始,再綁定一個真實 LAN 位址及最小授權網段。
  • 保留 Ubuntu 信任錨、服務身份及 chroot 安排。
  • DNSSEC 驗證簽名資料,既不加密 DNS,也不自動過濾廣告。
  • 明確指定解析器測試後,才更改一部客戶端並保留原設定。

Ubuntu Unbound 設定是否符合你的需要?

你須擁有主機及區域網絡管理權,並能維護遞迴解析器。按自建服務責任指南分配更新、日誌、存取策略及復原工作。若要出口位址或不同流量路徑,先比較 DNS 與 VPN 用途:解析器回答名稱,不傳送全部應用流量。

Unbound 不會自動提供廣告攔截;DNS 過濾另有策略及流程。主機原已無法解析時,先排查 Ubuntu 解析鏈。裝置排查次序有助分清應用程式與 DNS 故障。

這是小型遞迴解析器,不是轉送設定、路由器部署或公用 DNS。遞迴須獲准以出站 UDP、TCP 53 存取權威伺服器;網絡不允許時應採用獲批准替代方法,不停用其控制。透過網絡擁有者現有地址管理程序,保留穩定 LAN 位址。

私下記錄套件、Unbound 設定與 includes、單元及 drop-in、啟用狀態、防火牆、位址、路由與解析器擁有者。備份放在有效 include 目錄之外,保留獨立管理連接。已有 Unbound 或自動管理器負責這些路徑時,先協調,不貼入另一段衝突的 server 設定。

步驟 1:查核連接埠 53 與 Ubuntu 套件

安裝前查看綁定及系統 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]

步驟 2:先建立回環 Unbound 私有 DNS 解析器

協調現有 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 走捷徑。

步驟 3:限制 Unbound 存取控制至一個 LAN

回環正常後才換掉練習檔案。以下 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。其他管理者掌管防火牆時,採其相應程序。

步驟 4:核對答案、DNSSEC、快取與拒絕存取

在一部獲授權 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 保護簽名資料真確性,不保護查詢機密。本例關閉查詢日誌,但診斷仍可含位址,應私下保存。

步驟 5:只轉換一部客戶端並練習復原

明確查詢完成後,保存一部客戶端原有 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。

總結

  • 先確認回環解析,才加入刻意選定的 LAN 監聽。
  • 分開核對兩種傳輸、驗證、拒絕及客戶端有效 DNS。
  • 先還原客戶端,再按範圍還原主機服務與策略。

常見問題(FAQ)

這會建立開放公用解析器嗎?

預期設定只綁定指定私有介面並允許一個授權網段。仍須核對合併 includes、socket、防火牆位址族及上游 NAT;片段不能證明整個部署邊界。

必須停用 systemd-resolved 嗎?

不用。先看實際綁定及解析鏈。不同明確回環位址可以共存,真正衝突應按擁有權修正。[6]

DNSSEC 會加密查詢嗎?

不會。它驗證已簽名 DNS 資料;此遞迴 UDP/TCP 設定不增加客戶端加密,也不向網絡隱藏查詢。

為何 TCP 與 UDP 都要測試?

DNS 兩者都使用。UDP 答案不能證明需要較大回應或其他支援交換時 TCP 可用。

AAAA 答案代表有 IPv6 監聽嗎?

不是。記錄類型、入站傳輸位址族及出站連通性是不同屬性,應直接查看 socket。

第二次查詢較快能證明效能改善嗎?

不能。可受控觀察快取,但一次時間差異不是可靠的效能基準或比較。

應立即更改路由器 DNS 嗎?

不應。先核對一部客戶端及復原;全網分發超出本範圍,需要獨立維護與回退方案。

免責聲明:只操作獲授權主機與網絡,遵守適用法例及政策。本文列出文件支持的步驟和讀者預期核對,並非部署紀錄、相容性認證或效能保證。

來源:

  1. Ubuntu noble-updates Unbound package — https://packages.ubuntu.com/noble-updates/unbound
  2. Ubuntu noble unbound.conf manual — https://manpages.ubuntu.com/manpages/noble/man5/unbound.conf.5.html
  3. NLnet Labs home resolver guide — https://unbound.docs.nlnetlabs.nl/en/latest/use-cases/home-resolver.html
  4. NLnet Labs configuration checker — https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound-checkconf.html
  5. Google Public DNS: DNSSEC failure example — https://developers.google.com/speed/public-dns/docs/troubleshooting/domains
  6. NLnet Labs resolver configuration — https://unbound.docs.nlnetlabs.nl/en/latest/getting-started/configuration.html

Sources checked 2026 年 10 月 11 日。

延伸閱讀:

開啟 3 天免費試用

註冊即可免費體驗全部高級功能。

*只限新用戶;每位用戶只可獲得一次試用。

Ubuntu Unbound 設定:限制區域網絡 DNS 存取及復原 | AethoVPN