【Openwrt从入门到放弃】八、探究Openwrt的miniupnpd问题,提速你的游戏和XX云收益。

By | 2025-02-19

其实这事要从沾染了BT下载说起。

有公网V4和V6的IP,部署好docker版本aria2c后发现。无论如何openwrt主路由里面的miniupnpd这个服务一直不会出现upnp的映射端口。然后详细查了一下,其实我现在路由器这个版本是支持miniupnpd的自动端口映射的。并且正常运行,只不过luci的版本不能把映射数据展示出来。运行命令如果有这个iptables表,并且有数据就没问题。

iptables -L MINIUPNPD -nv
# cat upnpd 

config upnpd 'config'
    option enabled '1'
    option enable_natpmp '1'
    option enable_upnp '1'
    option secure_mode '1'
    option log_output '0'
    option download '1024'
    option upload '512'
    option internal_iface 'lan'
    option port '5000'
    option upnp_lease_file '/var/upnp.leases'

配置正常,并且查看/var/upnp.leases也都正常建立的映射。

但是另一个宽带的UPnP服务就完全运行失败了,某些服务一直报告NAT是端口限制型,Upnp不可用。排查了半天其实是可以看到miniupnpd服务在运行的,但是看iptables表是空的。并且/var/upnp.leases也是空的。

查询了一下/etc/init.d/miniupnpd的启动过程。

echo "ext_ifname=$ifname"
echo "ext_ifname6=$ifname6"
[ -n "$external_ip" ] && echo "ext_ip=$external_ip"
//...
if [ -n "$external_iface" ] ; then
        network_get_device ifname "$external_iface"
else
        if [ -n "$external_zone" ] ; then
                ifname=$(fw3 -q zone "$external_zone" 2>/dev/null | head -1)
        else
                network_find_wan external_iface && \
                        network_get_device ifname "$external_iface"
        fi

并且看了一下miniupnpd的临时启动配置

cat /var/etc/miniupnpd.conf

ext_ifname=eth1
listening_ip=br-lan
port=5000
enable_natpmp=yes
enable_upnp=yes
secure_mode=yes
pcp_allow_thirdparty=no
system_uptime=yes
lease_file=/var/upnp.leases
bitrate_down=8388608
bitrate_up=4194304
uuid=376cce89-a035-4225-9727-b38a22bf7795
allow 1024-65535 0.0.0.0/0 1024-65535
deny 0-65535 0.0.0.0/0 0-65535

感觉不太对劲。ext_ifname是eth1。不应该是wan-pppoe么?

luci界面上没有设定ext接口的地方。
手工写入/etc/config/upnpd上。

config upnpd 'config'                                                                                                                                                                                                                                                         
        option download '1024'                                                                                                                                                                                                                                                
        option upload '512'                                                                                                                                                                                                                                                   
        option internal_iface 'lan'                                                                                                                                                                                                                                           
        option port '5000'                                                                                                                                                                                                                                                    
        option upnp_lease_file '/var/run/miniupnpd.leases'
        option enabled '1'
        option secure_mode '0'
        option external_iface 'wan'
        option external_iface6 'wan'

重启miniupnpd服务。发现iptables还是没建立miniupnpd的链。
不管了干脆写死公网IP试试。

option external_ip ‘117.XXX.XXX.XXX’

重启服务,马上upnpd就有设备注册了。luci界面也展示这些设备了。

image

至于为什么无法启动命令无法获取到ext_ifname 正确的公网IP尚不得而知。反正目前是没啥问题了,解决办法是写了一个脚本,监控wan口ip变动。如果变动就写入/etc/config/upnpd上,然后重启服务。

做好UPNP,能看到Stream也建立了映射。可见玩游戏的也要开启这个哦,如果你自己用运营商的光猫,找到upnpd的选项开启试试看吧。

UDP:48079:192.168.50.211:47999:0:GameStream -
UDP:48090:192.168.50.211:48010:0:GameStream -
UDP:48078:192.168.50.211:47998:0:GameStream -
UDP:48080:192.168.50.211:48000:0:GameStream -
UDP:48082:192.168.50.211:48002:0:GameStream -