Conexão direta ao intermediário

2

É possível usar um servidor com um endereço IP estático para intermediar uma conexão direta entre dois clientes que estão por trás do NAT?

Eu usei o autossh e o encaminhamento de porta para configurar uma conexão através do servidor, mas acho que qualquer interação entre os clientes consome recursos do servidor (sobrecarga computacional de encaminhamento de pacotes e largura de banda). Eu não posso testar por mim mesmo porque não tenho acesso a um dos clientes no momento.

O que eu imagino acontecer diagramaticamente (eu possuo A, B, e o servidor, então qualquer cliente se conecta primeiro pode apenas esperar até que o outro se conecte):

client A -----> server <----- client B

Acho que o método de tunelamento reverso faz isso:

A sends packet -----> server,
server receives packet,
server sends packet -----> B,
B receives packet

e vice-versa. O que eu gostaria é de:

A connects -----> server (connection stays open until B connects)
B connects -----> server (server tells B about A)
A and B can communicate bidirectionally while the connection stays open

(se houver desconexões A e B podem repetir a etapa de conexão)

Eu acho que isso deve ser possível (não é assim que os protocolos P2P funcionam?), mas eu não sei como configurar isso.

    
por Prime 02.11.2017 / 19:59

1 resposta

1

I've used autossh and port forwarding to set up a connection through the server but I think that means any interaction between the clients consumes server resources (computational overhead of forwarding packets & bandwidth).

Você está correto

Existem duas ferramentas de Samy Kamkar que permitem que dois hosts por trás do NAT se comuniquem entre si, pwnat e chownat . Há descrições do truque / técnica no site se você quiser implementar sua solução usando esse método, ou você pode usar as ferramentas que Samy publicou.

Em termos gerais, chownat é para comunicação A < - & B; quando ambos concordam que gostariam de se comunicar; e pwnat é para comunicação A- > B que B não está esperando. Você poderia usar o primeiro se compartilhasse o estado sobre o servidor para concordar quando abrir um túnel chownat ; ou use pwnat e não precise do servidor.

    
por 02.11.2017 / 22:53