One thing you can do to avoid the issue all together is just require
your end user to make a local version of the app server and forward the
ports themselves. Just give them an option to either "Create Game" or
"Join Game", and if they create a game make them specify the port they want
to run it on. Then it's their responsibility to make sure that port is
Having said that, I recently went through setting up a matchmaking style
networked game using Unity3d and I can comment on setting up a matchmaking
server within that framework.
There are 2 pieces to the process, the MasterServer and the Facilitator,
where the MasterServer just holds all the game related information and the
Facilitator handles incoming connections to the server.
Because the MasterServer/Facilitator are only handling connection
information, they're fairly light processes and you can just run them in
the background on your home machine if you don't mind leaving your machine
on all the time.
It pretty much regulates itself once you have it up and running. It's
not any more difficult than running a standard web server anyway.
I haven't explored using Internet Gateway Device to handle networking,
but looking at the wiki for it (http://en.wikipedia.org/wiki/Internet_Gateway_Device_Protocol),
it looks like it's just a magic thing to handle NAT punch through
automatically. I have done little to no research on this method, but it
looks like it might be something that has to be installed on the client
end, which I feel like isn't what you want. If you find a way to make it
work the way you want, let me know; I'd be curious to see it in action.