1. 簡介
在參與 Private Tracker (PT) 社群時,遵守客戶端規範至關重要。許多 PT 站點為了維護公平性,明文禁止使用具有「反吸血」或「修改版」功能的客戶端(如 qBittorrent Enhanced Edition)。然而,使用標準版客戶端卻可能讓使用者在公開追蹤器(Public Trackers)上面臨吸血蟲(Leech)消耗上傳頻寬的問題。
本文將指導您如何透過 Docker 建構一個兩全其美的解決方案:
- 部署 qBittorrent 標準版(Official Standard Edition)以符合 PT 站規範。
- 掛載 qBittorrent-ClientBlocker 服務,在背景自動掃描並封鎖特定關鍵字(如迅雷、Baidu)的違規用戶。
此方案採用「設定後即忘(Set-and-Forget)」的架構,並解決了容器常見的時區不同步問題,確保日誌紀錄準確以便於除錯。
2. 先決條件
在開始之前,請確保您具備以下環境與資訊:
- 作業系統:已安裝 Docker 與 Docker Compose 的 Linux 環境(如 Ubuntu 或 NAS 系統)。
- 使用者 ID (PUID/PGID):確認您擁有存取掛載目錄權限的使用者 ID(本文範例為
1000)。 - 路徑規劃:您已規劃好設定檔與下載目錄的存放路徑(本文將沿用現有的
/mnt/cloud1/...路徑結構)。
3. Step 1 — 整合 Docker Compose 設定檔
我們將 qBittorrent 主程式與 ClientBlocker 整合在同一個 docker-compose.yml 檔案中。這不僅管理方便,還能讓兩個容器在同一個 Docker 網路內直接通訊,無需額外設定 bridge 網路。
請建立或編輯您的 docker-compose.yml 檔案,內容如下:
version: "3.7"
services:
# ==========================================
# 服務 1: qBittorrent 標準版 (符合 PT 規範)
# ==========================================
qbittorrent-standard:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent-standard
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Taipei # 設定時區
- WEBUI_PORT=8080 # 容器內部端口
- TORRENTING_PORT=51134
volumes:
# 設定檔與下載目錄映射
- /mnt/qbittorrent-standard/config:/config
- /mnt/qbittorrent-standard/PTdl:/downloads
# 【重要】掛載主機時間檔,確保日誌時間準確
- /etc/localtime:/etc/localtime:ro
ports:
# Web UI 映射:外部 8086 -> 內部 8080
- 8086:8080
# BT 連線端口 (TCP/UDP 需一致)
- 51134:51134
- 51134:51134/udp
# ==========================================
# 服務 2: ClientBlocker (自動阻擋吸血蟲)
# ==========================================
qbit-clientblocker:
image: simpletracker/qbittorrent-clientblocker:latest
container_name: qbit-clientblocker
restart: unless-stopped
environment:
- TZ=Asia/Taipei # 與主程式保持一致
# 【重要】開啟環境變數模式
- useENV=true
# qBittorrent 連線設定
# 注意:在同一 Docker 網路內,直接使用容器名稱 "qbittorrent-standard"
# 且端口使用內部端口 "8080" (而非外部的 8086)
- clientURL=http://qbittorrent-standard:8080
- clientUsername=${QBIT_USER}
- clientPassword=${QBIT_PASS}
# 封鎖名單 (JSON 格式,支援正則表達式)
- blockList=["XL0012", "Xunlei", "Xfplay", "Baidu", "dht_nodes", "Go-http-client"]
# 檢查頻率 (秒)
- interval=60
# 日誌設定 (設為 true 可看到詳細除錯資訊)
- debug=false
volumes:
# 同樣掛載時間檔,確保 Log 時間正確
- /etc/localtime:/etc/localtime:ro
depends_on:
- qbittorrent-standard
設定重點說明:
- 網路通訊:
qbit-clientblocker透過http://qbittorrent-standard:8080連線。請注意這裡使用的是內部端口 8080,而非您映射到主機的 8086。同一個 Compose 專案內的容器預設共享同一個 bridge 網路,可直接以容器名稱互相尋址。 - 時區同步: 兩個服務都加入了
TZ=Asia/Taipei環境變數以及- /etc/localtime:/etc/localtime:ro掛載。這是修正日誌時間落後 8 小時的關鍵,缺一不可。 - 環境變數:
QBIT_USER和QBIT_PASS建議存放在同目錄下的.env檔案中,避免密碼直接暴露在 YAML 檔內。
4. Step 2 — 部署服務
在啟動前,請先建立存放憑證的 .env 檔案:
# 在 docker-compose.yml 同目錄下建立 .env
echo "QBIT_USER=your_username" >> .env
echo "QBIT_PASS=your_password" >> .env
確認檔案內容無誤後,執行以下指令啟動服務:
docker-compose up -d
系統將會下載映像檔並啟動兩個容器。qbittorrent-standard 會先啟動,隨後 qbit-clientblocker 會依據 depends_on 的設定跟隨啟動。
5. Step 3 — 驗證運作與時區
由於 ClientBlocker 沒有圖形介面,我們必須檢查日誌來確認兩件事:連線是否成功以及時間是否正確。
執行以下指令查看即時日誌:
docker logs -f qbit-clientblocker
請檢查以下輸出的關鍵資訊:
- 時間戳記 (Timestamp): 日誌開頭的時間是否與您當下的台灣時間一致?如果不一致(例如慢了 8 小時),代表
/etc/localtime掛載未生效,請確認 volume 設定。 - 連線狀態: 是否出現
Connected to qBittorrent或類似成功訊息?若出現Connection refused,請檢查clientURL是否正確,以及 qBittorrent 的 Web UI 是否已啟用「略過本機連線身分驗證」。 - 封鎖動作: 當有下載任務時,若偵測到吸血端,應顯示如下日誌:
[2026-01-06 02:55:37][Task] 此次封禁客户端:1 个,此次封禁 IP: 0 个,当前封禁 IP 及客户端:713 个。
[2026-01-06 02:55:37][CheckPeer_AddBlockPeer (Bad-Client_Normal)] 219.xxx.149.102:29474 "-XL0019-"|"XunLei 0019" (TorrentInfoHash: xxxxx).
[2026-01-06 02:52:37][Task] 此次封禁客户端:2 个,此次封禁 IP: 0 个,当前封禁 IP 及客户端:712 个。
[2026-01-06 02:52:37][CheckPeer_AddBlockPeer (Bad-Client_Normal)] 113.78.xxx.175:7525 "-XL0019-"|"XunLei 0019" (TorrentInfoHash: xxxx).
正常運作時,除了在前端就被封鎖的 PT 種子以外,網路上分享的普通 BT 種子通常都會有 30~100 個封鎖訊息出現。
6. Step 4 — 日後維護與名單更新
ClientBlocker 的運作邏輯是「靜默守護」,一旦部署完成不需要日常介入。若您日後發現新的吸血軟體(例如某個新版的迅雷變種),更新封鎖名單只需三步:
- 編輯
docker-compose.yml,修改blockList欄位加入新關鍵字:
- blockList=["XL0012", "Xunlei", "NewVampireClient"]
- 執行以下指令重新建立容器以套用新設定:
docker-compose up -d --force-recreate qbit-clientblocker
加上
--force-recreate可只重建 ClientBlocker 容器,不影響 qBittorrent 的下載任務。
7. 結論
透過此架構,您成功建立了一個乾淨且合規的下載環境。標準版的 qBittorrent 讓您能夠安全地在 PT 站生存,而外掛的 ClientBlocker 則在背景默默過濾來自公開網路的惡意吸血用戶。如果未來覺得此方案不順手,只需停止並移除容器,您的系統依然保持整潔,不會留下殘餘的設定檔垃圾。
8. 心得
跑了一段時間觀察封鎖日誌,統計下來有個有趣的發現:
被封鎖的 IP 來源大約 80% 來自中國,20% 來自台灣,從來沒有看過其他國家的 IP 被 ban 過。
中國那邊主要是迅雷(XunLei)系列,各種版本的變種輪流上場,封了舊的又來新的,有種打地鼠的既視感。台灣的部分就比較雜,但同樣是吸血不分享的行為模式。
說來也是不愧是同源同種,連吸血的習慣都如出一轍。至於其他國家的用戶,不管是歐美還是日韓,在日誌裡的能見度幾乎是零——不曉得是因為他們不下 BT,還是根本不需要靠吸血工具才能用。
總之這個工具值得長期跑著,安靜、低資源,默默做該做的事。
