#1 - 2022-9-26 09:32
长濑暗
人在日本,为了以防万一目前BT流量走的代理

大概这么一个网络


目前tracker那边显示的是VPS的IP,端口为1
qBittorrent这边显示端口阻塞

下载没问题,但是上传几乎为0,基本上都是在下载的同时上传,做种之后就基本没上传了

自己查了一下,大概是这么一个解释
Tracker服务器在寻找你的真实IP方面非常有天赋。但是这需要代理发送HTTP头标志HTTP_X_FORWARDED_FOR。如果你的代理没有这么做的话,Tracker服务器将把代理的IP当作你的客户端的IP。所以当你登录之后,Tracker服务器尝试连接你的客户端来确信你没有使用NAT/防火墙,服务器实际上将试图连接代理的IP(使用你的BT客户端报告的接收连接端口)。很自然地,代理服务器并没有监听那个端口。如此连接会失败,而Tracker服务器也因此认为你使用了NAT/防火墙。
所以我大概理解为,我的qB通过代理告诉tracker,端口是6881,但是tracker以为这是VPS在跟他说话,于是尝试链接VPS的6881端口,但是VPS的6881端口并没有提供任何服务,所以tracker觉得我防火墙了或者NAT了?

我目前打算尝试一下反代,希望有没有比较懂网络的大神能帮我看看问题所在(bgm38)
#2 - 2022-9-26 19:49

怀疑是此类设置问题
#2-1 - 2022-9-26 21:03
长濑暗
我需要使用代理进行用户链接,不能取消勾选这个。。
#2-2 - 2022-9-26 22:23
Pezeo
长濑暗 说: 我需要使用代理进行用户链接,不能取消勾选这个。。
没太看懂你这套的思路 qb联系tracker和用户连接都是走代理VPS的 转不转发6881号端口有意义吗?
我没有公网的时候qb走代理都是能正常上传下载的
#2-3 - 2022-9-27 11:44
长濑暗
Pezeo 说: 没太看懂你这套的思路 qb联系tracker和用户连接都是走代理VPS的 转不转发6881号端口有意义吗?
我没有公网的时候qb走代理都是能正常上传下载的
我也在想这个问题。。。完全也有可能是我的多虑。。。
我也认为只要qb上设置了代理,那么所有链接都走代理VPS,转发6881好像没意义。
但是我没想通的是,别人怎么找到我。

我自己的网络相关知识比较薄弱,还请指教。麻烦看看我的思路对不对。
如果说不走代理,别人可以通过6881找到我,因为我开放了6881并且路由器上设置了端口转发到公网。
但是走代理的话,我就不知道别人怎么找到我,因为VPS上只有一个代理用的入站端口10000,而且tracker上面显示的是我VPS的地址,端口为1,那别人找我的时候肯定是访问VPS的IP和端口来尝试找到我,可是VPS上的代理软件怎么把这部分反过来传给我。。。
#2-4 - 2022-10-3 08:34
Pezeo
长濑暗 说: 我也在想这个问题。。。完全也有可能是我的多虑。。。
我也认为只要qb上设置了代理,那么所有链接都走代理VPS,转发6881好像没意义。
但是我没想通的是,别人怎么找到我。

