perfuração UDP com terceiros

0

Agora estou convencido de que o "UDP hole punching" direto entre 2 pessoas cada uma delas atrás de um NAT, sem servidor de terceiros, é realmente difícil / algumas vezes impossível (ver pergunta aqui e minha resposta abaixo).

Então, como fazer um furo UDP com um servidor de terceiros?

Exemplo:

peerA$ nc -u -p 7777 serverIP 8888

Agora, esse pacote é traduzido pelo NAT do peerA de localnetworkIP para peerApublicIP e a porta de origem é traduzida de 7777 para 55123.

Agora o servidor vê esse pacote chegando e se lembra da porta IP + pública 55er do peerA. Ele fornece essas informações (peerB IP público + 55123) para peerB e vice-versa (o processo semelhante descrito anteriormente acontece para peerB e o servidor lembra peerB public IP + source port que foi traduzido pelo NAT do peerB de 8888 para 42000).

Agora o peerA pode fazer isso

peerA$ nc -u -p 7777 peerBpublicIP 8888    # will be dropped by peerB but at least it will 
                                           # punch a hole in peerA's firewall, port 55123

e peerB sabem que, para conectar peerA, ele tem que usar o destino de porta 55123 (esta informação foi dada pelo servidor):

peerB$ nc -u -p 8888 peerApublicIP 55123

Pergunta: isso parece funcionar sob a seguinte suposição:

Se

peerA$ nc -u -p 7777 serverIP 8888

obtém sua porta de origem traduzida de 7777 para 55123, e então

peerA$ nc -u -p 7777 peerBpublicIP 8888

também terá a porta de origem 7777 traduzida para 55123.

Mas isso é realmente verdade na maioria dos roteadores?

Se não (exemplo: ao conectar ao servidor, o NAT traduz o 7777 para o 55123, mas ao conectar ao peerB, o NAT tranlsates 7777 ao 51098), como o furo UDP está funcionando?

TL; DR: Mais geralmente, como fazer um furo UDP com apenas netcat , envolvendo peerA, peerB e um servidor (este último usado apenas no começo, e não depois)?

Observação: eu já li este artigo , mas não é óbvio se a tradução da porta é feita da mesma forma ao conectar o servidor e, em seguida, peerB.

    
por Basj 09.02.2018 / 02:07

0 respostas