[LUCKY STUN穿透] 在Windows上使用UPnP工具为BT客户端自动添加内外端口号不同的映射规则
本教程基于:
在该教程中实现了使用 路由器/光猫 的端口转发功能 处理流量 其效率更高且可以使BT客户端正确的显示其他连入用户的IP地址
但是其使用的是 静态的 端口转发/映射规则 在 stun穿透 端口发生变化后 需要手动修改转发规则 无法实现自动化
可以使用 UPnP 来替代 静态的端口转发规则
但是lucky内置的 UPnP 功能所添加的规则的内部端口和外部端口是相同的
但我们所需要的映射是内外端口不同的
尽管在 v2.5.3 版本中增加了 自定义 UPnP/NAT-PMP 内部端口 的功能但其内部端口号是静态的 无法跟随 外网端口变化
但好在 v2.5.1版本中 已经增加了 在STUN穿透变化时触发自定义脚本的功能 这为使用其他程序实现 自动添加内外端口号不同的UPnP映射规则 提供了极大的方便
lucky更新日志:链接
所以要实现 本教程中的效果 lucky版本要大于等于 2.5.1
- 目前的版本已经更新到 v2.6.2 作者QQ群:602427029
- github 项目地址: 链接
- 各发布地址:https://www.daji.it:6/release/
- v2.6.2 下载:https://www.daji.it:6/release/v2.6.2/2.6.2_lucky/lucky_2.6.2_Windows_x86_64.tar.gz
还需要下载 UPnP Wizard
官网地址:UPnP Wizard - Port Mapping Tool
建议使用网盘下载 官网下载版本需要安装网盘版解压即可使用
网盘:https://wwm.lanzoul.com/iaut01mmbmuj
网络环境检测
实现穿透并不需要 NAT检测为 全锥型
只需要最外面一层的 NAT 即运营商NAT为全锥型即可光猫/路由器的NA 类型可以为端口受限型
可以参考这篇教程进行网络环境优化
教程:比特彗星-端口阻塞解决方案-2.3网络环境检测和优化 - 哔哩哔哩
优化到只剩一层运营商NAT和 和一层光猫/路由器 NAT
共两层NAT 且NAT类型检查结果不为对称型即可进行穿透
设置方法
关闭 BT软件中的UPnP映射功能 防止其影响自定义规则的添加
BC 在 选项>网络连接>端口映射 取消勾选 添加UPNP端口映射
qb在 选项>连接 取消勾选 使用我的路由器的UPnP/NAT-PMP端口转发
打开路由器/光猫上的UPnP功能
下载并解压 lucky
建议把文件名改短一些 比如将 lucky_2.6.2_Windows_x86_64 改为 lucky_2.6.2
文件路径过长会对接下来的设置造成麻烦
同时下载解压 UPnP Wizard 建议与lucky放在一起
来到 UPnP_Wizard 目录 打开 UPNPWizard.exe 后面没有C
应该可以看到这样的窗口
可以看到本地IP UPnP设备名和地址以及一些映射规则
这些说明光猫/路由器上的UPnP功能已经打开
若弹出 下面这个窗口说明 路由器/光猫上的 upnp 功能 没有开启
UPnP_Wizard对一些设备的兼容性较差如果打开路由器/光猫上的 UPnP 功能后
依然会看到此错误提示请尝试换用 MiniUPnP Client
接下来
双击运行 lucky.exe任务栏会出现一个图标
右键这个图标 弹出菜单 选择打开 lucky 后台
这里也可以设置 开机启动
弹出浏览器 显示lucky 登录界面
使用默认的账户和密码登录 均为 666
点开左侧的STUN内网穿透
点击 添加穿透规则 并参照图中的方式填写
自定义脚本内容如下 部分参数按照实际情况修改
实际目录\UPnPWizardC.exe -remove -extport 穿透通道监听端口 -protocol 穿透类型 -legacy
实际目录\sleep1s.vbs
实际目录\UPnPWizardC.exe -add "rule name" -ip default -intport ${port} -extport 穿透通道监听端口 -protocol 穿透类型 -lease 0
使用的是UPnPWizardC.exe 后面有个C
实际目录为UPnPWizardC.exe和sleep1s.vbs的实际存放的目录
rule name 换成你喜欢的名字 但不要使用中文 “” 要保留
创建 sleep1s.vbs 脚本
使用记事本写入下列内容 表示等待1000毫秒即一秒
写好后命名为sleep1s 扩展名改为.vbs
原先使用的是timeout命令但是效果不佳故改用vbs脚本
WScript.sleep 1000
如果目录中有空格的话要用 英文引号 “” 引起来 不然无法运行
C:\abc\d e f\ (错误)
C:\abc\“d e f”\ (正确)
目录中不能有中文不然会报错
目录中不能有中文不然会报错
目录中不能有中文不然会报错
如果出现 Call Script error: exit status 1 的报错很有可能就是目录写错了
示例
为比特彗星设置 stun 端口映射
穿透类型:IPv4-TCP
穿透通道监听端口:6000
UPnP规则名称 BC-TCP
UPnP_Wizard 程序路径:C:\UPnP_Wizard\
C:\UPnP_Wizard\UPnPWizardC.exe -remove -extport 6000 -protocol TCP -legacy
C:\sleep1s.vbs
C:\UPnP_Wizard\UPnPWizardC.exe -add "BC-TCP" -ip default -intport ${port} -extport 6000 -protocol TCP -lease 0
(这里的图没改还用的是旧的timeout命令)
(UPnPWizardC的更多命令以及参数含义在其自带的帮助文件中)
填写完成后保存一下 打开穿透开关
查看是否能成功获取到外网地址和端口 同时 打开UPNPWizard.exe
刷新一下 看看映射规则是否已经添加 刷新按钮在左上角
如果无法获取到外网端口
请按照 上文链接中的教程继续优化网络环境
如果端口获取成功但 UPnP添加失败
请查看穿透规则日志(在开关后面)
首次添加时用于删除旧端口的命令会报错 这是正常的
主要看 下一行显示是否添加成功
添加成功过一次后 下一次移除端口的命令就可以正常工作了
杀毒软件误报
lucky触发自定义脚本的行为可能会被一些杀毒软件误判
建议提前将lucky加为信任或者排除
在成功获取外网端口和地址获取以及正确添加UPnP规则后
就可以设置bt软件中的监听端口为获取到的外网端口
BC在设置新端口后会自动从新检测端口 如果设置正确端口就能 获得绿灯
qb没有主动端口检测功能只有在 被动接受外部发起的连接后 状态栏才会显示 联机
可以使用在线的端口扫描工具
工具: 传输控制协议端口检查器
输入 穿透获取到的 IP 和端口 点击检查
显示 成功连接到XXX 表明已经成功穿透通 同时qb的状态栏中会显示 联机
高版本显示为地球
低版本则是插头
到此我们就成功的实现了 自动添加内外端口号不同的映射规则
之后每当stun穿透的地址或端口发生变化后 都会自动更新UPnP映射规则
当然 bt软件修改监听端口的部分还未自动化