Yusuke abre um buraco no seu NAT
Isenção de responsabilidade : este não é um aplicativo de bate-papo pronto para produção. Embora crie conexões criptografadas AES client <-> client
e client <-> server
, esse código não foi auditado ou testado por nenhum especialista em segurança. Este é simplesmente um exercício para aprender mais sobre redes e tecnologias P2P, bem como fornecer alguns exemplos das tecnologias em uso para outras pessoas interessadas em aprender. Além disso, o cliente udp não implementa um protocolo que garanta a entrega bem-sucedida de mensagens e, portanto, algumas serão perdidas em conexões irregulares.
Clique na imagem acima para assistir a um vídeo no YouTube do aplicativo de bate-papo em ação. O terminal no canto superior direito é conectado por SSH a um VPS que executa o servidor de encontro. O terminal no canto inferior direito é a IU do terminal. O aplicativo da web à esquerda é a GUI.
go get github.com/wilfreddenton/udp-hole-punching
O pacote principal é o servidor de encontro. Encontre um VPS ou algo para hospedá-lo. Você pode executar tudo localmente, mas na verdade não será necessário testar se a perfuração funciona ou não, porque está na mesma máquina. Certifique-se de que o servidor tenha portas TCP e UDP abertas para tráfego de entrada de 0 a 65535.
Para executá-lo:
go install
Existem duas UIs que você pode usar gui
, que é uma UI da web, e term-ui
, que é uma UI de terminal. Você pode usar qualquer combinação de UIs.
Antes de usar um, você deve abrir o arquivo main.go
e mudar as constantes serverTCPIP
e serverUDPIP
para o endereço IP do seu servidor de encontro (sem porta).
Para executar a IU da web
cd gui/ui
npm install
npm run build
cd ..
go install
gui
se o seu servidor de encontro estiver sendo executado localmente ou gui -serverIP=<server IP here>
localhost:8000
Para desconectar e iniciar um novo chat, basta atualizar.
Para executar a IU do terminal
cd term-ui
go install
term-ui
se o seu servidor de encontro estiver sendo executado localmente term-ui -serverIP=<server IP here>
Para desconectar e iniciar um novo chat ctrl-c
para sair do programa e executá-lo novamente.
Se não for um amigo, obtenha acesso a um computador atrás de um roteador diferente e configure um cliente nele.
Execute os clientes e forneça o PeerID de um cliente para o outro cliente e se a topologia da rede permitir perfuração, você estabelecerá uma conexão criptografada entre os clientes.
ID
do peer com quem gostaria de se comunicarPara tornar a implementação da perfuração um pouco mais simples, os clientes não devem tentar se conectar aos endereços IP privados uns dos outros. Os clientes que estão atrás do mesmo NAT ainda poderão se conectar, mas farão isso com endereços IP públicos e não privados. Os roteadores que testei pareciam entender que os pares estavam na rede local e facilitaram a conexão sem acessar a Internet externa.