Loading... ## 零.前言 众所周知,移动虽然上行给的大方,但死也要不到公网 IPv4 ,只有公网 IPv6 ,不怎么好抢上传。有人会说 BT 软件不是会进行 P2P 打洞吗?但实际上绝大部分BT软件包括 qbittorrent 的 P2P 打洞实现的并不完美,只能说聊胜于无。理论上,如果你的NAT类型为 NAT1 ( 又名:FullCone 、全锥型),在进行 P2P 打洞后进行 P2P 类型的传输是几乎可以达到有公网IP的效果的。正好我这边是 NAT1 ,我琢磨着应该可以在P2P打洞上做点文章,便查了查相关资料。 然后...我就发现**据说** BitComet 可以实现完美的 P2P 打洞。要我 qbittorrent 换 BitComet ?这我肯定不干啊。但后来,我找到了这个项目——[Natter](https://github.com/MikeWang000000/Natter/tree/v0.9)(建议去给它点个 Star )(网盘分流:[XCwosjw的网盘](https://pan.xcwosjw.com/Onedrive/Natter-0.9.zip)) Natter 由国人开发者开发,起初就是为了在 NAT1 环境下实现 TCP 和 UDP 的打洞。它的用途有很多,但最重要的是它可以Linux的端口转发(iptables等)来实现对BT软件的兼容!于是便有了本文。 Natter 的原理图: <details> <summary>展开/收起</summary> <img src="https://img.xcwosjw.com/i/2023/03/05/640433a73ee59.jpg"/> </details> ## 零点五.图 No Image Say JB,直接上图:(不要在意30Mbps的小水管,看连接数) ①IPv4  ②IPv4+Natter  ③IPv4+IPv6公网  ④IPv4+Natter+IPv6公网  可以看出,使用了Natter后不仅多出了很多连接数,而且绝大部分都是传入连接。同时qbittorrent下方的状态也变成了联机 **2022-12-6更新** 发现有人没搞懂我这四张图表达了啥意思,那我就来讲讲吧  可以看到,图上我分别标出了三个地方: ①:括号内的数字代表你从tracker获取到的用户数,而括号外的数字代表你实际连接上的用户数。一般来说这个数字直接由你和对方的网络连通性决定,即在不限制连接数的情况下,括号外的数字与括号内的数字的比值一般可以反映你的网络连通性。 ②:I 代表传入连接。一般只有公网IP会有 ③:绿色小地球代表了联机状态,要求有传入连接,即②,是qb自带的检测网络连通性的玩意。橙色小火焰则为脱机 ## 一.准备 ①任何搭载了Linux的设备(WSL,VMware等同样可行,只要可以与宿主机连通就行) 为什么非要Linux?因为Windows下的netsh无法实现端口复用 ②NAT类型为NAT1 ( 又名:FullCone 、全锥型),不是的话请去杠你的运营商,这个他们必须要给,不给就工信部(移动内部其实是有要求要让用户的NAT类型达到NAT1的,但很多小地方都没把这事当回事) ·你可以使用 [NatTypeTester](https://github.com/HMBSbige/NatTypeTester) 来测试自己的NAT类型(可以点个Star)(网盘分流:[XCwosjw的网盘](https://pan.xcwosjw.com/Onedrive/NatTypeTester-6.2.0.7z)) ## 二.开搞 (全程以刷入了OpenWrt的Redmi AC2100为例) ### 配置环境 安装python3-light和screen即可 ```bash opkg update opkg install python3-light opkg install screen ``` ### 上传 Natter 使用各种方式将`Natter-0.9.zip`上传至路由器,这里我以WinSCP为例。  然后解压 ```bash unzip Natter-0.9.zip ``` ### 使用 Natter ```bash cd Natter-0.9/ screen -S Natter python3 natter.py ZZZZZ ``` (12345请随便改成一个未占用的端口,这个端口没有影响)(顺便记住ZZZZZ,端口转发中要用到) Natter 会最后输出这么一段文字 ``` [INFO] - >>> [TCP] ('XXX.XXX.XXX.XXX', ZZZZZ) -> ('RRR.RRR.RRR.RRR', YYYYY) <<< ``` 请记住YYYYY,**并把你的BT软件端口改成YYYYY**,端口转发中还要用到。 然后Ctrl+A+D退出screen。 ### 端口转发 打开你的OpenWrt控制面板,进入`网络 - 防火墙 - 端口转发`  [新建端口转发] 名字:随便 协议:TCP+ UDP 外部区域:wan 外部端口:ZZZZZ 内部区域:lan 内部IP地址:选你BT软件所在的设备IP 内部端口:YYYYY 然后`添加 - 保存&应用` ## 三.成功 Enjoy! ## 四.碎碎念 <strike>为啥我要写这篇文章?其实就是想水经验,顺便混个眼熟</strike> ## 五.FAQ Q:为啥没效果啊? A:尝试运行`python natter.py -t 3456` 然后访问`http://RRR.RRR.RRR.RRR:YYYYY`, 是否有`It works`,有就说明你Natter设置没问题,打洞也成功了。 但作者本人说他web服务写的不太稳定,所以我建议你自己用个web服务测试。 最后修改:2023 年 03 月 05 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 7 如果觉得我的文章对你有用,请随意赞赏