提升中国移动宽带IPV4下PT软件的上传与下载
原理铺垫
在正式教程开始前,我们先来了解几个小的概念,帮助大家更好的上手今天的教程。
1.公网IP的类型及判断

卓越公网型>映射公网型>全锥型>IP限制型>端口限制型>对称型 pcdn和pt都是基于点对点(peer-to-peer)技术的内容分发模式,我这里引用pcdn中的公网类型进行简单说明,越优质的网络,越有利于peer的连接。在上一期的视频中我们通过在ros中添加防火墙指令,将IP限制型提升为全锥型,爱快的nat1模式与openwrt的fullcone模式都可以进行类似的操作。
2.upnp模式的打开与关闭
在家里有公网ip的情况下,upnp模式是非常建议大家开启的,这样,下载软件会自动建立端口映射关系。将你的公网ip与端口直接映射到内网。
但是在移动的宽带下,除北京外的家宽,极少有公网ip。也就是大家通俗说的大内网。当你查看你光猫获取到的地址与你访问公网的地址完全不一致,这就是路由上的nat。简单来说,在我们家里的光猫之上,小区有一个得到公网ip的路由器,负责给大家分发内网IP,导致我们不能直接对这个IP进行操作,比如端口转发及DMZ建立。所以,面对这样的网络环境,我们需要关闭UPNP模式,手动搭建映射关系,让p2p更好的进行数据交换。
3.PT下载中的字母含义
D = 正在下载 (我方有意从对方下载且被接受) d = 对方拒绝 (我方有意从对方下载但被拒绝) U = 正在上传 (对方有意从我方下载且被同意) I = 已建立传入连接的用户

主要关注的四个标识,本次,教程中重点关注I标识背后的参数。
接受传入连接:
当 qBittorrent 设置为"接受传入连接"时,其他 peers 可以主动与该客户端建立连接,从而能够提供更快的下载速度。
这种设置对于位于防火墙后的用户非常有用,因为可以绕过防火墙的限制,与其他 peers 建立连接。
但是,这种设置也会增加被攻击的风险,因为开放的端口可能被恶意利用。
不可以接受传入连接:
当 qBittorrent 设置为"不可以接受传入连接"时,该客户端只能主动与其他 peers 建立连接,无法被其他 peers 主动连接。
这种设置更加安全,因为不会开放任何端口供外部访问,降低了被攻击的风险。
但是,这种设置可能会降低下载速度,因为该客户端无法接受来自其他 peers 的连接,从而无法获得更多的上传资源。 按照教程进行操作后,在下载标识处,看到有接受传入连接标志,peer数量提升,下载速度可能更快。接近公网ip端口转发的效果。对于上传的提升更加明显,意味着,更多的peer可以主动发现本地的文件。

开启nat1
/ip firewall nat add action=endpoint-independent-nat chain=srcnat out-interface=pppoe-out1 protocol=udp /ip firewall nat add action=endpoint-independent-nat chain=dstnat in-interface=pppoe-out1 protocol=udp

端口映射
# ipv4规则添加 /ip firewall nat add chain=dstnat protocol=tcp to-addresses=192.168.6.31 action=dst-nat to-ports=11369 dst-port=23168 /ip firewall nat add chain=dstnat protocol=udp to-addresses=192.168.6.31 action=dst-nat to-ports=11369 dst-port=11369 # ipv6规则添加 /ipv6 firewall filter add chain=forward protocol=tcp dst-port=23168 action=accept /ipv6 firewall filter add chain=forward protocol=udp dst-port=23168 action=accept
上传文件核心
将资源包natmap核心放至home文件夹中,运行一下命名,安装完成
cd /home && chmod u+x natmap && mv natmap /usr/local/bin/
然后输入
natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 23168

