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"

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

相关推荐
糠帅傅蓝烧牛肉面21 小时前
单实例多MCP聚合服务:两种实现方案深度对比
前端·docker·ai
杨浦老苏1 天前
离线优先的自托管笔记应用Anchor
笔记·docker·群晖
哪里不会点哪里.1 天前
Docker
运维·docker·容器
七七powerful1 天前
docker 搭建wtsap代理
运维·docker·容器
Shanxun Liao1 天前
Docker vlmcsd 完整管理指南
运维·docker·容器
怒放de生命20101 天前
前端子包+docker流水线部署+nginx代理部署
前端·nginx·docker
Java程序员威哥1 天前
云原生Java应用优化实战:资源限制+JVM参数调优,容器启动快50%
java·开发语言·jvm·python·docker·云原生
大房身镇、王师傅1 天前
【Docker】RockyLinux10 安装 docker-compose
运维·docker·容器·docker-compose·rockylinux10
Java程序员威哥1 天前
Java微服务可观测性实战:Prometheus+Grafana+SkyWalking全链路监控落地
java·开发语言·python·docker·微服务·grafana·prometheus
衫水1 天前
Docker 常用指令大全(完整整合版)
运维·docker·容器