OpenWrt的UPnP失效分析及解决

原生OpenWrt的UPnP一直时好时不好,今天花了一些时间,好好研究了一下中间的原理;

首先,打开UPnP的调试日志,观察到报错的部分:

UPnP试图绑定的interface是我的IPTV接口,并且识别到是一个内部ip,所以无法绑定成功。

以此看upnp进程:

/usr/sbin/miniupnpd -f /var/etc/miniupnpd.conf

发现了问题,UPnP生成的配置文件里面看到IPv4的出口错误的指向了我的IPTV拨号接口

ext_ifname=lan1
ext_ifname6=pppoe-wan

这个配置文件的路径是软链接到tmp的,那么这个文件应该是动态生成的,没法直接修改。

/etc/init.d/miniupnpd

找到了UPnP的启动脚本在这里,那么找到127-128行有这个字段的赋值,明显是他寻找出口的逻辑在我的双wan拨号下不适用,那么我就适用了一个简单的办法,把IPv4的接口也指向IPv6,反正IPv6是对的,简单的先解决这个问题。如果是更复杂的场景,把ifname写死即可。

echo "ext_ifname=$ifname6"
echo "ext_ifname6=$ifname6"

到这里,UPnP终于是可以正常工作了。

OpenWrt的UPnP失效分析及解决》有一个想法

  1. Bobbi

    遇到相同的问题,感谢分享,进一步研究了一下,可以通过修改/etc/config/upnpd可以手动指定接口
    config upnpd ‘config’

    option external_iface ‘wan’
    option external_iface6 ‘wan’

    回复

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注