Aide à distance avec VNC

VNC (Virtual Network Computing) est un protocole réseau permettant la prise en main à distance d’un ordinateur. Ce système fonctionne en utilisant deux logiciels : un logiciel serveur doit être installé sur le poste à contrôler, et un logiciel client doit être installé sur le poste de contrôle. Le logiciel serveur attend qu’un logiciel client se connecte à lui pour lui donner le contrôle de l’écran.

Il existe une multitude de logiciels implémentant ce protocole, on peut citer Vino et Vinagre qui sont respectivement les serveur et client par défaut sous Linux Mint et Ubuntu.

ssvnc_test

Pourquoi VNC?

Il existe aujourd’hui d’autres solutions pour ce genre de problème, parmi les plus connus: Team Viewer et Spark Angels. Ces solutions fonctionnent bien, mais ont un défaut majeur: elles sont propriétaires, vous acceptez de donner les clés de vos systèmes à une entreprise privée. C’est ce que nous souhaitons éviter.

Parmi les solutions libres, on peut également citer x2go qui affiche de meilleures performances que VNC. Cependant il est moins adapté à ce genre d’utilisation: il nécessite d’avoir les identifiants ssh de la personne à aider.

VNC a l’avantage d’être une solution robuste, et adaptable à ses besoins.

Comment ça marche ? Dans un réseau domestique

Tata Jeannine a besoin d’aide sur son ordinateur. Dans les paramètres de son système, elle active le partage de bureau.

vino

De son coté, le petit Paul lance l’afficheur de bureau distant. Il lui suffira d’entrer l’adresse IP de l’ordinateur à Tata Jeannine pour pouvoir le contrôler à distance. C’est très simple, ça fonctionne.

vinagre

Et par Internet ?

Avant l’arrivée des Box Internet, le fonctionnement était le même : chaque ordinateur avait une adresse IP unique sur le réseau Internet, il suffisait d’utiliser cette adresse pour que les logiciels serveur et client puissent communiquer.

De nos jours, les ordinateurs sont rarement reliés directement à Internet. C’est la Box qui est reliée à Internet, et les ordinateurs sont dans un réseau privé derrière elle, ayant chacun une adresse IP privée. Cette adresse IP n’est unique que sur ce réseau privé, et n’est pas joignable par Internet. En effet, un autre ordinateur peut avoir la même adresse IP privée dans un autre réseau privé, comme dans l’image ci-contre

Cas concret par Internet

Tata Jeannine a besoin d’aide de la part de SAV, elle active donc le partage de bureau. SAV tente de se connecter à l’adresse publique de Tata Jeannine, qui est 80.4.5.6. Cette adresse publique est partagée par tous les périphériques derrière Box2, ainsi Box2 ne sait pas vers quel ordinateur rediriger la requête, et la rejette.

Pour que SAV puisse se connecter, il faut au préalable que Tata Jeannine paramètre dans sa Box2 un transfert de port, tel que : tous les paquets en destination du port 5900 (port par défaut de VNC) doivent être redirigés vers l’adresse IP 192.168.0.10.

transfert

Si tout cela est correctement configuré, SAV peut maintenant contrôler l’ordinateur de Tata Jeannine.

Dans les faits, réaliser cette configuration est trop compliqué pour la plupart des personnes, et cela est même impossible si on n’a pas accès à la configuration de la Box. Il existe heureusement quelques solutions à ce problème, comme la connexion inverse.

Connexion Inverse

Prérequis : logiciel x11vnc

sudo apt-get install x11vnc

Dans la connexion inverse, c’est SAV qui attendra la connexion de Tata Jeannine. Ainsi, il n’y a pas de configuration à faire dans la Box2, mais SAV devra correctement configurer Box1 pour rediriger les requêtes sur le port 5500 vers son ordinateur (192.168.0.10).

Sur son ordinateur, SAV devra ensuite configurer un client VNC compatible (comme Remmina) pour attendre une connexion sur le port 5500.

remmina_inverse

De son coté, Tata Jeannine devra lancer un serveur VNC avec les bons paramètres. Elle peut par exemple utiliser le logiciel x11vnc en ligne de commande :

x11vnc -connect_or_exit 80.1.2.3 - rfbport 0

Et la sécurité ?

Un problème du protocole VNC est la manque de sécurisation. En effet, toute les données transitant entre le client et le serveur passent en clair sur le réseau. Un attaquant pourrait ainsi récupérer les mots de passe entrés par le client, et de prendre le contrôle de la machine serveur.

Le risque est minime quand on se limite à un réseau domestique, mais pour traverser Internet il est plus sage de prendre des précautions supplémentaires.

Heureusement, il existe des solutions pour sécuriser la connexion, notamment à l’aide du protocole SSL.

SSVNC = VNC + SSL

Secure Sockets Layers est un protocole réseau permettant l’échange d’informations de manière chiffrée. En plus du chiffrement, SSL permet l’authentification des correspondants, grâce à un système de clés privées et clés publiques.

SSVNC est un logiciel qui permet de faire passer la connexion VNC à travers un tunnel SSL. Voici comment procéder :

Poste client – SAV

Prérequis : logiciel ssvnc

sudo apt-get install ssvnc

Pour que la connexion inverse fonctionne, il faut ouvrir le port 5500 sur la box vers l’ordinateur du SAV.

