家裡的網路是 Freebox Pop,光纖 1Gbps。去年底我把一台 Raspberry Pi 4(4GB,Raspberry Pi OS Lite 64-bit,Debian 12 bookworm)接在 Freebox 後面,裝 Pi-hole v6.2 當全家的 DNS。場景很普通:兩支手機、兩台筆電、一台電視盒,還有一台 NAS 偶爾跑更新。設好之後網頁載入的體感沒有變快,但電視盒的廣告少了,於是我開始量延遲,才發現問題不在 Pi-hole 本身。
做法很直白。先固定 Pi 的位址,避免 DHCP 租約換 IP 之後全家斷網:
# /etc/dhcpcd.conf 末尾
interface eth0
static ip_address=192.168.1.20/24
static routers=192.168.1.254
static domain_name_servers=127.0.0.1
Pi-hole 的上游我沒有用 Freebox 自己,而是直接指到兩組外部 DNS,並且把 BLOCKINGMODE 設成 NULL,讓被擋的網域回 0.0.0.0 而不是 NXDOMAIN。這樣某些 App 的連線探測不會卡在等待逾時。查詢日誌留 24 小時就夠,Pi 的 SD 卡寫入量要省著用:
pihole-FTL --config dns.upstreams '["9.9.9.9","149.112.112.112"]'
pihole-FTL --config dns.blocking.mode 'NULL'
pihole-FTL --config database.maxDBdays 1
量測的方式是從筆電對 192.168.1.20 連跑 dig,同時看 Pi-hole 的查詢延遲面板。快取命中時大約 1–2ms,未命中要往上游問,平均落在 18–35ms,視上游當下的狀況。真正有感的是第一次載入一個新網域:如果上游是 Freebox,Freebox 自己又有一層快取,看起來很快,但它的快取策略我看不到,出問題時很難判斷是誰慢。直接指外部上游,代價是失去 Freebox 的本地解析,不過我家沒有內網主機名需要解析,這個交換划算。
會失效的地方第一個是 SD 卡。連續寫日誌三個多月之後,卡開始出現 I/O error,Pi-hole 的網頁後台打不開,但 DNS 查詢本身還在跑,很容易誤判成「網路沒問題」。我後來把日誌目錄掛到 tmpfs,並且把 pihole-FTL.db 也搬過去,重開機就清空。第二個是 Freebox 的 DHCP 不會自動把 DNS 發給所有裝置,电视盒這類裝置抓的是 Freebox 自己的位址,我最後是在 Freebox 的 DHCP 設定裡把「主 DNS」改成 Pi 的 IP,才讓它生效;這個選項在 Freebox OS 的介面裡藏得比較深。第三個是出國或 Freebox 重啟時,Pi 比 Freebox 晚開機,全家會短暫沒有 DNS,只能等 Pi 起來。
現在比較想知道的是:有沒有人把 Pi-hole 的上游指回 Freebox,同時又讓 Freebox 的 DHCP 只發 Pi 的位址?這樣理論上可以吃到 Freebox 的本地快取,但我還沒試出穩定的設定。
0 条评论
还没有评论,写下第一条。