dddfr 发表于 2025-2-22 20:40

发现udpxy的一个bug

本帖最后由 dddfr 于 2025-2-22 20:42 编辑

udpxy是IPTV组播转单播常用的工具,实现局域网,甚至在全网上转发流媒体。近日在给别人配置IPTV融合时,当时使用没有任何问题,过两三小时udpxy就不好用了,重启路由后又好了,再过一会又故障,真挠头。
路由是miwifi 3G的,老古董了,wan口正常上网,lan1接了个NAS,lan2口接IPTV网线,新建接口和防火墙域,名子都是IPTV,为防止与外网默认路由冲突,接口IPTV取消默认路由,防火墙域允许OUTPUT,INPUT只允许UDP,这样tr069就管不着我们了。
由于取消IPTV接口的默认路由,udpxy配置里必需要填source,具体配置:
config udpxy
      option disabled '0'
      option respawn '1'
      option verbose '0'
      option status '1'
      option bind '0.0.0.0'
      option port '4022'
      option source 'lan2'
使用一段时间在故障出现后,发现udpxy的组播源地址未随lan2的dhcp renew更新,见下图

lan2的ip地址使用一段时间后要重新获取,udpxy的source接口设定为lan2,但未跟随dhcp renew而变化,导致故障发生。
解决方案:
治本方案:修改udpxy源码,重新编译,暂时还没这个水平,等待作者或其它牛人去做了
治标方案:检查dhcp renew事件,发生时让udpxy重启。这个路由器dhcp用的是udhcpc,在etc目录下有个udhcpc.user文件,当事件发生时会执行这个文件,写入如下内容就可以解决问题
# This script is sourced by udhcpc's dhcp.script at every DHCP event.
if [ "lan2" = $interface ]
then
      case "$1" in
      deconfig)
                service udpxy stop
                echo "udpxy stop"
      ;;
      renew)
                service udpxy stop
                sleep 2
                service udpxy start
                echo "udpxy restart"
      ;;
      bound)
                service udpxy start
                echo "udpxy start"
      ;;
      esac
fi
注意第二行lan2需要替换为IPTV所在的接口名

月下桥 发表于 2025-2-23 22:36

学习了谢谢分享

dddfr 发表于 2025-3-19 13:22

又发现了一个Bug,udpxy在android root环境下运行会报错,
setpidfile:file not exist
经检查osdef.h代码中默认的pid文件存放在/var/run和/var/temp中,而这两个文件夹在android中都不存在
#if defined(HAS_VARRUN)
    #define PIDFILE_DIR   "/var/run"
#elif defined(HAS_VARTMP)
    #define PIDFILE_DIR   "/var/tmp"
#endif将其中一个修改为/tmp,重新编译后运行正常






页: [1]
查看完整版本: 发现udpxy的一个bug