Hi @here, we're in the midst of implementing Relay Servers, so I'm posting the design here for v1 in case anyone takes issue or has other thoughts:
How we're doing it is pretty much like egress gateways. You simply click on which node will be a relay server, and then you tell it which nodes it should relay. You'll see a list of nodes in the UI to select from, or you can select "all".
This will just set a comma separated list of addresses, like with egress gateways.
The peers with these addresses will no longer propagate to the other peers in the network, forcing traffic to go through the relay.
That's pretty much it and should work reliably, but will be all manual. You'll have to set up a network and determine that a node is unreachable because it's behind CGNAT or something, and then define a relay server for it.
In future iterations we'd like to add some dynamic route-setting utility to the netclient, which will just tell it which path to use, but we're keeping it simple for v1.