Reading the UPnP IGD spec it seems to me that if one omits the external port # (or specifies zero, which should be equivalent), the IGD is supposed to allocate one for us.

However, unless I didn't test this correctly, it just seems to me that it ends up allocating port 0 as the external port.

Could support be added to allocating a port IGD-side?  Shouldn't be more than a dozen lines of code, right?