Syncthing – un dropbox privé en P2P


Un petit article pour vous présenter Syncthing.

J’ai découvert ce logiciel il y a quelques années, mais je n’avais jamais eu l’occasion de m’en servir, c’est chose faite, donc j’en parle un peu ici.

Présentation

Pour faire simple Syncthing est un logiciel de synchronisation multi-périphériques fonctionnant en P2P de manière privée et sécurisée.

  • tous les transferts sont signés et chiffrés en AES-128, ce qui est (pour le moment en tout cas) largement suffisant pour la plupart des usages
  • il n’est pas obligatoire d’ouvrir le moindre port entre les périphériques (on passe alors par des relais qui ne voient passer que du trafic chiffré, de la même manière que les N routeurs situés entre votre navigateur et un site en HTTPS)
  • chaque périphérique doit être explicitement déclaré et accepté => aucun risque de voir un intrus se connecter ni de voir nos données recopiées chez quelqu’un d’autre
  • pour chaque dossier partagé, on choisi les machines autorisées à s’y connecter
  • on peut évidemment autoriser plusieurs machines sur un même partage et ainsi disposer  d’une redondance des données
  • les transferts fonctionnent en P2P, donc un même fichier peut être récupéré depuis plusieurs sources, ce qui est plus rapide et plus fiable
  • on peut chainer les machines : A voit B, B voit C mais A et C ne se voient pas
  • on peut faire du versionning (plusieurs réglages sont possibles)
  • on peut exclure des fichiers/dossiers de la synchro
  • l’application fonctionne sous Android, *BSD, GNU/Linux, MacOS, Solaris et Windows
  • c’est totalement gratuit (licence MPL) et sans inscription (mais un don reste possible et recommandé)
  • … et d’autres trucs que je n’ai pas encore vu ou testé
  • dernier point, c’est très simple d’utilisation (donc pour cette fois, je ne ferais pas de doc)

Syncthing n’est pas un logiciel de sauvegarde, même si certaines de ses fonctions permettent, indirectement, d’avoir quelque chose qui y ressemble.

Il ne chiffre pas non plus vos fichiers localement, seuls les transferts sont chiffrés, donc si vous avez des données sensibles, il faut les chiffrer avec un autre outil ou les stocker directement sur un système de fichiers chiffré. Un développement est en cours pour ajouter cette fonction.

Sur beaucoup d’aspects, il ressemble à Resilio Sync (anciennement BTSync), mais contrairement à ce dernier, il est resté libre et gratuit (il existe une version gratuite de Resilio Sync, mais plus limitée).

Synchro mobile

Mon objectif premier était de m’en servir pour recopier automatiquement les photos de mon smartphone vers mon NAS.

Smartphone vers NAS

Je l’ai installé sur mon smartphone et j’ai créé un partage du dossier « Caméra » (sous DCIM) :

  • je prends une photo (jusque là vous me suivez je pense:lol:)
  • dès que je me connecte à mon WIFI (c’est le réglage que j’ai choisi), l’application se lance en tâche de fond et analyse les changements dans le dossier Caméra
  • toutes les modifications (nouvelles photos mais aussi suppressions) sont alors répercutées sur mon NAS
  • comme j’ai configuré « Envoyer uniquement », une suppression sur le NAS ne touche pas aux photos du smartphone (synchronisation unidirectionnelle).

nb : mon NAS fait aussi tourner une instance de Syncthing, dans un conteneur Docker créé pour l’occasion (disponible ici)

Mon premier objectif est donc atteint, mais pourquoi s’arrêter là.

Smartphone et tablette vers smartphone + tablette + NAS

Je l’ai donc aussi installé sur ma tablette, même principe, sauf que j’ai aussi croisé les dossiers « Caméra » des 2 périphériques :

  • je prends une photo depuis mon smartphone OU depuis ma tablette, elle est synchronisée sur mon smartphone ET ma tablette ET mon NAS

Smartphone + tablette + NAS

J’ai fait de même avec un autre dossier (des fichiers divers), mais en synchronisation bidirectionnelle cette fois, ça fonctionne tout aussi bien.

Les 3 périphériques ont donc un dossier dont le contenu reste identique. C’est aussi une manière simple de recopier un fichier depuis/vers un smartphone (ou plusieurs).

Synchronisation entre serveurs

Comme tout ça fonctionnait très bien, j’ai fait le test entre 2 serveurs Web (pour synchroniser des fichiers statiques).

Certains me diront qu’il existe plein de manière de faire ça, très simplement (rsync, unison, drbd, lustre, ipfs, …), mais je voulais aussi mettre mon NAS dans la boucle et c’était l’occasion de jouer un peu.

Encore une fois, ça fonctionne très bien : dès qu’un fichier bouge sur l’un des serveurs ou sur le NAS, la modification est automatiquement répercutée sur les autres membres du partage.

Ça reste moins rapide que rsync&co, mais on économise la création du tunnel (ssh, ipsec, …) et ça permet d’inclure des périphériques « clients ».

J’en ai d’ailleurs profité pour inclure les serveurs dans les partages du smartphone et ainsi profiter de leurs bande passante tout en ayant une meilleur disponibilité des données.

Conclusion

L’installation est portable, l’interface est clair et c’est très stable.

Je n’ai rencontré que 3 problèmes pour le moment :

  • la patience : ce n’est pas de la synchro temps réel, la plupart du temps les modifications sont répercutées en moins d’une minute (plus le temps de transfert si les fichiers sont gros), mais parfois ça prend un peu plus longtemps => il faut être patient
  • l’organisation : il faut bien réfléchir à la manière d’organiser les partages sur les différentes machines et utiliser des noms explicites
  • la charge CPU sous macos : j’ai du louper un truc, mais je n’ai pas cherché (le mac ne me sert que pour des tests, la plupart du temps il est dans un tiroir)