如何在 Ubuntu Server 24.04 上設定 Pi-hole DNS-over-HTTPS

對於執行在 Ubuntu Server 24.04 上的 Pi-hole,請將其上游請求路由dnscrypt-proxy到本機監聽器,並將 Pi-hole 指向該監聽器127.0.0.1#5053。這樣,您的伺服器與選定的上游解析器之間的 DNS 流量將透過 DNS-over-HTTPS (DoH) 進行加密,而 Pi-hole 仍可繼續回應您的區域網路用戶端並套用其黑名單。預設情況下,Pi-hole 本身不提供到上游的 DoH 傳輸;本地代理提供加密連線。

首先需要了解一個目前版本細節:Cloudflarecloudflared proxy-dns已於 2026 年 2 月 2 日起從新版本移除該指令。因此,先前安裝該命令的教學可能無法在新cloudflared版本中正常運作。以下步驟dnscrypt-proxy遵循 Pi-hole 目前的 DoH 指南。此設定適用於 Pi-hole 和代理程式運行在同一台 Ubuntu 主機上的情況。 Docker 或多主機設定需要不同的監聽器位址和防火牆規則。

這種設定能做什麼,不能做什麼

普通的 DNS 服務通常會將查詢從解析器傳送到上游 DNS 供應商,而不會進行傳輸加密。 DoH 則使用 HTTPS 協定傳輸 DNS 請求,這使得位於 Pi-hole 伺服器和解析器之間的網路觀察者更難讀取或篡改這些請求。 Pi-hole 仍然是向本地網路設備廣播的 DNS 伺服器;只有其上游路徑發生了變化。

DoH 並不會使您選擇的解析器無法存取 DNS 活動。上游提供者仍然會收到來自您伺服器的查詢,而 Pi-hole 可能會根據其隱私和日誌記錄設定保留用戶端查詢歷史記錄。 HTTPS 也不會加密無關的網路流量。如果您希望使用特定的解析器,請查看其隱私權政策,並從支援的解析器清單中選擇其 DoH 條目。

開始之前

  • 確認 Pi-hole 已安裝在 Ubuntu Server 24.04 上並正常運作。本教學將配置現有的 Pi-hole,而不是安裝新的 Pi-hole。
  • 請確保伺服器擁有穩定的區域網路位址。如果位址發生變化,路由器的 DHCP 用戶端可能會遺失其 DNS 伺服器。
  • 擁有管理員權限,並且能夠在 DNS 暫時停止工作時能夠聯繫到 Pi-hole 伺服器。避免透過依賴相同 Pi-hole 伺服器進行網域解析的連線進行遠端變更。
  • 記錄目前 Pi-hole 上游設置,以便在回滾期間可以恢復它們。

代理伺服器只會綁定到回環連接埠 5053,而將連接埠 53 留給 Pi-hole 使用。這樣可以避免與 Pi-hole 的 DNS 服務和 Ubuntu 的本機解析器發生衝突。不要systemd-resolved為了實現這種設計而停用 Pi-hole;代理伺服器的獨立回環連接埠可以避免這種衝突。

1. 從Ubuntu的軟體包倉庫安裝dnscrypt-proxy

dnscrypt-proxy 專案文件介紹了一種 Ubuntu 軟體包的安裝方法。安裝前,請檢查您配置的 Ubuntu 軟體倉庫中是否有合適的軟體包:

sudo apt update
apt-cache policy dnscrypt-proxy

如果輸出結果顯示有候選版本,請安裝它:

sudo apt install dnscrypt-proxy

如果沒有顯示任何候選軟體來源,請勿為了繼續而添加無關的第三方軟體來源。請使用 dnscrypt-proxy 專案官方 Linux 指南中提供的安裝方法,驗證版本和架構,並根據該安裝調整服務配置。以下 systemd 套接字單元和設定路徑適用於 Pi-hole 文件中記錄的 Ubuntu 軟體包設定。

2. 將代理監聽器移至本機主機連接埠 5053

Pi-hole 已經使用了標準的 DNS 連接埠 53。配置代理程式的套接字,使其監聽 TCP 和 UDP 協議127.0.0.1:5053,並且只能從同一台主機存取。建立一個 systemd 插件:

sudo systemctl edit dnscrypt-proxy.socket

在編輯器中輸入以下內容並儲存:

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5053
ListenDatagram=127.0.0.1:5053

