引言
在OpenWrt系统中,udpxy是一个强大的组播转单播工具,可以将IPTV组播流转发到内网设备。然而,默认配置下udpxy缺乏访问验证机制,可能被网络爬虫爬取到。
可选保护方案比如不定期更换外网端口,可参见之前文章。今天分享如何通过Nginx为udpxy添加Token验证,更有效的保护组播流服务。
系统要求
-
OpenWrt系统(已安装udpxy) -
可用的公网IP或域名 -
SSH访问权限
拓扑结构
通常的拓扑结构:
互联网用户 -> 公网IP:端口 -> OpenWrt防火墙 -> udpxy服务 -> 组播流
添加验证的拓扑结构
互联网用户 -> 公网IP:端口 -> OpenWrt防火墙 -> Nginx (Token验证) -> udpxy服务 -> 组播流
配置步骤
1. 调整防火墙设置
修改防火墙规则,将外部请求转发到Nginx而不是直接到udpxy:
luci页面设置:

命令设置:
vi /etc/config/firewall
修改或添加以下规则:
config redirect
option target 'DNAT'
option src 'wan'
option dest 'lan'
option proto 'tcp' # 仅需TCP
option dest_ip '192.168.2.1' # OpenWrt的LAN IP
option dest_port '35309' # Nginx监听端口
option name 'udpxy_proxy'
option src_dport '35303' # 外部访问端口
重启防火墙:
/etc/init.d/firewall restart
2. 安装Nginx
opkg update
opkg install nginx
3. 创建Nginx配置文件
新建配置文件 /etc/nginx/conf.d/udpxy.conf
:
server {
listen 35309; # 与防火墙转发端口一致
server_name _;
server_tokens off; # 隐藏服务器信息
# 全局Token验证 - 使用高强度随机字符串!
if ($arg_token != "12345678") {
return 403 "Invalid token";
}
# 安全防护
if ($request_uri ~ "..") { return 403; } # 防止路径遍历攻击
if ($request_method !~ ^(GET|HEAD)$ ) { return 405; } # 限制请求方法
location / {
# 代理到udpxy服务
proxy_pass http://127.0.0.1:4022; # 使用环回地址更安全
# 关键代理头设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept "*/*";
proxy_set_header Connection "";
# 流媒体传输优化
proxy_buffering off; # 禁用缓冲,实时传输
proxy_http_version 1.1; # 支持长连接
proxy_read_timeout 3600s; # 长超时设置
proxy_send_timeout 3600s;
chunked_transfer_encoding off;
# 连接参数优化
proxy_connect_timeout 5s;
proxy_redirect off;
}
}
安全提示: token: 12345678
只做示例,建议替换为高强度随机字符串,使用复杂的Token。
4. 启动Nginx服务
# 测试配置
nginx -t
# 启动服务
/etc/init.d/nginx start
/etc/init.d/nginx enable
5. 验证服务
测试无效Token播放:
http://你的公网IP:35303/udp/225.0.4.132:7980
播放失败:

测试有效Token播放: http://你的公网IP:35303/udp/225.0.4.132:7980?token=12345678
正常播放:

安全最佳实践
-
定期更换Token:如每周更新一次token -
最小化端口暴露:仅开放必要的WAN端口 -
启用HTTPS:使用Let’s Encrypt证书加密传输 -
监控访问日志:检测异常访问模式
写在最后
-
以上ngnix配置文件都是在deepseek指导下完成,如果参照部署请自行替换外网端口 35303
,ngnix监听端口35309
,udpxy端口4022
和token12345678
。 -
如果部署过程有什么问题可以直接问AI更好。 -
相关配置文件可以直接复制文章内容,但是转换过程可能导致部分字符异常,建议微信公众后后台私信【250530】下载本文配置说明TXT。