Je crois que tu veux parler de UPnPCitation:
(je me souviens vaguement d'une techno permettant d'ouvrir un port serveur sur un routeur par simulation de demande client et qui, je crois, est utilisé par bitorrent, si quelqu'un s'en souvient...)
Version imprimable
Je crois que tu veux parler de UPnPCitation:
(je me souviens vaguement d'une techno permettant d'ouvrir un port serveur sur un routeur par simulation de demande client et qui, je crois, est utilisé par bitorrent, si quelqu'un s'en souvient...)
Peut-être, je ne connais pas UPnP. C'était vraiment une bidouille basé sur la conception de certaines tables de NAT (pas toutes) où on envoyait un paquet "dans le vide" pour simuler une demande client afin d'ouvrir un port dans le routeur. Ensuite le vrai client se connectait au serveur en employant le même port. Cela nécessite bien entendu un vrai serveur situé en dehors des deux NAT afin de faire véhiculer les messages nécessaires pour l'ouverture de la connexion, c'est la raison pour laquelle ça me fait penser à bittorrent qui a justement plein de serveurs super gentils pour rendre ce genre de service.
@tir0nik: mais non, oublie, toi tu n'as même pas la contrainte d'un routeur d'entreprise dont l'admin est pas conciliant, c'est un routeur familial avec lequel tu peux faire ce que tu veux. Quand on veut faire serveur on apprend à configurer son routeur.
Encore faut-il que le routeur fasse du NAT conique (ce qui est le but de UPnP)...
Normalement le NAT *doit* faire correspondre un tunnel à un autre tunnel, c'est à dire un 4-uple (ip-source-privée,port-source-privée,ip-destination-public,port-destination-public) à un (ip-source-public,port-source-public).
A l'opposé de l'ouverture de port (conique) qui ne se sert que de la partie (ip-source-privée,port-source-privée)
Donc si deux machines sont derriere un NAT classique, aucun moyen de les faire communiquer (sauf à ouvrir des ports 'coniques' sur le routeur à la main, ou par UPnP).
Il y avait une bidouille qui marchait sur 'quelques' routeurs, partant du principe que le routeur allait allouer le port immédiatement supérieur à la demande suivante.... Mais elle demande un serveur-tiers...
Genre:
- A est connecté à S par le tunnel Tas
- B est connecté à S par le tunnel Tbs
- A envoit à S (par une nouveau tunnel za) le fait qu'il veut se connecter à B => le routeur de A fait correspondre (A priv,za) à (A pub,Ax,S,o)
- S recoit la demande de A depuis (A pub, Ax)
- S envoit à B (par Tbs) le fait que A veuille se connecter à lui depuis le port Ax
- B envoit une demande de connection à A avec le port Ax+1 => le routeur de B fait correspondre (B priv, zz) à (B pub,Bx, A pub, Ax+1)
- B envoit à S (par un nouveau tunnel zb) le fait qu'il essaye de répondre à A => le routeur de B fait correspondre (B priv, zb) à (B pub,Bx+1,S,o)
- S recoit la réponse de B depuis (B pub, Bx+1)
- S répond à A qu'il faut utiliser le port Bx
- A essaye de se connecter à B en utilisant le port Bx => le routeur de A fait correspondre (A priv, zz) à (A pub,Ax+1,B pub,Bx)
Et voilà... le deux routeurs on des routes ouvertes
Encore faut-il, pour que celà marche, que les routeurs allouent leurs ports séquentiellement (et tous ne le font heureusement pas !), et avoir un middle-man sans NAT ! :D
C'est bien pour ça que c'est pas du tout une bonne idée :) Sauf, très éventuellement, dans le peer to peer.