About This repo has some experiments with hole punching. Mostly it's based on this article: http://www.brynosaurus.com/pub/net/p2pnat/. If you're want more robust solutions take a look at Crust and pyp2p.