2010-12-10 82 views
1

J'essaye d'envoyer des clients 'hello' btw 2, chacun derrière un NAT pare-feu, sans succès. UDP ou TCP poinçonnage sont tout aussi bien, pour le moment.Comment effectuer p2p derrière 2 nats?

client A attendre à recevoir 'bonjour p':

set -- $(wget -qO- http://www.pschmidt.it/screenshooter/ss3.php | awk '{print $1, $2}'); echo $1 $2 $3 $4; `nc -l -v $2 ` & sudo hping3 -2 -c 30 -s $2 -p $4 $3 

client B envoyer bonjour p:

set -- $(wget -qO- http://www.pschmidt.it/screenshooter/ss3.php | awk '{print $1, $2}'); echo $1 $2 $3 $4; sudo hping3 -2 -c 30 -s $2 -p $4 $3; echo "hello p" | nc -p $2 -u $3 $4 

Malheureusement rien reçu.

mise en œuvre inspirée par http://www.brynosaurus.com/pub/net/p2pnat/

Répondre

1

Ainsi, sont tous deux NATs de NATs cône restreint? Est-ce qu'ils refusent l'accès au port quand rien ne s'est passé sur ce/à la source de la demande avant?

Vous devez envoyer un paquet d'un hôte à un autre, avec les adresses et ports corrects afin que les NAT acceptent les demandes entrantes même s'il s'agit de demandes et non de réponses.

À titre d'exemple:

PC1 - NAT1 - réseau - NAT2 - PC2

PC1 veut accéder PC2 sur le port 10.

PC2 envoie une requête à PC1 avec le port source 10 (qui est bloqué par NAT1). PC1 envoie une requête à PC2 au port 10, qui n'est alors pas bloqué et sera répondu.

+0

> Les deux NAT sont donc des NAT de cônes restreints? Je ne suis pas sûr de savoir comment classer les NAT, mais comme avec les applications Skype et P2P, je voudrais qu'il soit le plus restrictif possible. Mais dans mon cas, cela semble un cône restreint puisque l'IP externe ne change pas, mais seulement le port. – simpatico

+0

alors vous voulez dire que le port doit être le même dans les deux sens? Je ne vois aucun serveur Rendezvous dans votre description. – simpatico

+0

Ils doivent soit connaître le port de chacun, soit avoir besoin d'un serveur de rendez-vous accessible (pas derrière un NAT) et leur donner le port de l'autre. Dans mon exemple, le port 10 de PC2 était connu. Cela doit être connu et PC2 doit envoyer un paquet au bon moment. Un serveur de rendez-vous serait la solution la meilleure et la plus simple. Pour la synchronisation et la gestion. – Kissaki

0

Vous devez rechercher le type de NAT auquel vous avez affaire. La terminologie «symétrique» est obsolète. Vous pouvez lire le chapitre correspondant du livre Practical JXTA II disponible en ligne sur scribd.

La technique que vous décrivez dans votre question ne fonctionnera jamais si aucun de vos pairs n'a d'adresse publique. La résolution de ce problème est plus sophistiquée et n'est pas toujours possible.