Syncthing синхронизирует файлы напрямую между устройствами: ноутбуком, домашним сервером, телефоном и внешним диском. Центрального облака нет, данные передаются по зашифрованным соединениям, а каждая сторона хранит полноценную копию каталога. Это удобно для рабочих документов, фотоархива и конфигураций, но требует понимания нескольких вещей: как выдавать доступ, что делать с конфликтами и почему синхронизация не заменяет резервное копирование. Ниже — рабочая настройка на Linux и разбор ситуаций, которые чаще всего ломают обмен файлами.
Как работает Syncthing
Каждое устройство получает идентификатор — длинную строку, которая одновременно служит адресом и ключом доверия. При подключении два узла проверяют сертификаты и договариваются о шифровании. Изменения передаются блоками: программа не копирует файл целиком, если изменилась его часть, а сначала сверяет хеши. Поэтому повторная синхронизация большого архива после переименования каталога проходит быстро.
Прямое соединение устанавливается в локальной сети или согласуется через NAT. Если прямой канал недоступен, Syncthing может использовать ретранслятор, а для поиска устройств — глобальный сервер обнаружения. Оба механизма можно отключить в настройках соединений, если синхронизация нужна только внутри доверенной локальной сети. Это штатный выбор транспорта: без ретранслятора и обнаружения устройства должны знать адреса друг друга.
Установка и автозапуск
В Debian и Ubuntu есть готовый пакет. Версия 2.x использует базу SQLite, поэтому после обновления с ветки 1.x первый запуск может занять время: старый индекс мигрирует в новый формат. Не прерывайте этот процесс и заранее освободите место на диске.
sudo apt install syncthing
systemctl --user enable --now syncthing
loginctl enable-linger $USER
systemctl --user status syncthing
Пользовательская служба запускается от вашего имени и получает доступ только к вашим файлам. Это правильнее, чем запуск от root: скомпрометированный процесс не сможет переписать системные каталоги. Команда enable-linger нужна на сервере, чтобы служба работала после выхода из сеанса. В некоторых пакетах доступен системный шаблон syncthing@user.service; не включайте одновременно оба варианта.
systemctl --user restart syncthing
journalctl --user -u syncthing -n 20 --no-pager
Первичная настройка и устройства
Веб-интерфейс по умолчанию слушает 127.0.0.1:8384. Сразу задайте пароль в разделе настроек графического интерфейса: даже локальный порт не стоит оставлять без защиты, особенно на машине с другими пользователями. Идентификатор устройства находится в меню действий; его можно передать по защищённому каналу, но не публиковать в открытых чатах.
Порядок такой: создайте каталог, укажите его путь и метку, откройте вкладку общих доступов и добавьте идентификатор второго устройства. На втором устройстве подтвердите запрос и выберите локальный путь. Папка должна существовать и быть доступной на запись. Внутри появится служебный маркер .stfolder; если его удалить, Syncthing посчитает каталог повреждённым и остановит синхронизацию.
Сеть и брандмауэр
Для прямого обмена используется порт 22000 по TCP и UDP, а для локального обнаружения — 21027 UDP. Откройте их только в доверенной зоне, заменив home на зону своего интерфейса. Проверить, что служба действительно слушает порты, можно через ss.
ss -tulpn | grep -E '22000|21027'
sudo firewall-cmd --permanent --zone=home --add-port=22000/tcp
sudo firewall-cmd --permanent --zone=home --add-port=22000/udp
sudo firewall-cmd --permanent --zone=home --add-port=21027/udp
sudo firewall-cmd --reload
Если устройства находятся в разных сетях и прямой канал не устанавливается, проверьте статус подключения в интерфейсе: там видно, используется ли ретранслятор. Для постоянной пары «сервер — ноутбук» полезно прописать статический адрес tcp://192.0.2.10:22000 в расширенных настройках устройства. Это убирает зависимость от обнаружения, но требует стабильного адреса или локального DNS.
Игнорирование файлов и версии
Не всё нужно переносить: временные файлы, кэши и служебные каталоги лучше исключить. Правила хранятся в файле .stignore в корне общей папки. Синтаксис похож на gitignore, но с собственными особенностями; изменения применяются после пересканирования.
cat > ~/Sync/.stignore <<'EOF'
*.tmp
*.part
~$*
.cache/
EOF
find ~/Sync -name '*sync-conflict*' -printf '%TY-%Tm-%Td %p\n'
Включите версионирование в настройках папки. Простое хранилище и ступенчатая схема сохраняют старые копии в .stversions, но занимают место и не равны архиву. Для важных данных настройте отдельное резервное копирование на другой носитель: Syncthing добросовестно повторяет и удаление, и порчу файлов.
Конфликты и права
Конфликт возникает, когда обе стороны изменили один файл до обмена. Проигравшая версия сохраняется рядом с именем вида document.sync-conflict-20260101-120000-ABCDEF.txt. Не удаляйте такие файлы автоматически: сначала сравните содержимое и решите, какая версия нужна. Массовое появление конфликтов обычно означает, что два узла долго были offline или на одном из них сбиты часы.
Syncthing работает с правами пользователя и не повышает их. Если каталог принадлежит другому владельцу, запись не пройдёт. Символические ссылки не синхронизируются, а имена, различающиеся только регистром, могут конфликтовать при обмене с Windows. Проверяйте права через namei -l и не запускайте службу от root ради обхода ошибки.
Диагностика
Сначала смотрите журнал службы, затем проверяйте здоровье API и состояние папок. Локальный эндпоинт здоровья не требует ключа и удобен для мониторинга.
curl -s 127.0.0.1:8384/rest/noauth/health
journalctl --user -u syncthing -n 50 --no-pager
syncthing --version
df -h ~/Sync; df -i ~/Sync
Типичные причины: закрытый порт, неверный идентификатор, отсутствие прав, переполненный диск или рассинхронизация часов. Если папка помечена как «не синхронизирована», проверьте маркер .stfolder и свободное место. После перемещения каталога путь в настройках нужно обновить вручную.
Чек-лист
- Служба запущена от обычного пользователя, пароль на веб-интерфейс установлен.
- Порты открыты только в доверенной зоне, ретрансляция отключена, если она не нужна.
- Для важных данных есть отдельная резервная копия, а не только синхронизация.
- В
.stignoreисключены временные файлы и кэши. - Конфликты разбираются вручную, а журнал проверяется после каждого обновления.
Итог
Syncthing даёт предсказуемую синхронизацию без облака и без ежемесячной подписки. Настройка сводится к установке службы, добавлению устройств, открытию портов и защите интерфейса. Главное — помнить о границах: это инструмент обмена, а не архив и не резервная копия. Если удалить файл на одном узле, он исчезнет и на остальных, поэтому версии и отдельный бэкап должны быть частью схемы с самого начала.