确认生成对应公网ip与端口号c
有 则程序运行成功,网络支持公网端口映射
修改端口号
进入ros,ipv4防火墙
修改对应端口号ipv4中tcp目标端口修改为c
udp中的转发端口与目标端口修改为c ipv6防火墙
ipv6中的tcp与udp修改为c
qb设置汇总
监听端口修改为c 手动模式下,修改一次,端口维持3-7天,如果端口变化,微信机器人会接到相关信息,需要再次修改端口
制作通知脚本
在home文件夹下创建名称为natmap1-wx.sh的文件
#!/bin/bash address=${1} PORT=${2} # 微信机器人Webhook URL webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WEBHOOK_KEY" # 要发送的消息内容 message="最新的下载端口已修改为${2}" # 发送通知消息 curl -H "Content-Type: application/json" -X POST -d "{"msgtype": "text", "text": {"content": "$message"}}" $webhook_url
赋予可执行权限
chmod +x /home/natmap1-wx.sh
制作启动脚本
创建开机自启
touch /etc/systemd/system/natmap1.service
填充以下内容
[Unit] Description=NAT Mapping Service After=network.target [Service] ExecStart=/usr/local/bin/natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 23168 -e /home/natmap1-wx.sh Restart=always SyslogIdentifier=natmap [Install] WantedBy=multi-user.target
输入以下命令,使程序完成开机自启
sudo systemctl daemon-reload && sudo systemctl enable natmap1.service && sudo systemctl start natmap1.service
重启机器验证是否生效 此时则配置完成。打开未完成任务确认,可以看到大量带i标志的peer连接
自动化搭建
安装所需软件
apt update && apt install curl sshpass -y
首次需手动ssh连接ros
连接前确认该服务允许内网ip连接
ssh admin@192.168.6.5 yes #输入密码连接 #连接完成后,进入ros控制台 #按ctrl+d退出
制作自动化脚本
在home文件夹下创建natmap_qb.sh 注意修改脚本内对应内容
#!/bin/bash #穿透后获取到的ip地址 address=${1} #获取到穿透后的端口号,赋予变量PORT PORT=${2} # 微信机器人Webhook URL webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WEBHOOK_KEY" # 要发送的消息内容,这部分引号内内容可自定义 message="下载端口已更换完成" # 发送通知消息 curl -H "Content-Type: application/json" -X POST -d "{"msgtype": "text", "text": {"content": "$message"}}" $webhook_url #这部分定义完成后,是后台完成运行的,大家初次使用的时候记得将参数输入进去 # ros的ip 用户名 密码 routeros_ip="" routeros_username="" routeros_password="" qb_web_address="192.168.6.31" # SSH连接并修改IPv6防火墙规则 sshpass -p "$routeros_password" ssh "$routeros_username@$routeros_ip" << EOF # 显示IPv4防火墙规则 /ip firewall nat print # 修改IPv4防火墙第8条规则 /ip firewall nat set 8 protocol=tcp to-addresses=$qb_web_address to-ports=$PORT dst-port=6100 # 显示IPv4防火墙规则 /ip firewall nat print # 修改IPv4防火墙第9条规则 /ip firewall nat set 9 protocol=udp to-addresses=$qb_web_address to-ports=$PORT dst-port=$PORT # 显示ipv6防护墙条目 /ipv6 firewall filter print # 修改IPv6防火墙中的第一条规则 /ipv6 firewall filter set 1 dst-port=$PORT protocol=tcp # 显示ipv6防护墙条目 /ipv6 firewall filter print # 修改IPv6防火墙第二条规则 /ipv6 firewall filter set 2 dst-port=$PORT protocol=udp EOF # qBittorrent. qb_web_port="8080" qb_username="admin" qb_password="adminadmin" echo "Update qBittorrent listen port to $public_port..." # Update qBittorrent listen port. qb_cookie=$(curl -s -i --header "Referer: http://$qb_web_address:$qb_web_port" --data "username=$qb_username&password=$qb_password" http://$qb_web_address:$qb_web_port/api/v2/auth/login | grep -i set-cookie | cut -c13-48) curl -X POST -b "$qb_cookie" -d 'json={"listen_port":"'$public_port'"}' "http://$qb_web_address:$qb_web_port/api/v2/app/setPreferences" echo "Done."
配置完成后
chmod +x /home/natmap_qb.sh #将脚本中端口号修改为1111,进行测试 PORT=11113 #进入home文件夹 cd /home #手动运行脚本,查看ros与qb监听端口是否变化 ./natmap_qb.sh #测试完成后,修改为正确值,保存脚本 PORT=${2}
修改启动脚本 将自动化脚本名称替换进去
[Unit] Description=NAT Mapping Service After=network.target [Service] ExecStart=/usr/local/bin/natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 23168 -e /home/natmap_qb.sh Restart=always SyslogIdentifier=natmap [Install] WantedBy=multi-user.target
重新读取开机自启服务,使刚才配置生效
sudo systemctl daemon-reload
配置完成后,即可完成对应的端口映射
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

灵KOYB
校验提示文案
早睡v2早起
校验提示文案
获奖绝缘体不再绝缘
校验提示文案
james旸爷
不需要,IPv6+DDNS轻松搞定。
校验提示文案
O简T单O
校验提示文案
sunerpy
链接 去看看
可以下载二进制文件运行,也可以运行docker容器(待适配)
校验提示文案
值友4738565481
校验提示文案
sunerpy
链接 去看看
可以下载二进制文件运行,也可以运行docker容器(待适配)
校验提示文案
值友4738565481
校验提示文案
早睡v2早起
校验提示文案
james旸爷
不需要,IPv6+DDNS轻松搞定。
校验提示文案
获奖绝缘体不再绝缘
校验提示文案
灵KOYB
校验提示文案
O简T单O
校验提示文案