PT、BT 下载如何利用 P2P 打洞获得上传速度。

2022-12-13 08:40:59 +08:00
 mmr
已经实现的:
  1. 宽带改桥接。
  2. 拨号路由器 DMZ 主机设为下载服务器。
现阶段情况:
  1. 大部分时间没有上传。
  2. 对一部分国内 ip 有上传(可能是对面把我的端口蒙对了,或者 NAT 出去的就是原端口)。
想实现的:
  1. 希望实现用一个公网服务器自动的进行 P2P 打洞。
  2. 可不可以提供一些清晰的关于 NAT 和 P2P 打洞的资料。
7290 次点击
所在节点    宽带症候群
39 条回复
mmr
2022-12-13 14:10:36 +08:00
@mikewang 我逝逝,现在的 PT 站不是很热门,下载人数不多,可能是这个原因才没上传的吧
dc3365
2022-12-13 14:23:57 +08:00
我的解决方案是直接在网站上购买上传量。10 块钱可以买到很多。足够单独下载很久。
redbeanzzZ
2022-12-13 17:34:34 +08:00
@RheatiN 热门成人包回个本一般还是可以的,反正 24 小时挂着
mikewang
2022-12-13 23:26:32 +08:00
确实,如果 BT 软件直接支持获取外部的 DHT 端口的话,也不用采取这样的迂回战术。

采取迂回的方法有点麻烦:1. 不能采用 DMZ ,端口 A 需要和端口 C 一致; 2. Hook 脚本不仅要改 BT 监听端口,还要改路由器的端口映射。

不修改 BT 客户端的情况下可行,有点折腾。综上,无 v4 公网情况下 BT 还是走 v6 省事 。 @mmr @heiher
cwbsw
2022-12-14 14:32:19 +08:00
@mikewang 看了下 @heiher 写的 natmap ,用起来应该还挺简单的啊,需要动态更改的只有 BT 的监听端口而已,transmission-remote 一个参数就能解决,其它的都是固定的。
cwbsw
2022-12-14 14:34:39 +08:00
好想是想太简单了,应该还需要动态配置 IPv6 的防火墙,不过问题也不大,很多方法可以解决。
Wenpo
2022-12-15 00:02:58 +08:00
@mikewang 蹲,哈哈事实上 natter 刚出来的时候,我第一个应用就是给 bt/pt 打洞,然后把打洞后的端口手动设置到 tr 上,我每次都还用 itdog 全国 ping 一下,每过一阵子我还要检查一下端口改了没。
qbqbqbqb
2022-12-18 17:51:42 +08:00
BT 打洞是看软件实现的。

首先 BT 有两个协议,基于 TCP 的 BT 协议和基于 UDP 的 uTP 协议,只有 UDP 的 uTP 能打洞。所以你的 BT 软件必须要支持 UDP 传输。

其次看你用的是哪款客户端软件,开源 BT 软件一般都是基于 libutp 这个库的,这个库里的 uTP 的实现上支持一个 ut_holepunch 打洞扩展。
已知 qBittorrent 可以自动打洞。Transmission 虽然也是基于 libutp 的,但它似乎没有实现打洞功能。
其它软件的话,很多人喜欢用的“比特彗星”这个软件,老版本是完全不能打洞的,新版本据说可以。
qbqbqbqb
2022-12-18 17:53:24 +08:00
BT 内置打洞协议资料:
https://www.bittorrent.org/beps/bep_0055.html

