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 小时前
Docker命令大全:从入门到精通
docker·容器·eureka
七度光阴;1 天前
Docker入门手册
运维·docker·容器
weixin_405023371 天前
使用docker 安装部署easy-mock
运维·docker·容器
Asuncion0071 天前
Docker核心揭秘:轻量级虚拟化的革命
服务器·开发语言·docker·云原生
ZLRRLZ1 天前
【Docker】Docker Image(镜像)
运维·docker·容器
Akshsjsjenjd1 天前
Docker资源限制详解
运维·docker·容器
雲帝1 天前
1panel docker开启swap内存
运维·docker·容器
tryCbest2 天前
Linux使用Docker部署项目后期更新
linux·运维·docker
缘的猿2 天前
Docker 与 K8s 网络模型全解析
docker·容器·kubernetes
运维栈记2 天前
使用Grafana监控K8S中的异常Pod
docker·kubernetes·grafana