I have an open source game and want to add multiplayer features. I already implemented the Hello World tutorial of Netcode for GameObjects, which worked fine for me. Now I am evaluating how players can establish a connection. For my game, I don't want to depend on a third-party server. And I need a free (no cost) solution. Ideally, players would be able to connect to each other directly (one player acts as a host). If a server is needed, then players should at least be able to set up their own server. A possible solution is mentioned by Unity documentation: A "listen server" is hosted by one of the player's machines. To establish a connection with this host, the documentation mentions some variations: - Option A: Port Forwarding - Option B: Relay server - Option C: NAT Punchthrough Port forwarding works of course but it puts a burden on the user. I consider this a fallback if everything else fails. Out of the other options, I prefer NAT Punch, possibly with a Relay server as fallback. However, I still have some questions: - Are there any example projects (e.g. on GitHub) to see NAT punch and Relay server implemented with Netcode for GameObjects? - The Unity documentation seems to imply that this is only a matter of the selected transport. Thus, I wonder how to use multiplayer community contributions to implement NAT Punch or the Relay server approach? - What exactly does a relay server require? Can I configure a regular Nginx to work as Relay server for Unity or do I have to implement a dedicated application? - Is there maybe existing and free (no cost) relay server infrastructure that one can use for an open source game? Thanks for your help!