也许在浏览网站文章时,您会被弹出式广告所困扰。有了这些广告,如何阻止它们呢?在 Docker 中安装 Pi-hole,并将 Pi-hole 用作全网广告拦截器,提高您的网络性能。
在本教程中,您将学习如何在 Docker 容器中设置和运行 Pi-hole 以拦截广告和网站。听起来很激动人心吗?继续阅读以了解更多!
先决条件
本教程将进行实践演示。如果您想跟着做,请确保您拥有以下内容:
- 已在 Windows 10 上安装 Docker(但任何支持的操作系统都可以)。
- A Windows 10 PC – This tutorial uses Windows 10 OS Build 19042.1165.
创建两个持久 Docker 卷
在 Docker 容器中设置 Pi-hole 时,您首先需要创建一个 Docker 卷,用于存储 Pi-hole 应用程序和 DNS 配置。
開啟 以系統管理員身分執行 PowerShell,然後執行以下命令以在 Docker 中創建兩個卷(volume create
),分別命名為 pihole_app
和 dns_config
。您也可以根據需要更改名稱。
接下來,通過運行以下命令來驗證 Docker 卷是否已成功創建,該命令將列出您的計算機上所有可用的 Docker 卷。
下面,您將看到兩個新創建的卷,分別命名為 pihole_app
和 dns_config
。

在 Docker 容器中使用環境變量運行 Pi-hole
現在,您有兩個持久卷可用,可以使用 Pi-hole 的基本 Docker 映像運行 Docker 容器了。但首先,您需要記下本機 IP 地址。
運行以下命令以獲取您的本機 IP 地址。您的本機 IP 地址對於正確執行單個 Docker 命令是必要的。
接下來,運行以下命令從 Docker Hub 拉取 pihole/pihole
基本映像。根據下表替換相應的值。下表解釋了該命令的每個標誌的目的。
Pi-hole Docker 命令標誌
Command Flags | Definition |
—name=pihole | Names a Docker container as pihole. There will be an error if a container with the same name already exists on your machine |
-e TZ=Asia/Manila | Environment variable for time zone. Asia/Manila was used for this tutorial, but you can input anything that has the same format listed in on a GitHub gist. |
-e WEBPASSWORD=password | Sets a password for the Pi-hole interface. |
-e SERVERIP=YourIPAddressHere | Set your IP address for the Docker container. You will use this again later for making Pi-hole work. |
-v pihole_app:/etc/pihole | Mounts the volume pihole_app and use subdirectory /etc/pihole for storing the Pi-hole files |
-v dns_config:/etc/dnsmasq.d | Mounts the volume dns_config and use subdirectory /etc/dnsmasq.d for storing DNS configurations as required. |
p 81:80 -p 53:53/tcp -p 53:53/udp | Maps the ports of host machine to the ports of the Docker container (port 81 in host machine maps to port 80 of Docker container) |
—restart=unless-stopped | Sets a restart policy so the Docker container always restarts unless it is manually stopped by the user. |
pihole/pihole | Tells the docker run command to use the official pihole/pihole base image from Docker hub. |
以下是命令,從Docker Hub提取pihole/pihole
基本映像。一旦在您的機器上下載pihole/pihole
映像,命令將自動繼續並遵循您在命令中設置的參數。

在提取pihole/pihole
基本映像之後,您將看到以下類似的輸出,這表明您已經可以從容器中運行Pi-hole儀表板。

訪問Pi-hole儀表板Web界面
一旦創建的Docker容器正在運行,您現在可以訪問Pi-hole儀表板。Pi-hole儀表板是一個允許您配置要阻止的廣告的圖形界面,可以通過您自己的黑名單或社區維護的黑名單進行配置。
在瀏覽器中導航到http://localhost:81,因為您之前將主機機器的端口81
映射到Docker容器的端口80
。這樣一來,您的瀏覽器將頁面重定向到Pi-hole儀表板。
如果在運行上一個
docker
命令時設置了不同的端口,請更改端口以訪問Pi-hole儀表板。例如,http://localhost:n,其中’n’代表端口號。
現在,使用您在“使用環境變數運行Pi-hole Docker容器”部分運行docker
命令設置的密碼登錄到Pi-hole儀表板。對於本教程,密碼為“password”(不帶引號)。

如您所见,Pi-hole 容器未主动阻止广告,处于待机模式,等待其称为“查询”或广告请求的内容进行评估。

将主机的 DNS 服务器指向 Pi-hole IP 地址
在 Pi-hole 服务器运行时,如何在本地系统上开始阻止广告?您需要告诉本地系统将所有请求路由到 Pi-hole IP 地址并阻止任何匹配的广告。继续阅读以了解如何操作!
1. 在 Windows 系统托盘中右键单击网络设置图标,选择打开网络和 Internet 设置,以查看计算机中所有网络适配器的列表。

2. 接下来,右键单击您的网络适配器,选择属性。您的网络适配器设置窗口将弹出。

3. 在Networking选项卡下,从列表中选择Internet Protocol Version 4 (TCP/IPv4),然后单击属性按钮。

