I. Présentation de Syncthing
Syncthing, concurrent direct de BitTorrent Sync, se présente comme un système de Cloud Computing ouvert, sûr et décentralisé qui permet d’avoir des données synchronisées entre plusieurs périphériques (Windows, Mac OS et Linux pour le moment). C’est en quelque sorte un Owncloud mais fonctionnant sous le mode du Peer-to-Peer, sans serveur « central ». Toutes les communications sont chiffrées par le protocole TLS et chaque périphérique est clairement identifié avec un identifiant unique (on verra ça un peu plus loin).
“Syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it’s transmitted over the Internet.”
Voici le site officiel du produit : Syncthing
II. Récupérer et lancer Syncthing
Le téléchargement de Syncthing se fait directement sur leur page GitHub, qui propose plusieurs plateformes (OpenBSD, Solaris, Linux ARM, Linux 32 & 64bits…) :
Téléchargement de Syncthing
Dans ce tutoriel, j’installerai Syncthing sur un ordinateur sous Windows 8.1 et sous une machine virtuelle avec Xubuntu 14.04.
Sous Windows, Syncthing se présente comme un exécutable (dans un fichier *.zip) qui lancera le service et ouvrira son interface Web (http://127.0.0.1:8080 par défaut).
Une fenêtre DOS est ouverte, c’est la condition pour utiliser Syncthing sous Windows.
Sous Linux, Syncthing se trouve dans une archive *.tar.gz, pour la décompresser et lancer le service :
tar –xvf syncthing-linux-amd64-v*.tar.gz
cd
syncthing-linux-amd64-v*/
chmod +x syncthing
./syncthing
Cela lancera Syncthing sous votre utilisateur courant (il peut être lancé en root, ou pour plus de sécurité, avec un utilisateur dédié à Syncthing).
On peut également l’installer depuis le gestionnaire de paquet Apt-get (Debian-likes) par exemple.
Interface Syncthing – 1
L’interface web de Syncthing s’ouvre alors automatiquement avec votre navigateur par défaut, vous devriez avoir quelque chose de similaire, quelle que soit votre plateforme. Elle se compose de deux parties, à gauche, les dossiers partagés et à droite, les périphériques avec lesquels ce dossier est synchronisé.
Votre serveur est maintenant démarré, mais relié avec aucun périphérique (node).
Pour accéder à la configuration, cliquez sur le bouton suivant :
La fenêtre suivante s’ouvre et vous permet de modifier quelques options telles que le nom du périphérique, l’adresse de son interface Web, la mise en place de l’HTTPS et d’une authentification (plus que nécessaire si on y accède depuis l’extérieur).
Syncthing – Panneau de configuration
Les paramètres permettent de changer le nom du périphérique, l’adresse de l’interface web (à remplacer par 0.0.0.0 :8080 pour y accéder depuis l’extérieur), forcer l’utilisation d’HTTPS et quelques autres options qui ne nous seront pas spécialement utiles pour ce tutoriel (utilisation au sein d’un réseau local).
Syncthing peut également être installé sur un serveur Linux (sans interface graphique), on ne pourra donc pas voir l’interface web, mais y accéder à distance en modifiant le fichier de configuration (en XML) :
Le fichier se trouve par défaut dans “/home/user/.config/syncthing/config.xml“, Pour accéder à l’interface web il faut modifier cette partie (changer 127.0.0.1 (localhost) par 0.0.0.0 (toutes les adresses IP)) :
127.0.0.1:8080
III. Configurer un nouveau périphérique (node)
Dans ce tutoriel, je vais mettre en place un partage de Linux à Windows et un autre de Windows à Linux, cela permettra de voir comment mettre en place plusieurs partages.
Nous allons devoir « relier » nos deux machines en cliquant sur « Ajouter un périphérique ».
Tous d’abord il faudra récupérer « l’identifiant » de notre serveur sous Windows, pour cela cliquez sur l’écrou de paramètres, puis « Montrer l’ID ».
Syncthing – QR Code
Un pop-up apparait avec l’ID de notre appareil et un QR code. Je copie ce code et le colle dans l’ID du nouveau périphérique :
Syncthing – Ajouter un périphérique
Les paramètres par défauts permettent d’utiliser une identification du serveur dynamique (contrairement au fait de rentrer son adresse IP et son port de synchronisation).
Dans un simple échange entre deux instances, on peut laisser en dynamique, mais pour avoir quelque chose de plus fiable, il est préférable de rentrer les paramètres « statiques ».
Notre nouveau périphérique apparait donc maintenant, mais n’est pas actif étant donné qu’on n’a créé aucun partage entre les deux. Il faut maintenant réaliser cette opération dans l’autre sens, dans mon cas j’ajoute mon instance Syncthing sous Linux sur mon PC sous Windows.
IV. Configurer son premier partage
On peut donc maintenant, créer notre premier partage entre nos deux serveurs Syncthing :
Cliquez sur « ajouter un répertoire » pour créer un nouveau partage, dans mon cas, il s’agit de ma machine Linux ou je vais partager le dossier “/home/valentin/Téléchargements/“.
Syncthing – Ajouter un répertoire
L’ID du répertoire est important, car il permet d’identifier le partage depuis l’autre serveur.
J’ai coché « Répertoire maître » ce qui permet de ne jamais modifier mon répertoire Téléchargement sur Linux (sans mon autorisation) mais d’en avoir une copie conforme sur mon ordinateur Windows. Il faut également choisir le (ou les) périphérique avec lequel on veut synchroniser ce dossier.
Je répète l’opération sur mon PC sous Windows en rentrant le même ID de répertoire (important, car c’est cela qui les relie entre eux). Pour le chemin, je sélectionne le dossier ou je veux synchroniser mon répertoire de téléchargement.
On constate que la Synchronisation se lance automatiquement entre les deux dossiers :
Pour résumé, chaque dossier ou document ajouté dans le dossier du serveur Linux sera automatiquement synchronisé vers le répertoire DL-Linux de mon PC Windows. Dans le cas où j’ajoute des fichiers (ou que j’en supprime) sur mon PC Windows, mon serveur Linux n’affectera pas directement les changements (car on a coché la case « Répertoire maître »).
L’interface est bien pensée, car depuis mon serveur Linux, elle me propose de répercuter les modifications effectuées sous Windows. Ce ne serait pas le cas si ce n’était pas un Répertoire maître.
On a donc, pour l’instant, un système de type client- serveur, qui effectue la synchronisation toutes les 60 secondes, ce qui permet d’avoir un répertoire local mis à jour depuis un répertoire distant.
Si l’on veut créer un partage de type “client-client“, il suffit de créer un nouveau partage, qui ne sera pas « Maître ». Dans ce cas, chaque changement sera automatiquement répercuté sur les Périphériques reliés à ce répertoire.
Ce partage, « dl-win » correspond à mon dossier Download de Windows, il est donc automatiquement et intégralement copié vers mon serveur Linux. Pour information, je n’ai pas coché la case répertoire maître.
V. Exemple d’utilisation en entreprise
Nous utilisons Syncthing dans notre entreprise, pour effectuer une synchronisation du contenu du répertoire /home des utilisateurs (une quinzaine) sur des postes Ubuntu 14.04.
Pour faire cela, nous avons une instance de Synchting par utilisateurs sur un Serveur centralisé (avec des ports différents calculés selon l’UID de l’utilisateur), et du côté des postes, sur chacun d’eux, tourne également une instance de Syncthing par utilisateurs (selon les mêmes règles d’attribution des ports) reliés à son instance « maitresse ».
Cela permet à nos utilisateurs d’avoir le même contenu sur leurs sessions, quel que soit le poste sur lequel ils se trouvent. Du point de vue des performances, les instances de Synchting sont très légères (2 Mo de RAM sur Windows) donc le fait de lancer plusieurs instances ne cause pas de ralentissement (pour moins de 100 hein !).
Syncthing possède également une mini API qui permet via des requêtes GET et POST d’acquérir ou d’envoyer des informations depuis les instances, par exemple :
La commande « curl –s http://ipduserveur:port/rest/system | json_pp » retourne :
{
"alloc": 32147752, # allocated memory, in use "cpuPercent": 0.669829340548344,
"extAnnounceOK": true, # true if we are registered with the global announce server, false on failure, absent if disabled "goroutines": 34,
"myID": "P56IOI7MZJNU2IQGDREYDM2MGTMGL3BXNPQ6W5BTBBZ4TJXZWICQ",
"sys": 66463976 # allocated memory, total
}
On peut facilement récupérer l’ID (« MyID ») du serveur distant sans se rendre sur l’interface web !
Cette méthode est très pratique pour scripter le déploiement de Syncthing, par exemple nous utilisons un script à lancer sur un nouveau PC, pour qu’il crée les instances Syncthing, qu’il les lance (avec le nom/ip/port voulu) et qu’ils les relient aux instances du serveur central.
Cela permet en moins d’une minute (sans compter la synchronisation des données) d’avoir un PC intégré au réseau d’entreprise, et qui peut être utilisé par nos utilisateurs.