NAT Traversal, STUN, TURN.
Совсем без чего-нибудь промежуточного с белым адресом, хотя бы чисто для первоначальной инициализации соединения и поиска "компов" друг другом - никак.
Даже в WebRTC в самом простом случае есть сигнальный сервер, через который пиры обмениваются кандидатами, и иногда получается без излишеств типа STUN/TURN, но зачастую только в идеальном мире.