Miniupnpd comes with the script iptables_init.sh
, which among other things adds an iptables rule:
#adding the rule to MINIUPNPD $IPTABLES -t nat -A PREROUTING -d $EXTIP -i $EXTIF -j MINIUPNPD
Unfortunately, this rule isn’t replaced when the connection is dropped (and the router gets a new dynamic IP). OpenWRT does have a hotplug script:
[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && \ /etc/init.d/miniupnpd enabled && \ /etc/init.d/miniupnpd restart
Problem here is that /etc/init.d/miniupnpd enabled
returns false! It’s a function defined in /etc/rc.common
that checks for /etc/rc.d/S95miniupnpd
. So the solution is:
ln -s /etc/init.d/miniupnpd ./S95miniupnpd
Realistically, the ipkg should come with this file (effectively enabling miniupnpd by default). A more robust solution would be to modify the hotplug script so that it restarts the daemon without the enabled check, and rely on the restart function not to start the daemon if it wasn’t already running.