Remplacez (ou pas) Dropbox/OneDrive/Box/hubiC avec SyncThing

L’informatique en nuage (mouais), l’infonuagique (beurk), bref le cloud computing a le vent en poupe tout le monde le sait, on en entend parler partout. Un des premiers usages grand public qui en a été fait a été de permettre un stockage sécurisé (car déporté) de ses données personnelles et même de les synchroniser entre différents appareils.

Ce constat étant posé, certaines personnes n’oublient pas de rappeler que le cloud computing veut surtout dire que vos données sont sur les systèmes de quelqu’un d’autre à qui vous déléguez leur sécurité. Que ce soit via des failles de sécurité ou du social engineering, cette sécurité n’est jamais garantie (comme bien souvent dans l’informatique, soyons clair, et ces sociétés sont plutôt douées sur le sujet, mais il y aura toujours des failles). Je ne parle même pas des « interceptions légales » ou autres commissions rogatoires obligeants ces opérateurs à donner accès aux fichiers des utilisateurs – sans même avoir le droit de notifier ces derniers que ça a été le cas.

Le mieux reste encore que les fichiers restent sur des équipements que vous possédez. Il serait fâcheux que le FBI ait accès aux photos de Mamie à la plage l’année dernière ou à votre mot de passe Youporn. Bien sûr, dans ce cas d’usage, la responsabilité de la qualité du stockage et de la redondance vous revient. Ne faites pas n’importe quoi. Le backup correct, c’est compliqué.

Ce (long) préambule terminé, quelle solution apporter à l’utilisateur soucieux de garder le contrôle de ses données si chères à son cœur tout en ne compromettant pas leur sécurité ? Une des solutions semble être SyncThing.

SyncThing est un logiciel de synchronisation point-à-point (peer-to-peer) libre, gratuit, écrit en Go et disponible sous tous les systèmes possibles et imaginables : Windows, Linux, MacOS, iOS, Android, Solaris, BSD et même Darwin. Il y a des versions x86, x86_64 bien sûr, et même ARM (votre Raspberry sera content de l’apprendre). Cela permet de synchroniser des fichiers entre différents systèmes sur un réseau local ou à travers Internet. L’intégrité et la sécurité des données ont été prises en compte dès le début de la conception du logiciel.

Lorsque vous installez SyncThing, un identifiant (Id) est attribué à l’équipement (device – c’est ainsi que SyncThing désigne les appareils sur lequel il tourne). Il suffit de rajouter ce système sur un autre poste SyncThing (votre mobile par exemple ou le PC de votre Maman qui voudrait vraiment avoir les photos des vacances à l’île d’Oléron) par le biais de son Id. Le premier ordinateur va recevoir une notification de demande de partage. Acceptez là, choisissez quel(s) répertoire(s) vous voulez utiliser, et la synchronisation commence.

L’identifiant est extrêmement important car il sert à la fois à authentifier, autoriser et trouver (voir plus bas au sujet des serveurs d’annonce) un équipement. Lors du premier démarrage du logiciel, une paire de clefs publiques/privées est générée (c’est du 3072 bit, c’est-à-dire super fort comme niveau de chiffrement). Notez que vous pouvez utiliser vos propres clefs publiques et privées.

L’identifiant de l’équipement est simplement un hash (SHA-256) puis un encodage Base32 des données contenues dans le certificat (la clef publique). Les détails se trouvent ici.

(Pour les nerds qui liraient cet article, je souhaiterais rajouter que cette application tourne parfaitement en user space sous Linux, pas besoin de l’installer ailleurs que dans la home de votre utilisateur ou de lui donner des droits particuliers. Il suffit d’ouvrir le port 22000/TCP sur le pare-feu.)

Comment les fichiers sont échangés ? Si les deux systèmes ne sont pas sur le même réseau, alors ils vont s’échanger les données par le biais d’un serveur de relai (relay server) disponible sur Internet. Par défaut SyncThing utilise des serveurs fournis par une communauté et leur usage est gratuit. Notez que ces serveurs ne voient pas le nom des fichiers où leur contenu car les échanges se font via des requêtes sécurisées par TLS et chiffrées en AES-256 et Courbes Elliptiques (ce qui empêche tout déchiffrement futur même si les clefs sont compromises ultérieurement). La connexion entre les pairs et le relai est en texte clair, mais une fois que le relais a mis ces pairs en relation ils établissent le tunnel TLS entre eux et le serveur n’a pas accès aux clefs. Les détails de cette implémentation est disponible sur la documentation du protocole de relai.

Comment est-ce que les systèmes se font connaitre ? Il existe un autre type de serveur, les serveurs d’annonce (announce servers). Lorsqu’un client SyncThing est démarré, il va « s’enregistrer » sur ces serveurs en disant « voici mon Id et mon adresse IP publique ». Dans le même temps le service/daemon balance des broadcast sur son réseau local pour s’annoncer aux autres clients éventuellement dans le coin. Notez qu’il est possible de désactiver la connexion aux serveurs d’annonce pour tout garder en local.

Vous êtes paranoïaque et vous ne faites pas confiance à des serveurs tiers même si le chiffrement est a priori incassable ? Pas de problème car SyncThing vous fournit aussi les binaires des serveurs de relai et d’annonce. Libre à vous de faire votre petit réseau SyncThing rien qu’à vous.

Tant que l’on est à parler serveur, un usage évident que l’on peut faire c’est se louer un serveur dédié ou une machine virtuelle chez un hébergeur quelconque. Ça revient à faire du cloud, on est d’accord, mais au moins on a la main totale sur le système (y compris la possibilité de chiffrer les disques). Il suffit de rajouter un client SyncThing sur ce serveur pour qu’il puisse « centraliser » les données (comme les serveurs Dropbox ou OneDrive le font) tout en ayant l’avantage d’être déporté de chez vous – si votre maison brûle et vos ordis avec, vous avez toujours un backup dans un centre de donnée quelque part.

