IPFS should be looking at this. They had a number of NAT traversal issues this might help with.
(A pretty cool approach to circumventing NAT issues is a proper routed overlay network, which we plan to implement in libp2p soon: https://github.com/ipfs/notes/issues/143)