Manter a comunicação entre dois clientes, mesmo que seus endereços IP mudem

Dec 11 2020

Estou tentando descobrir se é possível ter algo como este cenário:

Digamos que temos duas pessoas, Alice e Bob. Alice deseja enviar alguns dados (não importa quais sejam esses dados) para Bob e vice-versa. Eu sei que o WebRTC pode ser usado para trocar mensagens sem servidor, mas isso requer que Alice e Bob conheçam os endereços IP um do outro. Agora, é relativamente fácil para Alice e Bob compartilhar seus endereços IP uma vez, para inicializar uma conexão, mas o que acontece se um deles se conectar a uma rede diferente; talvez Bob esteja em uma cafeteria, por exemplo, e seu endereço IP seja diferente? A conexão inicializada anteriormente não seria para seu endereço IP atual, então eles teriam que reinicializar a conexão; mas como?

Parece-me que já seria necessário algum tipo de comunicação preexistente entre os dois para que eles pudessem compartilhar seus endereços IP, mas por que não se comunicar apenas pelo método que comunicam seus endereços IP? Como alternativa, pode haver um servidor que conecta os dois, mas que invalida a parte sem servidor do sistema.

Portanto, há alguma maneira de manter a comunicação entre dois clientes, mesmo que eles mudem de rede e, portanto, de endereços IP? Talvez haja um método mais fixo de identificação de dispositivos do que seus endereços IP, como vi nesta resposta do SO , mas já tem anos, então talvez haja algo novo? Eu estaria implementando isso em JS, em vários dispositivos / sistemas operacionais, então essa resposta provavelmente não funcionaria. Quaisquer ideias / exemplos seriam muito apreciados; Principalmente, quero saber se isso é possível e, em caso afirmativo, como.

Respostas

2 cybercoder Dec 15 2020 at 00:38

Sim, é possível.

Você precisa usar FQDN(ou um subdomínio) em vez de IP Addressum DNSservidor e um utilitário ou ferramenta do lado do cliente para atualizar o registro DNS durante a alteração do endereço IP.

Existem soluções gratuitas na web no-ip.com, cloud-flarecomo etc.

4 divinelemon Dec 15 2020 at 06:05

Resposta Simples

Não, embora seja possível, não é realista e não é necessário. Veja minha explicação mais longa abaixo. Além disso, se você realmente deseja fazer isso, embora seja possível por meio do QUIC , é improvável que seja necessário (conforme explicado abaixo).

Resposta / pergunta mais longa para pensar

Resumindo, este não é um recurso necessário do WebRTC. Deixe-me fazer uma pergunta:
Alice e Bob estão em um canal de dados, trocando mensagens de bate-papo por WebRTC. Para criar uma conexão WebRTC, você precisa usar um servidor ice ( primeiro link , segundo link ) para fazer com que Alice e Bob, para citar a Wikipedia:

... para encontrar maneiras de os dois computadores se comunicarem o mais diretamente possível.

Isso significa que ele usará o endereço IP atual de Alice para fazer uma oferta a Bob por meio de um servidor STUN ou TURN. Se, como você disse, Alice alterasse os endereços IP, ela precisaria alterar o local. Isso significa que ela precisará se mover uma distância suficiente para que o endereço IP seja alterado. Na prática, isso provavelmente significa que ela vai de carro e dirige para algum lugar. Do contrário, ela liga para um Uber, um táxi ou anda de bicicleta. Na maioria desses cenários, ela precisará fechar o computador, encerrando assim a conexão p2p. Se, por alguma magia estranha, ela não fechar o computador / a conexão, o navegador provavelmente será atualizado, reconectando-se ao canal de dados WebRTC a partir do novo endereço IP . Quando você precisará criar um canal de dados WebRTC e lidar com as alterações de IP? Longa explicação chegando a uma conclusão, clientes mudando endereços IP sem terminar / redefinir a conexão simplesmente não acontece na prática.

Se você quiser procurar outras alternativas, aqui estão alguns exemplos:

ALTERNATIVAS

Adicionando um ouvinte de evento de IP ★

Agora, esta não é uma variável global real que você pode verificar, mas você pode usar uma API online (algumas estão listadas aqui ) para verificar o endereço IP do usuário, armazená-lo em uma variável (ou localStorage) e verificar se o IP muda . Em um loop, você faria uma lógica simples para verificar. Se isso acontecer, você redefinirá a conexão WebRTC; caso contrário, você manterá o loop em andamento.

Usando um servidor “piping”

Você pode configurar um chat simples usando um servidor http / https, já configurado, explicado aqui , chamado de servidor de tubulação. Você pode ler o artigo para obter mais informações, mas ele promove um sistema de bate-papo sem servidor (pode ser usado sem a criação de um servidor) que não está exposto às dificuldades de alteração de endereços IP. No entanto, você precisa saber o ID do par, e eles precisam saber o seu ID, o que efetivamente torna a solução obsoleta porque você precisa ter algum tipo de comunicação antes de estabelecer este bate-papo simples.

Usando Node.js, Websockets e / ou Socket.io ★

Se você deseja criar um aplicativo de bate-papo simples ou um canal de dados, Node.js e Socket.io são os melhores. Isso é super simples, porém, envolve um servidor, por isso deixei para o final. No entanto, eu recomendo isso pela facilidade e simplicidade, e não depende de endereços IP. Veja aqui uma boa imersão inicial no Node.js e na estrutura Express. Estou longe de ser um especialista em Websockets, mas MDN é sempre um bom lugar para começar. Por melhores que sejam os Websockets, eu acho que o Socket.io é muito mais fácil para iniciantes, então se você está disposto a sacrificar um pouco a velocidade pela simplicidade, você deve começar aqui . Todos esses são bons pontos de partida para um chat do lado do servidor.

Links

Resposta Simples

Migração de conexão QUIC

Ouvinte de IP

SO Pergunta ,

Servidores de gelo

Documentos MDN , Wikipedia

Servidor de tubulação

Artigo simples , repositório Github

Node.js, Websockets e Socket.io

Configuração do Node.js e Express , introdução do Websocket e introdução do Socket.io

Todas as alternativas marcadas com estrela (★) são recomendadas pessoalmente.