ssvnc

Dans le logiciel SSVNC, cliquer sur [Certs…].

ssvnc_cert

Si vous n’avez pas encore de certificat, créez-en un avec le bouton [Create Certificate].

Vous pouvez renseigner les champs avec vos informations personnelles, ou laisser les valeurs par défaut. Cliquez sur [Generate Cert],il sera alors créé une clé privée (.pem) et un certificat (.crt) correspondant dans le dossier ~/.vnc/certs/.

Dans le champ « MyCert » il faudra sélectionner la clé privée que vous venez de créer (extension .pem) en cliquant sur [Browse]. On valide les réglages avec [Done].

ssvnc_options

Dans l’interface principale, cliquez sur [Options]. Dans la fenêtre qui s’affiche, on active a connexion inverse avec « Reverse VNC Connection ». On peut aussi baisser la qualité si la connexion Internet est lente (par exemple Quality: 2), puis on valide avec [Done].

ssvnc_2

De retour dans l’interface principale, décochez « Verify All Certs » (on ne vérifie pas le certificat de Tata Jeannine), renseigner l’hôte comme étant « :0 » puis cliquer sur [Listen]. SSVNC attend maintenant qu’un utilisateur se connecte.

Pour que le poste serveur puisse nous authentifier, il faut lui transmettre le certificat créé précédemment (par clé USB, e-mail…).

Poste serveur – Tata Jeannine

En ligne de commande

Récupérez le certificat du poste client, et placez-le dans le répertoire ~/.vnc/certs/clients. Lancer ensuite la commande :

x11vnc -connect_or_exit 80.1.2.3 -ssl -sslverify sav.crt

Dans cette commande, penser à remplacer « 80.1.2.3 » par l’adresse IP du client, et « sav.crt » par le nom du certificat du client. Grâce à ce certificat, Tata Jeannine peut être sûre que c’est bien SAV qui contrôle son ordinateur, et que la connexion n’a pas été détournée par une personne malveillante.

En mode graphique

Prérequis : bibliothèque zenity (probablement déjà installée)

sudo apt-get install zenity

Un débutant aura beaucoup de mal à entrer des commandes dans un terminal, c’est pourquoi il faut un peu lui mâcher le travail. On va alors importer le certificat à l’avance, et lui mettre des raccourcis dans les menus.

Il faut placer notre certificat dans le bon dossier, il n’existe peut-être pas encore chez vous, on va donc le créer :

mkdir -p ~/.vnc/certs/clients/
cd ~/.vnc/certs/clients/
wget http://mon-site-web/sav.crt

La commande wget permet de télécharger notre certificat depuis Internet, mais vous pouvez aussi transférer celui-ci avec une clé USB, mail… Le certificat n’a pas besoin d’être protégé, on peut ainsi utiliser des services d’hébergement gratuit pour le diffuser (par exemple pastebin).

L’adresse IP publique du client n’est pas forcément fixe, l’utilisateur devra donc la renseigner. Pour qu’il n’ait pas à éditer une ligne de commande, on va créer un petit script bash qui demandera l’adresse IP. Créons le fichier ~/.sav.sh dans lequel on mettra :

#!/bin/bash
ip=` zenity --entry \
--title="Aide à distance" \
--text="Saisissez l'adresse IP ou le nom de domaine du SAV :" \
--entry-text "sav.enunclic-cappel.fr" `

if [ -z "$ip" ]; then
 zenity --notification --window-icon="error" --text="Aucune adresse n'a été saisie."
else
 x11vnc -connect_or_exit $ip -gui tray -ssl -sslverify sav.crt
 zenity --notification --window-icon="info" --text="L'aide à distance est terminée. $ip"
fi

Rendre le script exécutable :

chmod +x ~/.sav.sh

Pour que Tata Jeannine puisse utiliser ce script, il vous reste à lui créer un lanceur dans le menu ou la barre des tâches (différentes méthodes selon votre environnement de bureau).

Bonus: script d’installation rapide

J’ai préparé un script pour la configuration rapide sur un poste, qui automatise ces étapes:

  • Installation de x11vnc
  • Copie du certificat
  • Copie du script de configuration pour x11vnc (interface graphique Zenity)
  • Création d’un lanceur sur le bureau.

À télécharger et à adapter à vos besoins:

install.sh

2 réflexions sur « Aide à distance avec VNC »

  1. C’est (très) connu, mais ce genre d’article est toujours utile. En plus, ça a le mérite d’être très clair.

    Merci pour le partage.

  2. Bonjour,
    Je tourne en rond incapable de faire une connexion entre deux ordinateurs qui se trouvent derrière la même box en utilisant la description ssvnc qui semble pourtant super bien documenté. J’ai essayé
    1) de mettre les 2 PC dans le même réseau et
    2) un des deux PC hors du réseau (partage de connexion wifi+4G) pour l’ordinateur de la tata…

    J’ai modifié mes ports sur la box pas de message d’erreur ni du côté serveur ni client, les clés (crt & pem sont toutes neuve et ont l’air de fonctionner).

    Pas de message d’erreur les 2 PC ont bien l’air d’être connectés mais je ne vois rien sur le client (SAV).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Blue Captcha Image
Refresh

*