我自己的网络相关知识比较薄...
你是觉得没有公网ip的客户端无法经过代理进行上传吗?
#2-5 - 2022-10-3 08:36
长濑暗
Pezeo 说: 你是觉得没有公网ip的客户端无法经过代理进行上传吗?
和有没有公网IP无关,我认为在QB设置里选择了使用代理(包括和用户的P2P连接)之后,就只能主动寻找别人,类似处于内网的情况
#2-6 - 2022-10-3 19:38
Pezeo
长濑暗 说: 和有没有公网IP无关,我认为在QB设置里选择了使用代理(包括和用户的P2P连接)之后,就只能主动寻找别人,类似处于内网的情况
不是这样的 如果你没有公网ip(在nat后的内网中) 使用代理进行P2P连接反而可以帮助你获得上传/下载
#2-7 - 2022-10-3 20:16
长濑暗
Pezeo 说: 不是这样的 如果你没有公网ip(在nat后的内网中) 使用代理进行P2P连接反而可以帮助你获得上传/下载
那我是有公网IP的,怎么解释挂了代理之后qb的端口连通性反而从绿变黄了。
#3 - 2022-9-27 11:59
(Death is the gateway to Eternity, my dear.)
如果是tracker要查你VPS的端口,那你把本地的6881映射到VPS的6881呗
用ssh tunnel或者tinc/zerotier组建加密的VPN然后haproxy一下(bgm37)
#3-1 - 2022-9-27 12:11
长濑暗
关于这点,我后来发现我可能思路不太对。
xray是有反向代理功能的,我自己反代了6881端口直接通往我的qBittorrent,经过日志检查以及尝试先反代一个http页面验证有效性后确认反代成功。但是,没啥卵用。我发现并没有任何人链接我的VPS的6881端口,所以我觉得应该是思路错误。
所以我觉得2楼说的应该是对的。转发6881应该是没有意义的。
#4 - 2022-9-27 12:39
思来想去觉得好像并没有什么问题,于是尝试了一下把VPS的1号端口反向代理到了QB的6881。
看了一下log发现确实很多BT用户在访问1号端口,查了一下1号端口是tcpmux端口,但是没看懂是干吗用的。。。
#5 - 2022-9-27 14:38
应该是我多虑了,换了个PT站,然后用相同的方法挂代理,PT站上的可连接为“是”,我回头手动添加用户试试
#6 - 2022-9-27 22:49
弄到最后也没搞懂这个网络拓扑是怎么个回事,想了半天觉得qb自带的代理功能可能还是不太对
只好抛弃xray另辟蹊径
最终解决方案是改用wireguard了,两个docker解决问题,终于看到绿色小插头了
服务端:https://github.com/linuxserver/docker-wireguard
客户端:https://hotio.dev/containers/qbittorrent
#6-1 - 2022-10-2 10:32
CSYN
这个意思是,qb的流量通过wg路由到你的VPS吗
#6-2 - 2022-10-2 11:23
长濑暗
CSYN 说: 这个意思是,qb的流量通过wg路由到你的VPS吗
其实就是给qb挂了个V*N
#6-3 - 2024-1-9 13:47
长濑暗
好吧补充说明一下这个绿色插头并不能说明什么。。。其实这么弄还是没有公网IP。。。
#7 - 2023-12-27 23:50
补充说明一下,如果在qb里启动了代理,那么似乎它就不会开启监听端口。
所以我目前的解决方案是,使用hotio/qbittorrent的docker image
在有公网IP的VPS上启动wireguard和frp
本地启动qb和frp,把qb监听的端口用frp给port forward了
然后在qb的高级设置里开启允许同一个IP的多个链接
#8 - 2023-12-28 17:27
(四体不勤,五谷不分。文不测字,武不防身 ...)
我没用代理上传也是几乎为零
#8-1 - 2024-1-9 13:42
长濑暗
你确认你有公网IP并在路由器中设置了端口转发吗?
#9 - 2024-1-4 20:12
同样的问题 最后这个解决方案可以写一个详细的教程嘛(bgm43)
#9-1 - 2024-1-9 13:44
长濑暗
你需要最基本的英文水平和docker使用经验,读懂下列三个工具的使用方法就行了。
https://hotio.dev/containers/qbittorrent/
https://docs.linuxserver.io/images/docker-wireguard/
https://gofrp.org/zh-cn/
#9-2 - 2024-1-9 13:46
长濑暗
需要注意的是frp的docker image没有latest这个tag,需要手动指定版本,而且需要手动写command来指定配置文件。
另外两个基本上就是开箱即用,没有什么陷阱。
硬要说的话就是qb的版本建议选择4.3.9,也就是legacy这个tag,因为我试过4.6.2发现吃内存极其爆炸。
#10 - 2024-1-9 13:54
说了这么多,其实结论就是3楼是正确的。
qb自带的代理功能还是没搞懂,虽然确实能做代理,但是这么做qb就不会监听6881了,导致别人无法主动连我。
最好的方案就是不用qb自带的代理,然后给qb开一个vpn做代理,然后把qb监听的6881用frp或者其他内网穿透软件给映射到VPS的6881上,最后设置里调一下允许来自同一IP的多个链接就行。(因为在qb的眼中,访问自己的IP并不是下载者的真实IP而是内网穿透软件的IP)
#11 - 2024-1-14 18:40
(恁永远永远都是***)
这个情况其实是 working as expected,并不是 bug。根本原因是 http 或 socks 代理不支持远程 bind+listen(实际上 socks 的 RFC 中有 bind 指令,但是几乎没有软件实现),因此你无法通过代理功能实现使用代理来做种,主动连接别的 Peer 可以。QB 的内核 libtorrent 的做法是当你设置http 或 socks 代理后,认为你无法做种,直接向 tracker 发送你的端口为 1 以避免 Peer 尝试连接。
所以正解就是使用 VPN 直接让 QB bind 到虚拟网卡上,然后对端进行相应的NAT处理或者重写 libtorrent
#11-1 - 2024-1-24 09:25
长濑暗
非常感谢你的提醒,我已经更改了方案,现在只用WireGuard就解决了。
#12 - 2024-1-24 09:30
我上面提到的frp+WireGuard的方案还是太繁琐了,而且这么做最大的问题就是frp本身并不对流量加密,等于我这个WireGuard白开了(我需要流量加密)

目前去除了frp只剩下了WireGuard
服务端:https://docs.linuxserver.io/images/docker-wireguard/
客户端:https://hotio.dev/containers/qbittorrent/

服务端的wg0.conf里默认的PostUp和PostDown后面加两条iptables命令即可
iptables -t nat -A PREROUTING -p tcp -m tcp --dport <qb port> -j DNAT --to-destination <qb ip>:<qb port>
iptables -t nat -D PREROUTING -p tcp -m tcp --dport <qb port> -j DNAT --to-destination <qb ip>:<qb port>