Mon besoin : Contrôler via vnc la machine d'un client qui ne sait pas configurer son nat (ou ne peut pas).
Les intervenants :
Une machine chez un client : CLIENT (windows xp, putty, UltraVNC server)
Un serveur avec une ip publique : SERVEUR (debian lenny)
La machine du hotliner : HOTLINER (windows xp, putty, UltraVNC client)
Les tentatives :
Pour passer le NAT du client, un tunnel a été établi entre le port 10000 du serveur et le port local 5900 du client sous putty (remote tunnel). Voici ce qu'on voit sur le serveur :
# netstat -ant | grep 10000
tcp 0 0 127.0.0.1:10000 0.0.0.0:* LISTEN
Premier problème :
# telnet localhost 10000
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
Connection closed by foreign host.
Alors que sur CLIENT en utilisant telnet localhost 5900 on voit un peu d'ascii s'afficher.
UltraVNC a été installé sur le PC client à l'écoute de localhost:5900
Ensuite, sur HOTLINER, on configure un tunnel local avec putty entre le localhost:6000 et IPDUSERVEUR:10000.
Je pensais, probablement naîvement, que les paquets envoyés sur localhost:6000 (HOTLINER), passerait par le tunnel local pour arriver sur le port 10000 de SERVEUR, et ensuite par le tunnel remote du port 10000 de SERVEUR au port 5900 de CLIENT.
Mais en tentant une connexion depuis HOTLINER sur localhost 6000 via UltraVNC client, ce dernier dit "Connexion failed - Error reading protocol version".
En tentant un telnet localhost 6000 depuis HOTLINER, l'invite de commande est effacée, et au bout d'une dizaine de secondes elle rend la main sans message particulier.
J'ai mal fait un truc, ou alors ce que j'essaye de faire est impossible (ce que je n'espère pas) ?
# UltraVNC SingleClick
Posté par ranDom (site web personnel) . Évalué à 4.
Personnellement, dans ce cas, j'utilise ultraVNC singleclick (http://www.uvnc.com/addons/singleclick.html)
C'est le client qui initie la connexion, donc ça passe le NAT. L'avantage, c'est qu'il n'y a rien à installer sur le poste client.
Sur SERVEUR, tu fais une redirection du port 5500 vers le 5500 de HOTLINER.
Sur ce dernier tu fais tourner un vncviewer -listen.
L'inconvénient, c'est que l'adresse ip du "SERVEUR" est en dur dans l'application, qui est générée en ligne.
L'autre inconvénient, c'est que ce n'est pas bien libre apparemment.
Cordialement
[^] # Re: UltraVNC SingleClick
Posté par guppy . Évalué à 1.
Le besoin est que n'importe lequel des hotliners puisse prendre le contrôle de n'importe lequel des clients. C'est pour ça que je tente de passer par SERVEUR (qui n'est pas derrière un NAT, et qui a une ip fixe), afin qu'il mette en relation le CLIENT et le HOTLINER.
Un autre avantage des tunnels ssh est que les mots de passe VNC ne circulent pas en clair sur le net. C'est un bonus intéressant.
# Essayons de faire simple
Posté par JJD . Évalué à 4.
J'ai l'impression que tu as pas mal compliqué la question avec tes doubles tunnels...
Si j'ai bien compris, les hotliners peuvent se connecter en SSH sur le serveur SERVEUR.
Dans ce cas, depuis les hotliners, il suffit d'ouvrir une connexion SSH en forwardant le port local 10000 vers le port 5900 de CLIENT. L'option à utiliser pour OpenSSH (ou putty) est :
-L10000:CLIENT:5900
Ensuite, les hotliners doivent se connecter avec VNC sur localhost:10000 pour accéder au serveur VNC de CLIENT.
Est-ce clair comme ça ?
A+
JJD
[^] # Re: Essayons de faire simple
Posté par JJD . Évalué à 2.
1- SERVEUR écoutait sur le port 10000 de l'interface de loopback (127.0.0.1). Pour que ça fonctionne, il faut, depuis HOTLINER, établir en tunnel entre localhost:6000 (ici localhost est HOTLINER) et localhost:10000 (et là localhost est SERVEUR !)
2- Est-ce que SERVEUR peut accéder au port 5900 de CLIENT directement ? (sinon ma solution précédente ne fonctionne pas). Comment le tunnel entre SERVEUR:10000 et CLIENT:5900 a-t-il été établi ? Est-ce bien aussi un tunnel SSH ? Est-ce qu'il est créé avec putty depuis CLIENT avec les options -R10000:localhost:5900 ? Si c'est ça, il est normal que le port 10000 soit ouvert uniquement sur l'interface lo de SERVEUR et la remarque 1 de ce post reste valable.
[^] # Re: Essayons de faire simple
Posté par guppy . Évalué à 1.
2- SERVEUR ne peut pas accéder au port 5900 de CLIENT directement, car CLIENT est derrière un NAT. Le tunnel entre SERVEUR:10000 et client:5900 a été établi via un -R10000:SERVEUR:5900.
Si je comprends bien il faut que je l'établisse par un -R10000:localhost:5900 car localhost s'entend par rapport à SERVEUR et non pas CLIENT ?
Pareil pour CLIENT (donc -L6000:localhost:10000) ?
[^] # Re: Essayons de faire simple
Posté par JJD . Évalué à 2.
- sur HOTLINER : -L6000:localhost:10000
- sur CLIENT : -R10000:localhost:5900
Ensuite, sur hotliner on ouvre une session VNC sur localhost:6000
Il est important d'utiliser localhost (ou 127.0.0.1) car :
- le serveur VNC ne semble écouter que sur cette interface locale
- lors de l'ouverture d'un tunnel "remote", le port ouvert ne l'est que sur l'interface de loopback (sauf demande explicite et modification de la configuration par défaut du serveur SSH)
Il est vrai que mettre du "localhost" partout peut paraître déroutant, mais c'est juste un point de vue :
- dans l'option -Lport1:SERVER:port2, le paramétre SERVER est géré par le serveur SSH. Dans ce cas, localhost désigne donc le serveur SSH lui-même
- dans l'option -Rport1:SERVER:port2, le paramètre serveur est vu côté client SSH. localhost désigne alors le client SSH !
J'espère que tu y vois maintenant plus clair dans ces histoires de tunneling SSH
A+
JJD
[^] # Re: Essayons de faire simple
Posté par guppy . Évalué à 1.
J'étais pas très loin de la solution, mais tu m'as été d'une grande aide, merci à toi ! Je suis d'ailleurs tombé lors de ma recherche sur d'autres topics de ce forum où tu aides d'autres types sur des questions concernant les tunnels. Tu as l'air d'être spécialiste du sujet. ;)
Bon reste plus qu'à fignoler, encapsuler tous ces lancements à coup de .bat pour simplifier la vie des CLIENTs et des HOTLINERs.
[^] # Re: Essayons de faire simple
Posté par guppy . Évalué à 1.
Voyons si j'ai bien compris :
Sur CLIENT : ultravnc serveur qui écoute localhost:5900
Sur SERVEUR : un simple serveur SSH
Sur HOTLINER : un client UltraVNC et un tunnel putty -L10000:CLIENT:5900
Mais dans ce cas, comment CLIENT va être contacté, vu qu'il est derrière un NAT ?
HOTLINER est derrière un NAT, ainsi que client (c'est un autre NAT bien sûr). SERVEUR est directement joignable depuis internet (pas de nat, ip fixe).
[^] # Re: Essayons de faire simple
Posté par JJD . Évalué à 1.
La solution avec deux tunnels SSH vers SERVEUR est donc la bonne. Il ne te reste plus qu'à cacher la complexité de putty/SSH derrière une belle interface graphique et tu auras réinventé LogMeIn !
# Un VPN tout simplement.
Posté par Grunt . Évalué à 2.
THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.