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.
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.
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.
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.
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.
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.
Dans le logiciel SSVNC, cliquer sur [Certs…].
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].
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].
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:
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.
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).