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"

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

相关推荐
我是谁??2 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
运维瓦工2 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
云烟成雨TD2 小时前
Spring AI 1.x 系列【59】容器化开发支持:Docker Compose 与 Testcontainers
人工智能·spring·docker
Plastic garden3 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes
与海boy3 小时前
docker compose minio
docker·容器·eureka
JimCarter4 小时前
使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上
docker·azure·树莓派·devops·orangepi·香橙派·raspberrypi
武子康4 小时前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose
旅僧5 小时前
Ubantu docker环境配置(前置)
运维·docker·容器
“码”力全开5 小时前
解耦异构算力:基于 Docker 与边缘计算的 AI 视频管理平台,实现 GB28181/RTSP 统一接入与源码交付深度解析
人工智能·docker·边缘计算