I have built a multiplayer card game with a single server and multiple peers. It works fine when running on my single computer and also across my local net. All the multiplayer tutorials I've seen say all I have to do is specify the ip address of the server and the port. However, there's no easy way to connect via the internet at large because of the problem of Network Address Translation(NAT). I've seen lots of discussion of things like TCP hole punching but most solutions seem to require a third party server to mediate; moreover, there seems to be a lot of roll your own needed. Surely there must be some standard solutions around. With my particular game, TCP is just fine as reliability is more important than speed.