Eu sei que essa pergunta tem quase dois anos, mas não tem respostas, então achei que conseguiria lidar com isso.
Na verdade, isso é algo que funciona apenas com o UDP porque é sem estado e não funciona com o TCP. Sua configuração descrita com uma conexão TCP para um terceiro servidor de "controle" é, na verdade, a configuração perfeita para isso. Vamos ligar para as partes aqui "Usuário A", "Usuário B" e "Controle". Veja como isso funciona:
- O usuário A e o usuário B estabelecem uma conexão TCP ao controle. Uma vez estabelecido, ambos os usuários enviam para Controlar uma porta na qual podem ser contatados. Vamos chamar "Porta X" do Usuário A e "Porta Y" do Usuário B.
- O controle compartilha as informações de porta do usuário A com o usuário B e vice-versa.
- O usuário A envia um pacote UDP da Porta X para o Usuário B na Porta Y. O firewall do Usuário B naturalmente rejeitará este pacote.
- O usuário B envia um pacote UDP da porta Y para o usuário A na porta X. O firewall do usuário A encaminhará essa porta internamente para o usuário A, porque o firewall do usuário A acabou de ver um pacote deixando o usuário A pela porta X e para o usuário B na porta Y (e porque é UDP, não tem idéia de que foi rejeitado), então assumiu que um pacote vindo do usuário B na porta Y para o usuário A na porta X é um pacote de resposta, então permite que ele passe.
- O usuário A envia outro pacote UDP da Porta X para o Usuário B na Porta Y, e também é permitido pelo firewall do Usuário B pelo mesmo motivo.
- Os usuários A e B agora podem enviar pacotes UDP de um lado para outro, e a participação do Controle não é mais necessária.