Second vote for libp2p. It looks very mature and generic enough to build whatever off of it. It has implementations in js and go.
If you end up rolling your own, I found js to have the most building blocks (pmp and upnp libraries).
If you end up rolling your own, I found js to have the most building blocks (pmp and upnp libraries).