現在上網,最煩人的不一定是網速慢,而是各種廣告和追蹤請求太多。打開網頁,廣告位先加載;啓動 App,後臺請求一串接一串;家裏的手機、電腦、平板、電視盒子,誰都可能在默默訪問各種統計、追蹤和廣告相關域名。
本期我們就來在NAS上搞個廣告橡皮擦 Pi-hole,讓上網衝浪清爽一點。
其實類似項目,AdGuard Home、OxiDNS都不錯,比較現代化且部署也不難,看大家選擇了~
![]()
項目介紹
完整項目名:pi-hole/docker-pi-hole,可於GitHub搜索。
Pi-hole 是一個開源的網絡級廣告攔截項目。它不是瀏覽器插件,也不是手機 App,而是一個運行在局域網裏的 DNS 過濾服務。只要設備的 DNS 指向 Pi-hole,理論上整個局域網裏的設備都能受益。
它的工作方式可以理解成這樣:
![]()
很多人第一反應是:這種 DNS 服務,是不是應該部署在路由器上?
答案是:可以部署在路由器上,但不一定非要。如果你的路由器性能強、系統開放、支持 Docker,那部署在路由器上當然很順。但現實情況是,很多人的路由器並不適合。Pi-hole 資源佔用並不高,NAS部署後,家裏設備只需要把DNS指向 NAS 上的 Pi-hole,全屋設備便能一起受益。
不過要注意的是,NAS需要24小時開機在線!
項目特點
一次部署,多設備生效:只要路由器把 DNS 下發給 Pi-hole,局域網裏的設備就會統一走 Pi-hole 解析。
不用改每臺設備:Pi-hole 部署好以後,只需要在路由器 DHCP 裏把 DNS 地址改成 Pi-hole 的 IP,後續新設備連上 Wi-Fi,也會自動使用這個 DNS。
Web 管理後臺:有自己的 Web 管理界面,攔截請求、各設備請求數、被攔截頻率等都能看得到。
Docker 部署:官方支持 Docker 部署,靈活輕量。
部署流程
以威聯通NAS爲例,通過Docker Compose的方式進行部署。
部署代碼如下,大家也可根據自己需求做精簡,編輯器抽風,大家可藉助AI排版:
services: pihole: container_name: pihole image: pihole/pihole:latest hostname: pihole-qnap restart: unless-stopped ports: # DNS 服務端口,必須保留 - "53:53/tcp" - "53:53/udp" # Pi-hole Web 管理頁面 # 不建議直接用 80:80,容易和 NAS 自帶服務衝突 - "8081:80/tcp" # HTTPS 管理頁面,可選 # 不需要可以先註釋掉 - "8443:443/tcp" environment: # 時區 TZ: "Asia/Shanghai" # Pi-hole 後臺登錄密碼,請務必修改 FTLCONF_webserver_api_password: "請改成你的管理密碼" # Docker bridge 網絡下建議設置爲 ALL FTLCONF_dns_listeningMode: "ALL" # 上游 DNS,可按需調整 # 多個 DNS 用英文分號 ; 分隔 FTLCONF_dns_upstreams: "172.56.1.11;172.56.1.161" volumes: # 持久化 Pi-hole 配置 - /share/Container/pihole/etc-pihole:/etc/pihole cap_add: # 可選:讓 FTL 獲得更高調度優先 - SYS_NICE
![]()
FTLCONF_dns_upstreams用來設置 Pi-hole 的上游 DNS。這裏可以填寫路由器 WAN 口自動獲取到的 DNS,也可以填寫常見公共 DNS。爲了儘量保持和當前網絡環境一致,可以直接使用路由器裏顯示的 DNS 地址,多個 DNS 之間用英文分號;分隔。
打開Container Station,創建新的應用程序。
![]()
相關注意
因爲當前NAS所有53端口被佔用,而採取了另一種方式。
SSH執行下面代碼,爲其創建一個網絡。這是我所在局域網:
docker network create -d macvlan \ --subnet=192.168.100.0/24 \ --gateway=192.168.100.1 \ -o parent=qvs0 \ pihole_macvlan
![]()
然後Docker Compose的代碼換成了以下,可藉助AI排版:
services: pihole: container_name: pihole image: pihole/pihole:latest hostname: pihole-qnap restart: always networks: pihole_macvlan: ipv4_address: 192.168.100.200 # 給容器一個沒被佔用的IP environment: TZ: "Asia/Shanghai" FTLCONF_webserver_api_password: "qnap1234" FTLCONF_dns_listeningMode: "ALL" FTLCONF_dns_upstreams: "172.56.1.11;172.56.1.161" volumes: - /share/Container/pihole/etc-pihole:/etc/pihole cap_add: - SYS_NICE networks: pihole_macvlan: external: true
![]()
局內介紹
部署完畢後,輸入NAS_IP:8081/admin,或是pihole_IP/admin,即可訪問Web界面。
![]()
登錄後便可看到主面板,那對比我們文章開頭提到的兩個來說,界面比較復古。
![]()
進來後才發現,其實環境變量中我們提前配置的DNS之類,在設置中可以修改。
![]()
如下圖是項目官方的默認規則,應該有三萬多個域名規則~大家根據自己需求進行測試,也可以自行添加規則。
![]()
左側欄的「Tools」-「Update Gravity」,執行一次更新,生成可用的攔截數據庫,讓規則生效。
![]()
配置流程
在PC上,分別輸入以下命令,查看返回結果。
# 正常網站
nslookup www.baidu.com 192.168.100.200
# 廣告域名
nslookup doubleclick.net 192.168.100.200
![]()
可以看到,廣告域名被 Pi-hole 攔截,攔截爲0.0.0.0。
這一步測試完畢,便可到上級路由,將 LAN/DHCP 設置爲192.168.100.200,其他區域一般保持即可,點擊保存應用。
![]()
接着再PC端輸入執行以下命令驗證:
scutil --dns | grep nameserver
如下圖,這時說明全局 DNS 已經走 Pi-hole 了。
![]()
那大家可以打開一些博客站點之類的,站長一般都會兩側欄弄點廣告啥的,前後對比下頁面便知。
出於某些原因,我這裏就不放具體網頁截圖了,給大家看看一個小時中,儀表盤的數據統計量。
![]()
![]()
最後
這類項目,本質上解決的是DNS層面的廣告/追蹤域名過濾。但它們不能保證幹掉所有廣告,尤其是一些APP、信息流、平臺自有接口等廣告。
不過搞完之後,確實清爽太多。
關於文章開頭提到的另外兩個項目的簡單對比如下,大家感興趣可以搜一搜嘗試下哪個更適合自己。
![]()
感謝觀看,本文完。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com
