Yusuke perce un trou dans votre NAT
Avertissement : il ne s'agit pas d'une application de chat prête pour la production. Bien qu'il crée des connexions cryptées AES client <-> client
et client <-> server
, ce code n'a été audité ou testé par aucun spécialiste de la sécurité. Il s'agit simplement d'un exercice pour en savoir plus sur les réseaux et les technologies P2P, ainsi que pour fournir quelques exemples de technologies utilisées à d'autres personnes intéressées par l'apprentissage. De plus, le client udp n'implémente pas de protocole garantissant la livraison réussie des messages et certains seront donc perdus en raison de connexions inégales.
Cliquez sur l'image ci-dessus pour regarder une vidéo YouTube de l'application de chat en action. Le terminal dans le coin supérieur droit est connecté en SSH à un VPS qui exécute le serveur de rendez-vous. Le terminal en bas à droite est l'interface utilisateur du terminal. L'application Web sur la gauche est l'interface graphique.
go get github.com/wilfreddenton/udp-hole-punching
Le package principal est le serveur de rendez-vous. Trouvez un VPS ou quelque chose sur lequel l'héberger. Vous pouvez tout exécuter localement, mais cela ne testera pas vraiment si la perforation fonctionne ou non, car c'est sur la même machine. Assurez-vous que le serveur dispose de ports TCP et UDP ouverts au trafic entrant de 0 à 65535.
Pour l'exécuter :
go install
Il existe deux interfaces utilisateur que vous pouvez utiliser gui
qui est une interface utilisateur Web, et term-ui
, qui est une interface utilisateur de terminal. Vous pouvez utiliser n’importe quelle combinaison d’interfaces utilisateur.
Avant d'en utiliser un, vous devez ouvrir le fichier main.go
et basculer les constantes serverTCPIP
et serverUDPIP
sur l'adresse IP de votre serveur de rendez-vous (pas de port).
Pour exécuter l'interface utilisateur Web
cd gui/ui
npm install
npm run build
cd ..
go install
gui
si votre serveur de rendez-vous s'exécute localement ou gui -serverIP=<server IP here>
localhost:8000
Pour vous déconnecter et démarrer une nouvelle discussion, actualisez simplement.
Pour exécuter l'interface utilisateur du terminal
cd term-ui
go install
term-ui
si votre serveur de rendez-vous s'exécute localement term-ui -serverIP=<server IP here>
Pour vous déconnecter et démarrer une nouvelle discussion, ctrl-c
pour quitter le programme et l'exécuter à nouveau.
Si ce n’est pas un ami, accédez à un ordinateur derrière un autre routeur et configurez-y un client.
Exécutez les clients et fournissez le PeerID d’un client à l’autre client et si la topologie du réseau permet la perforation, vous établirez une connexion cryptée entre les clients.
ID
du homologue avec lequel il souhaite communiquer.Pour simplifier un peu la mise en œuvre de la perforation, les clients ne doivent pas tenter de se connecter aux adresses IP privées des autres. Les clients situés derrière le même NAT pourront toujours se connecter, mais ils le feront avec des adresses IP publiques et non privées. Les routeurs que j'ai testés semblaient comprendre que les pairs étaient sur leur réseau local et facilitaient la connexion sans passer par Internet extérieur.