空白行ListenStream=和ListenDatagram=`--except` 行用於在設定替換位址之前清除軟體包的預設值。請勿省略這些行:否則 systemd 可能會在保留自訂監聽器連接埠的同時,也保留預設連接埠。

3. 選擇一個 DoH 解析器

開啟軟體包設定檔:

sudoedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml

對於 systemd 套接字激活,請在代理程式配置中使用空的監聽器清單。從目前已簽署的公共解析器清單中選擇一個解析器名稱。例如,以下配置選擇標準的 Cloudflare 解析器;Pi-hole 指南也提供了cloudflare-security一個範例,說明如何在上游解析器上進行惡意軟體過濾:

listen_addresses = []
server_names = ['cloudflare']

保持軟體包其餘配置不變。其中的名稱server_names是註冊表標識符,而非任意主機名稱或 URL 路徑。如果您選擇其他提供者,請驗證其目前解析器項目是否支援 DoH,並複製其確切名稱。過濾惡意軟體或其他類別的解析器與未過濾的解析器可能會產生不同的結果。

4. 將 Pi-hole 指向本地代理

將 Pi-hole 的上游 DNS 位址設定為本機監聽器:

sudo pihole-FTL --config dns.upstreams '["127.0.0.1#5053"]'

後綴#5053是 Pi-hole 對非標準 DNS 連接埠的表示方法。您也可以在 Pi-hole 管理介面的「設定」>「DNS」中查看。清除預設的公共上游伺服器選項,並將自訂伺服器保留127.0.0.1#5053為上游伺服器。如果將公共解析器保留為額外的上游伺服器,則查詢可能會繞過加密代理,因此如果您需要所有 Pi-hole 上游查詢都使用 DoH,請刪除這些項目。

5. 重新啟動服務並驗證問題是否解決

重啟套接字、代理服務和 Pi-hole FTL 守護進程,以便它們載入新配置:

sudo systemctl restart dnscrypt-proxy.socket
sudo systemctl restart dnscrypt-proxy.service
sudo systemctl restart pihole-FTL.service

查看服務狀態:

sudo systemctl status dnscrypt-proxy.socket
sudo systemctl status dnscrypt-proxy.service
sudo systemctl status pihole-FTL.service

每個代理伺服器都應該處於活動狀態,且無綁定錯誤或解析器啟動失敗。直接透過其本機 DNS 監聽器測試代理伺服器:

dig @127.0.0.1 -p 5053 example.com

DNS 回應表示本機代理伺服器正在回應。接下來,測試 53 連接埠上的 Pi-hole:

dig @127.0.0.1 example.com

檢查 Pi-hole 查詢日誌或控制面板,確認請求是否已到達 Pi-hole;如果測試失敗,請查看代理的日誌:

sudo journalctl -u dnscrypt-proxy.service -b --no-pager

為了進一步檢查,請查看代理程式啟動日誌或日誌輸出,確認所選解析器和 DoH 協定的狀態。dig僅憑 DoH 協定狀態為「成功」可以證明 DNS 解析正常,但並不能證明請求使用了 HTTPS。

常見問題及安全恢復

  • 「位址已被佔用」:可能是另一個進程已佔用連接埠 5053,或套接字覆蓋未載入。請使用 `check listeners` 指令檢查監聽器sudo ss -lntup,使用 `check drop-in` 指令查看systemctl cat dnscrypt-proxy.socket設定文件,並確認空的重置行位於 5053 條目之前。
  • 代理程式已啟用,但查詢逾時:請檢查出站 HTTPS 存取、解析器名稱和代理程式日誌。某些網路會阻止 DNS over HTTPS 連線或限制 TCP 連接埠 443。
  • 代理測試成功,但 Pi-hole 沒有收到上游回應​​:請確認 Pi-hole 的設定完全正確127.0.0.1#5053,然後重新啟動pihole-FTL。確保預設的上游路由複選框沒有預設提供備用路由。
  • 更改後,Ubuntu 本身無法解析名稱:此設定更改的是 Pi-hole 的上游配置,而不是主機配置/etc/resolv.conf。請避免替換該文件或將其systemd-resolved作為故障排除的快捷方式。

若要回滾,請恢復您在 Pi-hole 中記錄的上游 DNS 設定並重新啟動pihole-FTL。一旦 Pi-hole 不再指向代理,您就可以dnscrypt-proxy使用軟體套件管理器停用或移除該代理。如果此伺服器也透過 Pi-hole 解析自身的 DNS,請在變更服務之前準備好本機復原路徑。

哪種方案適合您的網路?

如果您希望在 Pi-hole 中實現集中式 DNS 過濾,並對 Pi-hole 到指定解析器的流量進行加密,請使用此單主機代理程式方案。由於代理只有一個本地地址和端口,因此檢查起來相對容易。如果您在 Docker 容器、其他伺服器或跨多個網路執行 Pi-hole,則可能需要使用容器網路位址而不是環回位址,並且必須限制代理監聽器,使其不暴露為開放解析器。如果您需要基於政策的過濾、裝置身份驗證或為家庭外的漫遊設備加密 DNS,請單獨設定這些用戶端或託管網關;Pi-hole 的上游 DoH 連線不會自動加密每個用戶端到 Pi-hole 的路徑。

最後,請記住,如果路由器或用戶端廣播了第二個 DNS 伺服器,則它們可以繞過 Pi-hole。若要實現全網過濾,請僅透過 DHCP 為用戶端指派 Pi-hole 位址,並同時考慮 IPv6 和 IPv4 DNS 廣播。變更路由器設定後,請使用多台裝置進行驗證,因為即使伺服器上的代理設定正確,也無法阻止客戶端直接使用其他解析器。

官方參考資料

留下評論

如何在Linux系統上使用Cameractrls更改網路攝影機設置

如何在Linux系統上使用Cameractrls更改網路攝影機設置

使用 Cameractrls 在 Linux 上變更網路攝影機設定:調整曝光、色彩、減少閃爍和其他支援的控件,然後檢查相容的視訊模式。

如何在 Linux 上安裝 PhpStorm:工具箱、Tar.gz、Snap 和 AUR

如何在 Linux 上安裝 PhpStorm:工具箱、Tar.gz、Snap 和 AUR

在 Linux 系統上,您可以使用 JetBrains Toolbox 或獨立的 tar.gz 壓縮套件安裝 PhpStorm,此外還有 Snap 和 Arch AUR 版本可供選擇。 Java 已預先安裝。

如何在 Linux 系統上將 CD-ROM 備份為 ISO 文件

如何在 Linux 系統上將 CD-ROM 備份為 ISO 文件

在 Linux 上使用 GNOME Disks 或 dd 建立 CD-ROM ISO。識別光碟機,監控複製過程,驗證鏡像,並了解何時損壞的光碟或音訊光碟需要其他工具。

如何在 XFCE 4 上設定雙面板

如何在 XFCE 4 上設定雙面板

為每個顯示器建立一個單獨的 XFCE 4 面板,將第二個面板指派給正確的輸出,調整其位置和大小,並新增所需的啟動器和狀態項目。

如何在Linux上安裝Cisco Packet Tracer

如何在Linux上安裝Cisco Packet Tracer

下載適用於 Ubuntu 64 位元系統的 Cisco Packet Tracer 9.0.1,使用 APT 安裝 DEB 軟體包,在終端機中接受許可協議,然後登入以啟動實驗環境。

如何在Linux系統下使用GIMP摳圖

如何在Linux系統下使用GIMP摳圖

在 Linux 系統上使用 GIMP 去除照片背景:描繪主體,刪除選定的背景,保持透明度,並匯出可重複使用的 PNG 檔案。

免費下載 FlightGear:官方安裝指南

免費下載 FlightGear:官方安裝指南

從官方網站免費下載 FlightGear。比較 Windows、macOS 和 Linux 版本的軟體包,安裝資料文件,即可開始您的首次飛行。

Google Tasks桌面應用程式:如何在電腦上使用

Google Tasks桌面應用程式:如何在電腦上使用

在瀏覽器中開啟 Google Tasks,新增 Chrome 捷徑或應用程式啟動,並透過行事曆和 Gmail 管理有日期的待辦事項。

OKSampler:一款免費、簡單的鍵盤節拍音樂採樣器

OKSampler:一款免費、簡單的鍵盤節拍音樂採樣器

OKSampler 可以將 MP3 片段對應到鍵盤按鍵,並支援音訊循環播放。了解這款經典免費軟體的功能、其舊功能的缺失以及下載前需要檢查的事項。

如何在 Linux 系統上安裝 Wireshark:Ubuntu、Fedora、Arch 等

如何在 Linux 系統上安裝 Wireshark:Ubuntu、Fedora、Arch 等

使用目前軟體包命令在 Ubuntu、Debian、Fedora、Arch 或 openSUSE 上安裝 Wireshark,然後安全地配置即時資料包擷取。