在 DSM Docker 安裝把廣告從源頭就徹底弄掛的 Pi-hole

之前在 UniFi USG 內建的 dnsmasq 服務放入 yhost 擋廣告的清單

把廣告在 DNS 查詢時就徹底按死在地上,這樣做挺好的,因為局域網內所有上網的設備

不需要額外安裝軟體或者設定,不管是上網還是打開任何App,全部都能享受到零廣告的好處

但是 USG 一直以來都兩個致命毛病

  1. USG 更新升級時,放入的擋廣告清單會被清空
  2. 需要另外寫腳本放它自動去更新

某次在 USG 升級後又被清空,不爽了所以乾脆另尋他路,結果就找到一個開源的 Pi-hole

這個項目有各種好處:

  1. 能識別阻擋全世界超過 10 萬個有害或者廣告的域名
  2. 阻擋廣告的效果可以在所有設備、所有系統以及所有App內
  3. 增進整體網路效能(因為廣告在被下載前,已經被阻擋)
  4. 行動設備可以用 VPN 連回家中 Pi-hole 阻擋廣告節省行動網路流量
  5. 有個漂亮完整的 Web 管理介面
  6. 提供 API ,可以在你的程式中使用

可以看下 Pi-hole 他們的官方介紹影片:

Pi-hole 開發者目前也都很活躍,想要看完整源碼可以到 Pi-hole Github 網頁去,或者只是想要獲取他們的擋廣告清單

他們現行採用的擋廣告清單有七個,稍微看一下,各個維護都還算勤勞

而安裝好 Pi-hole 以後,系統也會在午夜時間自動抓取更新,並且自動去除重複的項目,無人值守非常方便

 

雖然這個項目是設計給 Raspberry Pi 的,不過也有人移植到 Docker 上面來

今天我們要介紹的就是在 Synology DSM 的 Docker 上面安裝一套 Pi-hole

 

在 DSM Docker 裡面下載 Pi-hole 的映像檔

  1. 在 DSM 管理頁面打開 Docker

  2. 點選「倉庫伺服器」

  3. 在搜索欄位裡面輸入「pi-hole」

  4. 點「搜尋」

  5. 點選「diginc/pi-hole」(目前 Pi-hole 把它更名為官方映像檔 pihole/pihole 了)

  6. 點選「下載」

/media/2017/10/snipaste_20171011_181358.png

跳出「選擇標籤」時,預設「latest」就可以了

/media/2017/10/snipaste_20171011_181925.png

稍等片刻以後,DSM 就會下載完畢

 

佈署 Pi-hole 與設定 Docker 環境變數

  1. 點選 DSM Docker 的「映像檔」

  2. 點選剛剛下載好的映像檔「diginc/pi-hole:latest」

  3. 點擊「佈署」按鈕

  4. 點擊「進階設定」按鈕

/media/2017/10/snipaste_20171011_182430.png

 

「自動重啟」建議勾選,如果當機掛了或者 DSM 重新開機後,這個容器還會自動啟動

/media/2017/10/snipaste_20171011_183119.png& nbsp;

為了避免以後升級 Docker 映像檔後設定消失,所以我們要建立本地資料夾與容器資料夾的連結

這樣容器內的設定檔就會存到 DSM 本地的資料夾,這樣也方便我們編輯

  1. 點擊「儲存空間」

  2. 點擊「新增資料夾」

  3. DSM 本地資料夾請隨意新增兩個,分別對應兩個容器資料夾,設定完應該會跟下面圖片一樣

「/etc/pihole」這個是 pi-hole 存放設定檔的地方

「/etc/dnsmasq.d」這個是 pi-hole 存放 dnsmasq 規則的地方

/media/2017/10/snipaste_20171011_183736.png

 

在「連接埠設定」頁面是設定 DSM 與容器端口的映射,設定好以後我們連到 DSM IP 跟相應端口就能訪問到容器

  1. 點選「連接埠設定」

  2. pi-hole 共要設定三個端口,設定完應該如下面圖片

其中因為我 DSM 已經跑一個 http 服務,所以已經佔用掉 80 端口,這邊我就改成 36778

53 端口是 DNS 伺服器專用,如果 DSM 上面沒其他 DNS Server 建議就不要修改

/media/2017/10/snipaste_20171011_185316.png

 

設定 pi-hole 環境變數,有幾項比較重要需要設定

  1. 點擊「環境設定」

  2. 這邊列出幾個比較重要的設定,完整的設定可以到 Docker 的網頁查詢

「ServerIP」這邊設定 DSM 的內網 IP 地址

「TZ」這邊設定時區,有設定時區以後,Pi-hole 會在半夜時間更新廣告清單

「WEBPASSWORD」這個是登入 Pi-hole 網頁管理頁面的密碼

「DNS1」、「DNS2」這兩個可以根據你的網路設定來決定,下圖是 OpenDNS 的,你也可以換成自己網路運營商的,不設定的話就 Pi-hole 就會使用 Google DNS

/media/2017/10/snipaste_20171011_191000.png

 

設定完以上內容後,就全部都點「確定」或者「下一步」,最後 Pi-hole 就會正常啟動了!

啟動後我們就可以透過剛剛設定的 ServerIP 來登入 Pi-hole 管理頁面

http://[ServerIP]:[Port]/admin

根據以上文章設定為例那就是: http://192.168.2.200:36778/admin

/media/2017/10/snipaste_20171012_095805.png

瀏覽器輸入以上網址,然後輸入剛剛設定的 WEBPASSWORD,就能登入管理頁面囉~

登入後就能看到更多資訊,有客戶端的請求紀錄、添加白名單與黑名單。。等等,還有 Pi-hole 的設定選項~

/media/2017/10/snipaste_20171012_095923.png

 

以下列幾個 Pi-hole 比較重要的選項

/media/2017/10/snipaste_20171012_100035.png

「Pi-hole DHCP Server」如果你局域網內有其他 DHCP Server 這裡就不要打開,否則會打架

「Pi-hole Block Lists」這裡可以讓你添加或刪除廣告清單,系統會在每週日凌晨 01:59 自動更新

/media/2017/10/snipaste_20171012_100121.png

另外他還支援 DNSSEC 功能,如果你使用 Google DNS 或者其他支援 DNSSEC 的話,這裡可以打開支援

Google DNS 在 2013 年的時候就已經支援這項服務,打開後也可以到這個網頁看看有沒有生效?

 

設定選項逛一圈以後,我們還需要到你路由器裡面修改一下 DNS Server 指向 Pi-hole IP

每種路由器的設定方法不同,以下是以 UniFi USG 為例

/media/2017/10/snipaste_20171012_110949.png

通常路由器裡面 DNS Server 應該都能設定兩個,你也可以只設定一組到 Pi-hole

但是這樣如果 Pi-hole 當機或者還沒有啟動的時候,你局域網內的設備會上不了網路

所以保險一點做法是再寫一個 DNS Server 當備援

 

設定完路由器以後,你可以把你的 iPhone 或者電腦重新連線,不知道怎麼做就關閉 WiFi 再打開或者關機再開機

然後請隨意開幾個網站,或者打開Facebook App之類的看看,廣告是不是變少許多呢。。。

連續兩篇都在講阻止廣告,我是有多討厭廣告呢?