虽然可以直接使用公共 Tracker 服务器, 但一旦这些公共服务关闭或失效, 就需要通知所有用户手动更新 Tracker 地址, 维护成本非常高。因此, 搭建一个私有 Tracker 服务器是更稳妥的选择。
本次搭建的目标主要有:
- 在内部分享文件, 不希望被第三方 Tracker 统计或记录
- 避免公共 Tracker 被滥用, 影响正常上传与带宽资源
目前, 许多公开 Tracker 已被大量 PCDN 滥用。这些节点通常使用魔改客户端, 通过伪造下载行为来对冲上传量, 以规避因上传远大于下载流量而被运营商限速或封禁宽带。
只要开启做种, 上传带宽几乎会被持续占满, 对方满速吸血, 还会伪造下载进度, 导致服务端和普通用户都难以进行有效识别与防御。如今, 不少公开种子在连接公开 Tracker 后, 都会出现长期满速上传的情况。
这种行为对私有分享和小规模分发场景极为不友好, 也正是选择放弃公开 Tracker、转而自建私有 Tracker 的重要原因之一。
Tracker 服务端方案选择
目前主流的 Tracker 服务端实现主要有三种:
- OpenTracker (C 语言)
- Ocelot (C++)
- Chihaya (Go 语言)
在实际使用过程中, OpenTracker 暴露出不少维护和扩展方面的问题
- 无法正确识别由 Nginx 反向代理传递的
X-Real-IP和X-Forwarded-For头 - 每次新增或调整功能, 都需要修改编译参数并重新编译, 维护成本较高
- 构建体系非常陈旧, 甚至仍依赖 CVS 才能获取核心网络库
libowfat
综合可维护性、扩展性等因素考虑, 在 2026 年, 选择 Chihaya 作为 Tracker 服务端更加合理。
配置 Go 语言环境
虽然 Chihaya 的 Releases 页面中有几个版本, 但整个社区普遍使用 HEAD 分支自行构建, 项目组懒得自己定时发布版本。
由于 Chihaya 使用 Go 编写, 首先需要在系统中配置 Go 编译环境。
安装 Go
下载并解压 Go 官方发行版
wget https://go.dev/dl/go1.25.5.linux-amd64.tar.gz
rm -rf /usr/local/go
tar -C /usr/local -xzf go1.25.5.linux-amd64.tar.gz
配置环境变量
将 Go 的二进制路径加入系统 PATH, 这里采用全局方式配置。
创建 profile 脚本
echo 'export PATH=$PATH:/usr/local/go/bin' > /etc/profile.d/go.sh
使配置立即生效
source /etc/profile.d/go.sh
验证安装
运行以下命令检查是否安装成功
go version
如果看到类似 go version go1.25.5 linux/amd64 的输出, 说明安装成功!
手动安装 Chihaya
编译 Chihaya
Chihaya 的编译过程很简单
git clone https://github.com/chihaya/chihaya.git
cd chihaya
go build ./cmd/chihaya
如果希望得到更小的二进制文件, 可以使用以下方式
go build -trimpath -ldflags "-s -w" ./cmd/chihaya
编译完成后, 会生成一个名为 chihaya 的可执行文件
可以通过以下命令验证程序是否正常
./chihaya --help
创建系统运行用户
不建议直接使用 root 运行服务, 应创建独立的用户运行 Chihaya
该用户不允许登录, 也不自动创建家目录, 适合用于后台服务
useradd -M -s /sbin/nologin chihaya
建立专属文件夹
遵循 FHS (Filesystem Hierarchy Standard) 与 SELinux 安全策略, 手动安装的第三方服务推荐放置在 /opt 目录下
# 创建目录
mkdir -p /opt/chihaya
# 将二进制文件和配置放入其中
cp chihaya /opt/chihaya/
cp dist/example_config.yaml /opt/chihaya/chihaya.yaml
# 设置权限: chihaya 用户需要读取权限, 如果程序需要写日志则需要写权限
chown -R chihaya:chihaya /opt/chihaya
# 先把所有东西设为目录 755, 文件 644 的基准 (常用技巧)
chmod -R 644 /opt/chihaya
find /opt/chihaya -type d -exec chmod 755 {} +
# 单独给二进制程序增加执行权限
chmod 750 /opt/chihaya/chihaya
# 限制配置文件的访问, 仅限 chihaya 用户和组
chmod 640 /opt/chihaya/chihaya.yaml
配置 Chihaya
打开并根据需要编辑其中的配置选项, 相关配置都有英文说明
vim /opt/chihaya/chihaya.yaml
配置要点
- 删除 UDP 相关配置 (仅使用 HTTP)
- 监听地址使用内网
127.0.0.1, 由反向代理对外提供服务 - 默认已支持 IPv4 / IPv6 双栈, 其余配置可保持默认
配置 SELinux 规则
在 Rocky 9 中, 如果可执行文件不在 /usr/bin 等标准系统路径下, SELinux 默认会阻止 systemd 直接执行该二进制文件。
因此, 需要显式告知 SELinux: /opt/chihaya 目录中的程序属于可执行的服务程序。最简单且符合逻辑的做法, 是将该二进制文件的安全上下文标记为 bin_t 类型, 使其被视为合法的可执行文件。
需要为 Chihaya 显式设置安全上下文
# 给二进制文件赋予执行标签
semanage fcontext -a -t bin_t "/opt/chihaya/chihaya"
# 给配置文件赋予通用的、由 systemd 读取的标签 (如 etc_t)
semanage fcontext -a -t etc_t "/opt/chihaya/chihaya.yaml"
# 应用修改到文件系统
restorecon -Rv /opt/chihaya
创建 systemd 服务
创建服务单元文件
vim /etc/systemd/system/chihaya.service
内容如下
[Unit]
Description=Chihaya Service
After=network.target
[Service]
User=chihaya
Group=chihaya
WorkingDirectory=/opt/chihaya
ExecStart=/opt/chihaya/chihaya --config chihaya.yaml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
加载并启动服务
systemctl daemon-reload
systemctl start chihaya
systemctl enable chihaya
systemctl status chihaya
验证 Chihaya 是否正常运行
在服务启动完成后, 可以通过以下方式确认 Chihaya 是否已经正常运行。
检查端口监听状态
netstat -nlptu | grep chihaya
如果能看到 chihaya 进程正在监听该端口, 说明服务已成功启动
查看服务状态与运行指标
Chihaya 内置了调试与监控接口, 可用于确认服务运行状态
# 用于查看运行状态和性能分析信息
http://127.0.0.1:56880/debug/pprof/
# 用于暴露运行指标, 方便接入监控系统
http://127.0.0.1:56880/metrics
nginx 反向代理与访问控制
使用 nginx 反向代理的方式对外提供 Tracker 服务, 通过路径中携带 Token 的方式进行简单鉴权, 以减少被脚本扫描和滥用的风险。同时, 由 nginx 统一提供 https 支持。
整体架构如下:
- Chihaya 仅监听本地端口, 不直接对公网暴露
- Nginx 负责以下功能:
- 提供 TLS (HTTPS) 支持
- IPv4 / IPv6 双栈访问
- 访问控制 (基于 Token)
- HTTP/2 支持
upstream chihaya_tracker {
server 127.0.0.1:56969;
keepalive 16;
}
# 根据 URL 中提取的 key 判断是否授权
map $captured_key $is_authorized {
default 0;
"0s6mbzbcp4grlq9a4nay93ozlzadueis" 1; # key 1
"ev2x3pmghcag5btekctdnz3eh16kbjbz" 1; # key 2
"4ii67b78adbrccj0zu49h8fvrefkqnoi" 1; # key 3
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name tracker.acesheep.com;
# SSL 相关配置 (已省略)
# 日志相关配置 (已省略)
location / {
try_files $uri /index.html;
}
# 同时匹配 /<TOKEN>/announce 和 /<TOKEN>/scrape
location ~ "^/(?<captured_key>[a-z0-9]{32})/(announce|scrape)$" {
access_log /var/log/nginx/tracker_chihaya.log main;
error_log /var/log/nginx/tracker_chihaya.error;
# 鉴权失败直接拒绝
if ($is_authorized = 0) {
return 403;
}
# 将 /<TOKEN>/announce 内部重写为 /announce
# break 表示停止后续匹配, 直接在当前 location 处理
rewrite ^/[^/]+/(.*)$ /$1 break;
# 转发至后端 Chihaya
proxy_pass http://chihaya_tracker;
# 保持长连接
proxy_http_version 1.1;
proxy_set_header Connection "";
# 向 Chihaya 传递真实客户端 IP
proxy_set_header X-Real-IP $remote_addr;
}
# 精确匹配 /metrics 路径
location = /metrics {
access_log /var/log/nginx/tracker_metrics.log main;
error_log /var/log/nginx/tracker_metrics.error;
# 由于 metrics 涉及服务器采样, 建议启用基本认证
auth_basic "Restricted Access";
auth_basic_user_file /home/SSL/tracker.acesheep.com.htpasswd;
proxy_pass http://127.0.0.1:56880;
}
}
Tracker 地址测试
可以将以下地址添加到客户端的 Tracker 列表中进行测试
https://tracker.acesheep.com/0s6mbzbcp4grlq9a4nay93ozlzadueis/announce
如果客户端能够正常连接并开始汇报状态, 说明:
- Nginx 反向代理工作正常
- Token 鉴权生效
- Chihaya 运行正常
(可选) 配置 Prometheus 监控
Chihaya 提供了符合 Prometheus 规范的 /metrics 接口, 可以通过 Prometheus 定期采集运行指标, 用于监控 Tracker 的运行状态和性能情况。最终可以通过 Grafana 对采集的数据进行可视化展示。
![]()
编辑 Prometheus 配置文件
vim /opt/prometheus/prometheus.yml
在配置文件中添加如下内容
global:
# evaluation_interval: 5s
scrape_configs:
- job_name: chihaya_tracker
scrape_interval: 5s
# metrics_path defaults to '/metrics'
scheme: https
basic_auth:
username: tracker.acesheep.com
password: blog.acesheep.com
static_configs:
- targets: ["tracker.acesheep.com"]
labels:
app: chihaya
配置完成并重载 Prometheus 后, 即可在 Prometheus 中看到 Chihaya 的相关指标数据
原文
chihaya/chihaya: A customizable, multi-protocol BitTorrent Tracker
centos7搭建带鉴权私有Tracker教程