Syncthing je riešenie na zdieľanie súborov naprieč viacerými zariadeniami, podporujúce väčšinu operačných systémov vrátane Linuxu, Windowsu, Macu a Androidu. Je open source a decentralizovaný. Vyžaduje si však nejaké nastavenie. Spočiatku som bol zdráhavý, ale je to jedna z vecí, o ktorú som nevedel, že ju potrebujem.
Začal som ho používať na synchronizáciu svojho súboru s databázou hesiel
.kdbx medzi laptopom a telefónom a ukázal sa byť spoľahlivý a takmer
okamžitý. Urobil som veľký výskum na výber správneho správcu hesiel pre
moje potreby a možnosť ukladať SSH kľúče v KeePassXC bola pre mňa
rozhodujúca. Zdá sa, že je dosť ťažké implementovať takúto funkčnosť v
cloudovom riešení. Pritom ľudia v diskusiách spomínajú Syncthing ako
nástroj prvej voľby na synchronizáciu iného typu súborov: fotografií.
Takže logicky, keď už bolo všetko nastavené na synchronizáciu jedného databázového súboru, pridal som ďalší priečinok, ktorý môj telefón používa na ukladanie čerstvých fotografií čohokoľvek, čo považujem za dostatočne zaujímavé na zachytenie. Netrvalo dlho, kým som sa stal prakticky závislým na tom, že čokoľvek, na čo namierim fotoaparát telefónu, je dostupné v laptope v reálnom čase.
Centralizovanie decentralizovaného #
Prvou nevýhodou tohto nastavenia, s ktorou som sa rozhodol niečo urobiť, bolo, že ak je jedno zariadenie nejaký čas offline, nedostane aktualizácie od druhého zariadenia. Ak sa medzitým to druhé zariadenie stratí, dáta sú stratené. V praxi by to znamenalo, že ak stratím telefón predtým, ako sa laptop pripojí k internetu, fotografie sa stratia. Situácia s heslami a SSH kľúčmi nie je iná, pričom dôsledky by mohli byť ešte závažnejšie v závislosti od situácie.
Absencia centrálneho servera znižuje náklady, ale zároveň zvyšuje riziko straty dát, ako vidíme. Ako teda tento problém riešiť? Riešenie je jednoduché, ako už tušíte. Vezmite svoje obľúbené nízkonapäťové ARM zariadenie, pripojte k nemu spoľahlivé úložisko a nechajte ho neustále zapnuté. Ak vám tento scenár znie povedomý, je. Väčšina ľudí si zvolí Raspberry Pi, ktoré je zvyčajne len šuplík ďalej, pripravené na použitie.
Nastavenie neustále zapnutého zariadenia pre túto úlohu prináša to najlepšie z oboch svetov. Získal som centralizované riešenie bez požiadaviek, ktoré kladú konvenčné centralizované služby, ako sú verejná IP a príliš spoľahlivé pripojenie. Zavedenie centrálneho uzla do decentralizovanej služby odstraňuje jediný bod zlyhania. Moje nastavenie funguje bez akýchkoľvek problémov, dokonca aj keď Pi prestane fungovať alebo stratí na čas pripojenie. Nakoniec sa synchronizuje s telefónom alebo laptopom, keď sa vráti do funkčného stavu. Jednoducho zaručuje, že je takmer vždy k dispozícii bod, s ktorým môžu dáta synchronizovať, čím sa zabraňuje ich strate.
Príprava #
Ako som už poznamenal, pre tento recept potrebujeme staré ARM zariadenie, headless. Ďalej potrebujeme úložné médium, prednostne surové SSD alebo HDD ak ste vegan. Primiešajte trochu bootovateľného média. Teraz postupujte podľa pokynov v kuchárke.
- Ďalší krok je nainštalovať systém a samotný Syncthing, keď ste prihlásený ako root:
pacman -Syu syncthing
- Pripojte úložné médium niekde do pripraveného adresára, príklad:
mkdir /mnt/storage
mount /dev/sdXY /mnt/storage
- Zaistite automatické pripojenie úložného média po štarte systému, príklad pomocou UUID:
pacman -S arch-install-tools
genfstab -U /mnt/storage/ >> /etc/fstab
Poznámka: Balíček
arch-install-toolsmôžete po tomto kroku odstrániť. Ak upravíte súborfstabručne, na príkazgenfstabho ani nepotrebujete.
- Vytvorte systémového používateľa
syncuserbez akéhokoľvek prihlasovacieho shellu:
useradd --system --user-group --create-home --shell /usr/bin/nologin syncuser
- Povoľte prístup k úložnému médiu len používateľom
rootasyncuserprístup k úložnému médiu:
chown root:syncuser /mnt/storage
chmod 750 /mnt/storage
Poznámka: Samostatný systémový používateľ výrazne obmedzuje neoprávnenú manipuláciu s dátami v prípade, že nejaký ransomware alebo škodlivý používateľ použije SSH kľúčový pár na vstup do zariadenia z môjho laptopu.
- Povolte a spustite službu Syncthing:
systemctl enable syncthing@syncuser --now
- Sprístupnite webové grafické rozhranie Syncthing cez sieť:
su -s /bin/bash -c 'vi /home/syncuser/.config/syncthing/config.xml' syncuser
Zmeňte adresu z 127.0.0.1 na 0.0.0.0:
<gui enabled="true" ...>
<address>0.0.0.0:8384</address>
...
</gui>
-
Zabezpečte vaše zariadenie správne, alebo aspoň obmedzte prihlasovanie roota.
-
Nastavte firewall — balíček Syncthing poskytuje definície UPnP a GUI pre
ufw— tento krok je voliteľný:
pacman -S ufw
systemctl enable ufw --now
ufw default deny
ufw allow syncthing
ufw allow syncthing-gui
ufw limit ssh
ufw enable
- Hotovo!