Tailscale client is opensource and basically is ok. Now there is also an opensource serwer for tailscale which coordinates the connections.
But.
There is a lot of other solutions like Nebula where you can host all the parts of it yourself. Links:
https://github.com/juanfont/headscale
https://github.com/slackhq/nebula
https://github.com/HyNetworks/hysteria
All those have nat punching capabilities for a direct mesh. Some better some worse.
There is more such solutions, some more raw some more ready to use
