Se connecter à un serveur VNC à travers un serveur passerelle

Après une bonne heure, ça y est, ça fonctionne enfin ! Ci-dessous le schéma de mes ennuis :

La question c’est donc comment se connecter avec WinVNC 4 à un serveur VNC à travers une machine qui sert de passerelle… On peut utiliser cette technique pour se connecter également à un serveur Oracle ou à n’importe que autre type de service ! Pour cela, il suffit de configurer un tunnel SSH me direz-vous…

Commençons par le piège…
Le client WinVNC 4 ne permet pas par défaut de se connecter à un serveur VNC sur la machine locale. Et justement, c’est l’impression qu’à le client VNC lorsqu’on établit un tunnel SSH. La solution consiste à ajouter la valeur DWORD nommée « AllowLoopBack » dans la registry dans la clé [HKEY_LOCAL_MACHINESOFTWAREORLWinVNC3] (Oui WinVNC3 même si vous utilisez WinVNC 4 !). Si les clés n’existent pas, ce qui est probable, il faudra les créer

Un peu de détails quant à la création d’un tunnel SSH
Pour créer un tunnel SSH, vous pouvez par exemple utiliser putty ou cygwin. Je préfère Cygwin parce que, si l’installation est plus longue la mise en oeuvre est plus simple et la syntaxe identique aux systèmes Unix. Mais détaillons les étapes à valider…

  1. Vérifiez que vous avez sélectionné le package OpenSSH (dans la catégorie Net) lors du paramétrage de Cygwin. Tapez « ssh » au prompt Cygwin pour valider que le package est installé?. Sinon, relancez le programme setup.exe que vous pouvez télécharger depuis la page d’accueil de Cygwin : http://www.cygwin.com.
  2. Une fois ssh installé, connectez vous allez vous connecter au serveur passerelle en déclarant pour établir le tunnel avec la commande suivante :
    ssh -L :: @ cat –
    Le détail de ce qui suit est le suivant :
    • : est le port qui va être alloué sur le client et que vous allez adresser pour dialoguer avec votre serveur VNC
    • : est le nom (ou l’adresse IP) du serveur VNC
    • : est le port du serveur VNC. Les ports par défaut sont 5901 (pour :1) à 5906 (pour :6)
    • : est un nom d’utilisateur qui vous permettra de vous connecter sur le serveur passerelle
    • : est le nom ou l’adresse Ip du serveur passerelle
    • cat – : permet de maintenir en vie le tunnel
  3. Lorsque vous vous connectez, une clé pour la connexion SSH peut vous être réclamée. Le mot de passe de l’utilisateur du serveur vous servant de passerelle vous est demandé. Saisissez-le ; le tunnel est établi !
  4. Pour vous connecter, lancez le client VNC et tapez « localhost: » dans la fenêtre de connexion au serveur VNC. Si le serveur vous demande un mot de passe, vous êtes connecté.

Autres utilisations

  • Vous pouvez utiliser un tunnel SSH entre un serveur de base de données et un serveur qui héberge une base de données de standby. Dans ce cas, la passerelle est également le serveur cible. Cela permet de chiffrer les données qui transitent entre les serveur de production et de standby. Cela permet également (option -C lors de l’établissement du tunnel ssh) de compresser les données entre les 2 serveur et ainsi de réduire par un facteur allant jusqu’à 5x le flux de données entre les 2 serveurs… au prix de CPU bien sur !
  • Vous pouvez utiliser un tunnel comme un point de destination d’un autre tunnel à condition d’avoir utilisé l’option « -g » pour permettre cette mise en cascade. Vous pouvez ainsi créer des tunnels aussi long que le tunnel sous la manche et masquer votre identité.

Terminons par un autre piège
Si vous voulez créer un tunnel SSH entre votre machine et un serveur Oracle sous Windows (et Windows seulement), cela ne fonctionnera pas. En effet, contrairement aux systèmes Unix et Linux actuels qui continuent à dialoguer après l’établissement de la connexion TCP. Pour changer ce fonctionnement par défaut de Windows et arriver à créer un tunnel SSH pour vous connecter à Oracle, positionner la variable de registre d’Oracle USE_SHARED_SOCKET (cf la doc correspondante).

-GarK!