Notez cependant que les fournisseurs de services de sauvegarde dans le cloud ont des réseaux extrêmement bien conçus qui garantissent un haut niveau de redondance - vos données sont copiées à travers le monde entier dans différents centre de données ultra-optimisés pour le stockage - et servis par des Content Delivery Networks garantissant des temps de réponse faibles et des vitesses de téléchargement élevées. Bien qu’il soit tout à fait possible pour n’importe qui un peu technique de reproduire ce genre de qualité de stockage (votre machine virtuelle peut tout à fait monter un lecteur sur un stockage type Amazon S3 ou Azure Blob Storage), cela prend bien entendu beaucoup plus de temps (et revient probablement plus cher) que les solutions “clefs en main” que proposent ces fournisseurs. Mais ça peut être un beau projet.

Rajoutons, et ça c’est un paragraphe spécial pour Cafeine, que SyncThing ne gère “que” la synchronisation des fichiers (de façon poussée - ça gère le versionning et les corbeilles de chaque OS par exemple) mais il n’y a pas d’interface web pour accéder à ses données comme le propose un Dropbox, un OneDrive ou un Box.com (encore ceux-là). Si vous souhaitez en faire cet usage, ou encore partager un fichier d’un clic droit en le mettant dans votre répertoire “Public”, ce n’est pas possible (à moins de bidouiller). De même, comme je l’expliquais ci-dessus, il vous faudrait paramétrer vous-même votre propre serveur si vous souhaitez avoir un serveur dans un centre de données.

J’espère vous avoir convaincu des différents avantages de SyncThing et que cet article vous donnera envie si ce n’est de mettre Dropbox par la fenêtre, au moins de jeter un œil à ce bien beau projet !

4 « J'aime »

Je rajoute qu’il existe des clients/plugins tout fait pour Synology/FreeNAS/Nas4Free, ce qui permet de faire du backup des données synchronisées sur un NAS où on a, a priori, du RAID ou ZFS qui va bien pour le backup.

Merci pour ce thread.

J’utilise jusqu’a aujourd’hui Bittorent Sync, et j’ai testé une installation identique de SyncThing. Ma configuration est relativement simple, un PC de bureau et un MacBook Pro à la maison, ainsi qu’un serveur kimsufi hebergé chez OVH qui m’assure une sauvegarde distante en cas de destruction/vol des machines de la maison. Je n’ai pas testé les applications mobiles, ni celles sur NAS.

Pros

  • Ca marche aussi bien que btSync.
  • Les options pour la gestion du versioning / de la poubelle sont plus poussées que celles de btSync.
  • C’est open source.
  • C’est gratuit.

Con

  • les clients Mac et Windows sont en fait des applis en ligne de commande qui lancent l’interface web. Un truc mieux intégré serait vraiment un gros plus (je pense à une appli native constituée d’une simple webview et d’un icône dans le tray avec une option pour lancer l’appli automatiquement au démarrage).

C’est vrai que c’est plus proche du remplacement de Bittorent Sync que de OneDrive. Je trouve que leur appli installée (ou l’interface web) fonctionne bien, qu’est ce qui manque selon toi ?

Y’a un vrai desktop client qu’on peut installer pour Windows/Mac ? Tout ce que j’ai trouvé sur le site, c’est un exe en ligne de commande qui lance l’interface web dans le navigateur par défaut. A part ca, l’interface web est nickel.

Oui il ya un GUI en GTK (cross-platform): https://github.com/syncthing/syncthing-gtk

Ca ressemble beaucoup à l’UI Web mais ça cache certaines des options avancées (ça peut aussi lancer l’UI Web d’un clic pour accéder aux dites options avancées).

Edit: pour le download c’est dans les “releases” du dépôt Github: https://github.com/syncthing/syncthing-gtk/releases

Ah ok, c’était bien caché. Merci.

Bon esprit les explications! Juste soyez sur que vous comprenez bien que sync sur un autre serveur c’est pas du tout les meme fonctionnalites que ce que fournit dropbox et que le niveau de redondance, les SLA sur les données, la gestion des clefs de manière appropriée, etc, c’est pas facile a faire et que c’est donc “a vos risques et perils”. La partie que ca remplace ici c’est juste la partie “Synchro” et c’est la partie émergée de l’iceberg.

ça peut être jouable en environnement pro ? Genre sur 2-3 gros volumes de 30-60To ?

Je le recommanderai absolument pas a moins que tu saches exactement ce dans quoi tu t’embarques. C’est une recette pour avoir des grosses grosses mauvaises surprises.

Bah j’ai déjà un truc en place qui est plutôt moche à base de CarbonCopyCloner (sorte de GUI++ OSX pour rsync) dans tout les sens je pense pas que ça puisse être pire. Et les volumes en question on déjà mis à genoux CrashPlan (qui n’est pas des plus optimisé sur OSX c’est sûr)

Je ne sais pas trop quelles seront les performances avec des volumes de cette taille. C’est pas tant la copie que le scan des fichiers pour modification. SyncThing rescanne toutes les N secondes (c’est paramétrables, par défaut c’est 5 minutes ou lors de la copie/modification d’un fichier) et sur ce genre de taille ça peut durer longtemps. rsync lui scanne au moment de l’exécution.

Peut-être que tu peux faire un réglage pour scan toutes les 24h (plus ou moins quelques heures) ? Ce qui est sûr c’est que ça fonctionnera mieux que CrashPlan.