Even games that are 100% client/server sometimes have issues when the client is behind NAT. Peee-peer games are even a bigger issues. Some games need to use multiple transports (such as UDP and TCP) or multiple connections (such as a different UDP port for voice).
What are some ways to make sure a game works reliably when running behind a NAT router?
- Peer-Peer: No centralized server exists. Player A starts a game and Player B wants to join
- Client-Server: A centralized server on a well known address (hostname) accepts all incoming connections. Each client only communicates with that server.
- Combo: Where the server is just matchmaking, but game updates are peer-peer. Different peers may see each player with a different IP/port potentially (e.g. some clients are behind the same NAT and some are on a different router)