9.6 KiB
qBittorrent SOCKS5 代理 + BT 入站转发配置文档
架构总览
出站(SOCKS5 代理)
qBittorrent(192.168.1.200) 互联网
↓ SOCKS5 旁路由:1080 (socks-lan) ↑
↓ Xray routing → to_beijing_direct │
↓ Reality(VLESS, SNI=news.apple.com) │
↓ 北京VPS:443 → Nginx分流 │
↓ proxy_from_lan:9445 → direct(freedom) ─────────────────┘
入站(端口转发)
Peer → 北京VPS:51413 → external_qbit → portal
→ bridge隧道 → 旁路由 → to_qbit → 192.168.1.200:51413
设备清单
| 设备 | IP | 角色 |
|---|---|---|
| 北京VPS | salmonstill.cn / 49.232.242.90 |
公网出口 + 入站入口 |
| 旁路由 | 192.168.1.199 |
Xray 桥接 + SOCKS5 代理 |
| NAS | 192.168.1.188 |
Docker 宿主机 |
| qBittorrent 容器 | 192.168.1.200 |
macvlan 独立 IP,PT 专用 |
第一部分:北京 VPS 配置
1.1 Nginx Stream SNI 分流 beijing-vps-stream.conf
新增 news.apple.com SNI 映射(用于旁路由 Mihomo 直连代理):
stream {
map $ssl_preread_server_name $backend {
www.apple.com xray; # 旁路由反向代理隧道
www.microsoft.com mihomo; # 外部客户端代理 → 东京出口
news.apple.com xray_lan; # 旁路由 Mihomo 北京直连代理
drive.salmonstill.cn nas; # 绿联云服务
default npm; # Nginx Proxy Manager
}
upstream xray { server 127.0.0.1:9443; }
upstream mihomo { server 127.0.0.1:9444; }
upstream xray_lan { server 127.0.0.1:9445; } # 新增
upstream nas { server 127.0.0.1:38653; }
upstream npm { server 127.0.0.1:8443; }
server {
listen 443 reuseport;
listen [::]:443 reuseport;
ssl_preread on;
proxy_pass $backend;
}
}
1.2 Xray 配置 xray-北京vps-config.json
新增入站 proxy_from_lan(北京直连出口)
{
"tag": "proxy_from_lan",
"listen": "127.0.0.1",
"port": 9445,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "113e167a-a2be-4b46-9010-60020108626c",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"show": false,
"target": "www.apple.com:443",
"serverNames": ["news.apple.com"],
"privateKey": "GGT9LfN_2JdQG68cwrULgUK-adfT6wIokLzWjaB0fXs",
"shortIds": ["7c947a71b94f369e"]
}
}
}
Reality 公私钥复用已有的
interconn入站 keypair,serverNames用新的news.apple.com与 Nginx 对应。target设为www.apple.com:443,Reality 从此地址偷取真实 TLS 证书用于伪装。
新增入站 external_qbit(BT 入站端口)
{
"tag": "external_qbit",
"listen": "0.0.0.0",
"port": 51413,
"protocol": "dokodemo-door",
"settings": {
"address": "127.0.0.1",
"port": 51413,
"network": "tcp"
}
}
仅 TCP——Xray portal 反向代理对 UDP 支持不完善,BT 的 μTP(UDP) 走不了,需要在 qBittorrent 里关闭。
新增路由规则
{ "type": "field", "inboundTag": ["proxy_from_lan"], "outboundTag": "direct" },
{ "type": "field", "inboundTag": ["external_qbit"], "outboundTag": "portal" }
1.3 腾讯云防火墙
新开端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 51413 | TCP | BT 入站 |
第二部分:旁路由 Xray SOCKS5 出站代理
2.1 配置 xray-旁路由-config.json
qBittorrent 出站不走 Mihomo 透明代理,而是通过旁路由上 Xray 的 socks-lan 入站(:1080),直接转发到北京 VPS 直连出口。
SOCKS5 入站
{
"tag": "socks-lan",
"port": 1080,
"listen": "0.0.0.0",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
}
出站 to_beijing_direct
{
"tag": "to_beijing_direct",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "salmonstill.cn",
"port": 443,
"users": [
{
"id": "113e167a-a2be-4b46-9010-60020108626c",
"flow": "xtls-rprx-vision",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"fingerprint": "chrome",
"serverName": "news.apple.com",
"publicKey": "62y5gDjPrdeuePGl-D2IW4Cw9Kb8_bSBBTmArvL7Nhs",
"shortId": "7c947a71b94f369e"
}
}
}
路由规则
{ "type": "field", "inboundTag": ["socks-lan"], "outboundTag": "to_beijing_direct" }
路径:
qBittorrent → SOCKS5 旁路由:1080 → to_beijing_direct → 北京VPS:443(SNI=news.apple.com) → proxy_from_lan:9445 → direct → 互联网
第三部分:旁路由 Xray 51413 转发
3.1 配置 xray-旁路由-config.json
新增加出站 to_qbit
{
"tag": "to_qbit",
"protocol": "freedom",
"settings": {
"redirect": "192.168.1.200:51413"
}
}
新增路由规则
{
"type": "field",
"inboundTag": ["bridge"],
"port": "51413",
"outboundTag": "to_qbit"
}
放在 bridge 下——从北京 VPS 的 portal 通过反向隧道过来的 BT 入站流量,由 bridge 接收后按端口 51413 匹配到此规则,转发到 qBittorrent 容器。
第四部分:NAS qBittorrent Docker
4.1 创建 macvlan 网络
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.199 \
--ip-range=192.168.1.200/32 \
-o parent=eth0 \
qbit_macvlan
--gateway=192.168.1.199:qBittorrent 的默认网关设为旁路由,确保出站流量经过旁路由。--ip-range=192.168.1.200/32:固定 IP。
4.2 启动容器
docker run -d \
--name qbittorrent \
--network qbit_macvlan \
--ip 192.168.1.200 \
-e WEBUI_PORT=8090 \
-p 8090:8090 \
-v /path/to/downloads:/downloads \
lscr.io/linuxserver/qbittorrent:latest
4.3 qBittorrent 设置
| 设置项 | 值 |
|---|---|
| 监听端口 | 51413 |
| UPnP/NAT-PMP | 禁用 |
| SOCKS5 代理 | 192.168.1.199 / 端口 1080 |
| 连接协议 | 仅 TCP(关闭 μTP) |
| DHT | 可选(建议开) |
| PEX | 可选(建议开) |
关闭 μTP(UDP):Xray portal 反向代理不支持 UDP,BT 的 μTP 走 UDP 会导致入站失败。
4.4 定时做种调度(crontab)
让 qBittorrent 只在夜间(01:00-07:00)做种,白天暂停以节省带宽:
crontab -e
添加以下两行(在 NAS 或任意可访问 192.168.1.200 的设备上):
0 1 * * * curl -s -X POST "http://192.168.1.200:8888/api/v2/torrents/start" --data "hashes=all"
0 7 * * * curl -s -X POST "http://192.168.1.200:8888/api/v2/torrents/stop" --data "hashes=all"
| 时间 | 操作 | 含义 |
|---|---|---|
| 凌晨 01:00 | /torrents/start hashes=all |
启动全部种子开始做种 |
| 早上 07:00 | /torrents/stop hashes=all |
停止全部种子 |
第五部分:部署顺序
1. 腾讯云防火墙 → 开放 51413/tcp
2. scp beijing-vps-stream.conf → 北京VPS /etc/nginx/stream.conf.d/
3. scp xray-北京vps-config.json → 北京VPS /usr/local/etc/xray/config.json
4. 北京VPS: nginx -t && systemctl reload nginx
5. 北京VPS: systemctl restart xray
6. scp 旁路由的mihomo config.yaml → 旁路由 /opt/mihomo/config.yaml
7. scp xray-旁路由-config.json → 旁路由 /etc/xray/config.json
8. 旁路由: /etc/init.d/mihomo restart
9. 旁路由: /etc/init.d/xray restart
10. NAS: 创建 macvlan 网络 + 启动 qBittorrent 容器
11. NAS: 配置 qBittorrent 监听端口 51413,关闭 μTP
第六部分:验证
6.1 SOCKS5 代理出站验证
# 在 NAS 上执行,应返回北京 VPS 的公网 IP
docker exec qbittorrent curl --socks5 192.168.1.199:1080 https://ip.sb
6.2 Xray 日志确认
# 旁路由上查看 Xray 日志,确认 socks-lan 流量转发正常
tail -f /var/log/xray.log | grep socks-lan
6.3 BT 入站验证
# 北京 VPS 上确认端口监听
ss -tlnp | grep 51413
# 从外部测试端口可达
nc -zv salmonstill.cn 51413
6.4 端到端 BT 测试
下载一个热门 Ubuntu torrent 种子,观察:
- qBittorrent WebUI → 连接 → 应显示 DHT 节点数增长
- 跟踪器页面 → 应显示 "Working"
- 下载速度应有上传来确认入站工作
第七部分:故障排查
| 现象 | 排查 |
|---|---|
| qBittorrent curl ip.sb 返回真实 IP | SOCKS5 代理未生效,检查 qBittorrent 设置中代理配置 |
| 代理连不上 | 确认 旁路由 Xray 正在运行且 socks-lan 入站监听 :1080 |
| 入站无上传 | 检查北京 VPS ufw/腾讯云安全组已放行 51413/tcp |
xray 报错 reverse-proxy.xray.internal |
portal/bridge 域名不匹配,两边必须一致 |
| 下载有速度、无上传 | μTP 没关或 portal UDP 不支持,qBittorrent 设置仅 TCP |
第八部分:文件清单
| 文件 | 位置 | 作用 |
|---|---|---|
beijing-vps-stream.conf |
北京VPS /etc/nginx/stream.conf.d/ |
Nginx SNI分流(含 news.apple.com → 9445) |
xray-北京vps-config.json |
北京VPS /usr/local/etc/xray/config.json |
Xray 入站+路由(含 proxy_from_lan + external_qbit) |
xray-旁路由-config.json |
旁路由 /etc/xray/config.json |
Xray bridge + to_qbit(51413) + socks-lan(1080) → to_beijing_direct |