Ну, использовать сам STUN достаточно просто - обратиться к серверу и получить свой внешний IP + порт, о чём Вы и написали.
Вопрос, получается, больше заключается в том, как организовать пробивку NAT используя STUN, то есть, сигналинг (signaling).
Вообще, исчерпывающий ответ дан в
RFC 5245 - Interactive Connectivity Establishment (ICE) (используется в WebRTC).
Более понятным языком
у Mozilla.
Заметьте, что на диаграммах в первую очередь создаётся
RTCPeerConnection
, что у Caller, что у Callee. Я не совсем в курсе, что там под капотом при этом происходит, но могу предположить что сначала создается сокет на прослушку, потому уже идёт запрос на STUN-сервер, который и "пробивает" таблицу роутинга и возвращает "пробитый" внешний порт + адрес, который и отправляется другому узлу, и уже потом другой узел может подключиться на "пробитый" внешний порт.