Lucky STUN穿透结合群晖NAS实现docker下transmission监听端口动态更新

参考文章
LCUKY系列教程

「LUCKY STUN穿透」使用 cURL 自动修改 Transmission 的监听端口

「LUCKY STUN穿透」使用 Webhook 自动修改 qbittorrent 的监听端口

LUCKY STUN穿透在Windows上使用UPnP工具为BT客户端自动添加内外端口号不同的映射规则

「LUCKY STUN穿透」在Docker中使用MiniUPnP为BT客户端自动添加内外端口不同的映射规则

本人环境:

Lucy使用群晖套件安装

transmission使用群晖docker安装(host)

路由器拨号开启upnp

本教程仅作记录
思路 :因为lucky没有办法二次转发端口将获得的公网IP端口自动更新映射,或者是动态更新upnp,比如说stun获取的公网是123.123.123.123:4521,内部监听(穿透通道本地端口)端口是1111,那么说白了需要在路由器自动更新一个端口转发,外部端口1111,内部端口4521ip是lucky的ip(群晖nas的ip),于此同时在transmission监听端口设置端口是4521

(trans的ip和群晖的ip和lucky的内部ip地址是一样的192.168.31.2

参考之前的文章,因为是nas上不是win上,所以我又装了一个miniupnpc,在stun下面的脚本里增加一下自动更新端口转发,然后就可以了,transmission的推送端口号脚本反而是最好设置的

最后设置udp保活端口,因为长时间无流量的话nat会终止端口转发导致穿透失效

标题实践

群晖ssh安装miniupnpc

bash 复制代码
opkg update
opkg install miniupnpc

常用命令

bash 复制代码
可执行文件的名称可能不是 upnpc-static
# 查看/opt/bin目录下的upnp相关文件
ls -la /opt/bin/ | grep upnp
# 查看所有安装的文件
find /opt -name "*upnp*" 2>/dev/null
# 查看miniupnpc包安装了哪些文件
opkg files miniupnpc
# 测试命令帮助
/opt/bin/upnpc -h
# 列出UPnP设备和当前端口映射
/opt/bin/upnpc -l
# 再次查看映射是否成功
/opt/bin/upnpc -l

增加stun穿透规则

脚本设置为

bash 复制代码
#更新transmission端口号
host=192.168.31.2(transmission的ip)
webui=9091(transmission的WEBUI端口)
port=${port}
username=你设置的transmission用户名
password=你设置的transmission密码

json='{"arguments": {"peer-port": '$port'},"method": "session-set"}'

token=$(curl -Ls -X POST http://$username:$password@$host:$webui/transmission/rpc/ | awk -F ': ' '{print$(NF)}' | awk -F '<' '{print$1}')
curl -X POST http://$username:$password@$host:$webui/transmission/rpc/ -H "X-Transmission-Session-Id: $token" -d "$json"
#下面开始增加动态端口映射
sleep 1
#删除之前的端口映射
/opt/bin/upnpc -d 25385 TCP  2>&1 & #注意端口号是穿透通道本地端口
sleep 1
#增加一个名字为QB-TCP的新端口映射
/opt/bin/upnpc -e "QB-TCP" -a 192.168.31.2 ${port} 25385 TCP  2>&1 & #注意端口号是穿透通道本地端口和ip

实际为

bash 复制代码
host=192.168.31.XX
webui=9091
port=${port}
username=XX
password=XXX

json='{"arguments": {"peer-port": '$port'},"method": "session-set"}'

token=$(curl -Ls -X POST http://$username:$password@$host:$webui/transmission/rpc/ | awk -F ': ' '{print$(NF)}' | awk -F '<' '{print$1}')
curl -X POST http://$username:$password@$host:$webui/transmission/rpc/ -H "X-Transmission-Session-Id: $token" -d "$json"
sleep 1
/opt/bin/upnpc -d 25385 TCP  2>&1 &
sleep 1
/opt/bin/upnpc -e "QB-TCP" -a 192.168.31.XX ${port} 25385 TCP  2>&1 &

transmission关闭端口转发和随机端口

带I标识

表明是有远程传入标致I的用户接入

记录------bilibili @天蝎8110 ↓

bash 复制代码
这部分做了点小改动以适配用户名密码带'@'的情况:
token=$(curl -Ls -u $username:$password -X POST http://$host:$webui/transmission/rpc/ | awk -F ': ' '{print$(NF)}' | awk -F '<' '{print$1}')

curl -u $username:$password -X POST http://$host:$webui/transmission/rpc/ -H "X-Transmission-Session-Id: $token" -d "$json"

使用UptimeRobot端口保活 (有域名)

参考「LUCKY STUN穿透」使用UptimeRobot使UPnP映射的TCP规则保持活跃

注册步骤省略,获取api,注意UptimeRobot的dns域名解析ip是国外的,所以域名dns解析线路如果设置的国内是会失败的,设置成默认解析线路就行

笔者2025.09.08测试如果是网页创建的监视器是无法修改端口号的,提示成功但是一直失败,必须ssh手动创建监视器再进行修改端口号的操作,能够成功。

获得监视器id不用像参考文章一样那么复杂,点进监视器,网页上的数字就是监视器id

获得api

群晖进入ssh,先删除现有的监视器

bash 复制代码
curl -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "api_key=你的API&format=json&id=监视ID" \
  "https://api.uptimerobot.com/v2/deleteMonitor"

创建新的监视器,端口随便

bash 复制代码
curl -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "api_key=你的API&format=json&type=4&sub_type=99&friendly_name=随便起名字&url=域名&port=端口" \
  "https://api.uptimerobot.com/v2/newMonitor"

比如

bash 复制代码
curl -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "api_key=u3XXXXXXXXXXa&format=json&type=4&sub_type=99&friendly_name=NAME&url=YOUR.DORMAN&port=5555" \
  "https://api.uptimerobot.com/v2/newMonitor"

添加后打开网页看到新创建的监视器id号,

进入lucky的stun修改脚本

bash 复制代码
curl -X POST -H "Cache-Control: no-cache" -H "Content-Type: application/x-www-form-urlencoded" -d "api_key=YOUR.API&format=json&id=监视器ID&port=${port}" "https://api.uptimerobot.com/v2/editMonitor"

保存后,然后进监视器网页看是否修改成功!

相关推荐
邂逅星河浪漫1 小时前
【Docker + DockerCompose】安装步骤+演示
docker·容器·docker-compose
智能化咨询3 小时前
开源的容器化平台:Docker高级应用与实战案例
docker
std860217 小时前
容器化入门:一文掌握Docker安装与核心概念
运维·docker·容器
桥边驿语人11 小时前
Docker 容器无法访问外网的问题排查与解决指南
运维·docker·容器
清静诗意11 小时前
在 Ubuntu 上通过 Docker 与 Docker Compose 部署项目的完整指南
linux·ubuntu·docker
小Lu的开源日常14 小时前
如何使用 GitHub Action 发布 Docker 镜像
docker·开源·github
神秘人X70714 小时前
docker安装
docker·容器·eureka
失因15 小时前
Docker 容器与镜像
java·运维·spring cloud·docker·容器
耳东哇15 小时前
sentinel docker gateway k8s 集群 主从
docker·gateway·sentinel
费益洲18 小时前
Docker 网络详解:(二)虚拟网络环境搭建与测试
docker·容器