4. 使用以下配置 IPv4 属性:
- 选择选项使用以下 IP 地址以设置静态 IP 地址。将静态 IP 地址分配给主机机器允许其他设备连接并使用广告拦截器。路由器的默认网关根据您国家的 ISP 提供商在其设置中的设置而异。
- 選擇 使用以下 DNS 伺服器地址 選項來配置您的 DNS 伺服器,在 首選 DNS 伺服器 欄位中添加一個 DNS 伺服器。在“使用環境變量運行 Pi-hole Docker 容器”部分下,輸入您從上一個
docker
命令設置的 Docker 伺服器 IP 地址。 - 在 備用 DNS 伺服器 欄位中添加一個類似 Google 伺服器 8.8.8.8 的備用伺服器,然後點擊 確定。備用 DNS 伺服器在 Pi-hole Docker 容器出現故障時作為 DNS 伺服器。您可以給備用 DNS 伺服器分配 另一個值,以您喜歡的為準。

配置單個設備的 DNS
假設您有一部智能手機或其他設備連接到同一個網絡,您可以將該設備的 DNS 伺服器指向與主機的 IP 地址相匹配。在本教程中,一部智能手機連接到同一個網絡。
1. 在智能手機的無線網絡設置中,點擊 手動,並輸入主機機器的 IP 地址。您還可以添加替代 IP 地址,以防 Pi-hole 失敗。
智能手機上的無線網絡設置界面各不相同。

2. 現在在您的智能手機網絡瀏覽器中訪問一些廣告豐富的網站。
對於這個例子,重複訪問了每日郵報和紐約時報 數次,每次持續5-10分鐘。Pi-hole儀表板上的實時瀏覽器管理員顯示了來自該設備的被阻止廣告的數量,如下所示。
這些長條圖是在撰寫本文時,Pi-hole的最新版本中新增的功能。一些較舊的版本可能使用折線圖。

通過路由器設置啟用家庭網絡整體阻擋
與在單個設備上配置DNS服務器不同,可以嘗試在路由器設置中為所有設備配置DNS服務器。根據您的路由器,可能有或沒有使用IP地址的選項。
在此演示中,由於路由器的限制,無法更改DNS服務器和DHCP,因此未對家庭網絡進行詳細探討。
在示例管理視圖中,您可以按照與在單個設備上相同的方式編碼DNS服務器IP。此演示使用了一個被ISP鎖定的Prolink PRS1841U-v2路由器。
DNS配置界面因路由器而異,但設置看起來如下所示。

您還可以在路由器中禁用DHCP服務,然後在Pi-hole中啟用DHCP服務。Pi-hole社區的示例討論更詳細地展示了這一點。
通過Pi-hole儀表板屏蔽網站
Pi-hole的默認安裝默認屏蔽約92,725個網站,但您還可以通過Pi-hole製作者的黑名單和其他Pi-hole粉絲分享的列表添加更多網站。
1. 將要屏蔽的網站保存在文本文件中,文件名可自選。例如,該文件命名為blocklist.txt。
2. 運行以下docker
命令,將blocklist.txt文件(cp blocklist.txt
)複製到Docker容器的卷中,文件名為blacklist.txt。將blacklist.txt文件保存在Docker卷上,這樣Pi-hole將自動檢測到它。
最後,再次前往 Pi-hole 管理員儀表板。 在左側面板中點擊 工具 選單,然後點擊 更新 Gravity 鏈接。 最後,點擊 更新 以獲取 Pi-hole 阻止的更新 URL 列表。

A successful update will look like the one below.

通過控制台更新網站封鎖列表
也許您更喜歡運行控制台命令而不是導航到 Pi-hole 儀表板。 如果是這樣,您可以在 PowerShell 中運行 docker 命令來封鎖網站。 執行以下 docker exec
命令以創建與 pihole_app
Docker 容器的交互式終端會話,從而可以運行命令。
一旦終端會話打開,運行以下命令以更新 Pi-hole 的黑名單 URL 列表。
不時重新運行
pihole -g
以確保您的廣告封鎖程序保持更新。
通過社區維護的 URL 黑名單封鎖網站
某些 URL 由其貢獻者專門定期更新,而其他則沒有,因此從舊列表上傳黑名單可能不會反映最新的更改。
利用 Pi-hole 的 Adlist 阻止列表組管理功能。 在 Pi-hole 儀表板上,點擊左側面板上的 群組管理 → 廣告列表 選單,然後點擊 添加 以選擇要在 Pi-hole 中添加的 URL 列表。

结论
在這個教學中,您學會了如何下載 Pi-Hole Docker 映像,測試使用主動監聽的 Pi-hole Web 介面,以及測試外部設備連接到 Pi-hole。您還學會了如何阻擋廣告和網站,並在實際操作中看到了 Pi-hole 儀表板阻擋它們的情況。
有了這些知識,為什麼不使用任何主機機器來阻擋同一網路中其他連接的設備上的廣告呢?