就看你用的 BT 软件支不支持这个了。
jyeric
2022-12-26 20:57:24 +08:00
bitcomet 好像据说支持打洞,但没实际测试过
MeteorVIP
2023-02-03 11:54:33 +08:00
@heiher #18 大佬的插件非常爽,享受了公网 IP !感谢!
@Wenpo #27 我也是用来给 bt ,pt 打洞,哈哈哈
@mikewang #14 我使用的方法和你说的一模一样。
natmap 插件提供了公网 IP 端口变动通知的功能,我自己写了脚本:公网 IP 端口变动就通知 vx 。同理,把脚本改为变动了就修改 Transmission 的端口,tr 的端口是写在配置文件里面的。流程:停止 tr ,修改端口,运行 tr 。
我是千兆,上传一般是 5m/s ,偶尔能上 7 到 9 ,再次感谢 @heiher
mikewang
2023-02-04 01:41:52 +08:00
@MeteorVIP 👍实践出真知
这种 NAT1“真”穿透打洞的方式是我半年前一时兴起想到的方法,得到了广大 v 友的验证,还有 @heiher 这样优秀的开发者以全开源的形式贡献代码。毕竟很多类似的工具不是中转就是闭源。还是非常感动的。欢迎来 https://t.me/hellonatter 大家一起探讨。
MeteorVIP
2023-02-04 20:56:28 +08:00
@cwbsw 大佬,要怎么用命令改 peer-port?
cwbsw
2023-02-04 21:34:37 +08:00
@MeteorVIP transmission-remote 192.168.1.10:9091 -p 12345
MeteorVIP
2023-02-06 00:25:26 +08:00
@heiher 大佬,怎么通过命令去修改转发的端口?新建会了,修改还不会。大佬有空的时候教教:)
heiher
2023-02-06 12:34:52 +08:00
@MeteorVIP #35 应用程序的端口转发在程序启动后目前无法修改,将来可以增加方法;结合性能考虑,建议使用防火墙的端口转发,在映射建立获得公网端口,调整 BT 客户端侦听端口后,脚本里再更新防火墙的端口转发规则。
MeteorVIP
2023-02-06 22:08:11 +08:00
@heiher #36 可能是表达的不够清楚,我想修改的是"转发目标端口".
通过界面是可以修改的.openwrt 界面显示的代码是 uci set natmap.cfg053b66.forward_port='54321'
比如新建端口 23456 代码为 natmap -4 -d -i pppoe-wan -s stun.stunprotocol.org -h qq.com -b 48083 -t 172.16.1.111 -p 23456
我想把 23456 改为 54321,请问通过代码怎么实现?谢谢
heiher
2023-02-06 22:17:35 +08:00
@MeteorVIP #37 我没有理解错,已经启动的 natmap 的 -p 参数还不能运行时修改,建议使用防火墙的端口转发实现 -t 172.16.1.111 -p 23456 的转发功能,性能更好,而且也方便更新目标端口。

如果暂时非要用 natmap 的应用程序端口转发,那么一种 workaround 方法是先后启动两个 natmap ,打同一个端口:

1. natmap -4 -d -i pppoe-wan -s stun.stunprotocol.org -h qq.com -b 48083 -t 172.16.1.111 -p 23456 -e script1
2. natmap -4 -d -i pppoe-wan -s stun.stunprotocol.org -h baidu.com -b 48083 -t 172.16.1.111 -p 54321 -e script2

script1 负责启动第二个 natmap ,并关闭第一个 natmap 。script2 实现同等的功能,当公网端口映射变更时。需要注意的是 -h 参数两个 natmap 需要不同,防止冲突。两个不同的 http server 可以交替使用。

还是建议使用防火墙方式,可以参考这个更新脚本:

https://github.com/Mythologyli/qBittorrent-NAT-TCP-Hole-Punching/blob/master/update.sh#L21
ChiCh
259 天前
BT 软件是支持打洞的,而且打洞方式已经被协议化了,详见: https://www.bittorrent.org/beps/bep_0055.html

如果用的软件不是太旧的版本的话,想必都已经实现了此功能。

协议中:只支持 UDP 打洞,并通过 uTP 传输( TCP 打洞不支持,我认为是因为 TCP 打洞只支持完全锥形 NAT ,打洞成功率较低)。

STUN 也和大家想的不一样,他是通过把有公网 IP 的下载/做种用户当作 STUN 进行搭桥。

至于 Tracker 部分,上传给 Tracker 的仍然是不可用的内网端口号。Tracker 在此环境下只提供“得到活动的公网 IP 用户”的功能。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/902093

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX