如何在 Ubuntu Server 24.04 上設定 Pi-hole DNS-over-HTTPS
在 Ubuntu Server 24.04 上設定 Pi-hole,使其使用 dnscrypt-proxy 進行 DNS-over-HTTPS 連接,然後驗證本地上游伺服器,避免常見的 DNS 衝突。
對於執行在 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 條目。
代理伺服器只會綁定到回環連接埠 5053,而將連接埠 53 留給 Pi-hole 使用。這樣可以避免與 Pi-hole 的 DNS 服務和 Ubuntu 的本機解析器發生衝突。不要systemd-resolved為了實現這種設計而停用 Pi-hole;代理伺服器的獨立回環連接埠可以避免這種衝突。
dnscrypt-proxy 專案文件介紹了一種 Ubuntu 軟體包的安裝方法。安裝前,請檢查您配置的 Ubuntu 軟體倉庫中是否有合適的軟體包:
sudo apt update
apt-cache policy dnscrypt-proxy
如果輸出結果顯示有候選版本,請安裝它:
sudo apt install dnscrypt-proxy
如果沒有顯示任何候選軟體來源,請勿為了繼續而添加無關的第三方軟體來源。請使用 dnscrypt-proxy 專案官方 Linux 指南中提供的安裝方法,驗證版本和架構,並根據該安裝調整服務配置。以下 systemd 套接字單元和設定路徑適用於 Pi-hole 文件中記錄的 Ubuntu 軟體包設定。
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 可能會在保留自訂監聽器連接埠的同時,也保留預設連接埠。
開啟軟體包設定檔:
sudoedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml
對於 systemd 套接字激活,請在代理程式配置中使用空的監聽器清單。從目前已簽署的公共解析器清單中選擇一個解析器名稱。例如,以下配置選擇標準的 Cloudflare 解析器;Pi-hole 指南也提供了cloudflare-security一個範例,說明如何在上游解析器上進行惡意軟體過濾:
listen_addresses = []
server_names = ['cloudflare']
保持軟體包其餘配置不變。其中的名稱server_names是註冊表標識符,而非任意主機名稱或 URL 路徑。如果您選擇其他提供者,請驗證其目前解析器項目是否支援 DoH,並複製其確切名稱。過濾惡意軟體或其他類別的解析器與未過濾的解析器可能會產生不同的結果。
將 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,請刪除這些項目。
重啟套接字、代理服務和 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。
sudo ss -lntup,使用 `check drop-in` 指令查看systemctl cat dnscrypt-proxy.socket設定文件,並確認空的重置行位於 5053 條目之前。127.0.0.1#5053,然後重新啟動pihole-FTL。確保預設的上游路由複選框沒有預設提供備用路由。/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 廣播。變更路由器設定後,請使用多台裝置進行驗證,因為即使伺服器上的代理設定正確,也無法阻止客戶端直接使用其他解析器。
在 Ubuntu Server 24.04 上設定 Pi-hole,使其使用 dnscrypt-proxy 進行 DNS-over-HTTPS 連接,然後驗證本地上游伺服器,避免常見的 DNS 衝突。
排查 YaST GUI 透過 SSH X11 轉送導致的故障。測試 DISPLAY,修復已記錄的 Qt XIO 錯誤,檢查 SSH 設置,並在必要時切換到 ncurses。
在 SLES 15 上設定 SUSE RMT,同步 SCC 元數據,鏡像選定的儲存庫,透過 HTTPS 註冊客戶端,並了解從 SMT 遷移的限制。
追蹤 Pardus Linux 23 上缺少的音效卡問題。安全地檢查 ALSA 檢測、核心模組、音訊服務、輸出設定檔、韌體和更新。
修正 Pardus KVM 虛擬機器卡在 1024x768 解析度的問題,檢查虛擬 GPU、SPICE 代理、X11 或 Wayland 會話,並正確驗證更高的顯示模式。
使用基於金鑰的 SSH、/etc/fstab、systemd 網路選項、自動掛載和驗證步驟,在 Debian 啟動時自動掛載遠端 SSHFS 目錄。
排查 SLES 升級過程中出現的「無法分配記憶體」問題。檢查 RAM、交換空間、OOM 日誌和進程限制,然後在不中斷軟體包事務的情況下進行復原。
追蹤 Harmonica OS (HamoniKR) 平板電腦的觸控偏移、旋轉和顯示對映問題。比較 X.Org 和 libinput 的修復方案,安全地進行測試,並了解何時校準無效。
使用 dm-crypt 對現有的 Debian 12 交換分割區進行加密,每次啟動時使用新的隨機金鑰,並設定 /etc/crypttab、/etc/fstab 和安全驗證步驟。
在 Ubuntu 系統上安裝 smartmontools,用於監控硬碟健康狀況並發送 SMART 郵件警報。檢查設備支援狀況、設定郵件發送、測試通知功能並檢查故障。