Мне помнится, я когда-то давным-давно по роману Ясинского Анджея «Ник», по-своему реализовал задумку доверительного обмена файлами, тогда я это делал через программу unison.

Тут наткнулся на опенсорсное программное обеспечение под именем syncthing и как показал беглый просмотр информации по нему.

Syncthing — это непрерывная синхронизация файлов с открытым исходным кодом, используемая для синхронизации файлов между двумя или более компьютерами в сети. Syncthing использует одноранговую архитектуру, что означает, что каждое устройство, подключенное к вашей сети Syncthing, сохраняет копии файлов в ваших общих папках и отправляет новый контент всякий раз, когда вносятся какие-либо изменения.

Можно предположить, что сервис OwnCloud это тоже самое, но я его использую как сервис хранения наработок и для обмена файлами, а Syncthing — уже, как сервис распространения бекапов, софта.

В качестве операционной системы буду использовать Ubuntu 22.04 Server

Шаг №1: Обновляю систему до самого актуального состояния в рамках текущего релиза:

ekzorchik@srv-us2204a1a:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-us2204a1a:~$ cat /etc/update-manager/release-upgrades | grep Prompt
Prompt=lts
ekzorchik@srv-us2204a1a:~$ sudo sed -i '/Prompt/s/lts/never/' /etc/update-manager/release-upgrades
ekzorchik@srv-us2204a1a:~$ cat /etc/update-manager/release-upgrades | grep Prompt
Prompt=never
ekzorchik@srv-us2204a1a:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt dist-upgrade -y

Шаг №2: Устанавливаю приложения которые хочу иметь на текущей системе (у каждого уважающего себя системного администратора — он обычно свой):

ekzorchik@srv-us2204a1a:~$ sudo apt-get install -y mercurial unzip net-tools curl apt-transport-https

Шаг №3: Настраиваю локаль:

ekzorchik@srv-us2204a1a:~$ sudo rm -f /etc/localtime
ekzorchik@srv-us2204a1a:~$ sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
ekzorchik@srv-us2204a1a:~$ sudo locale-gen en_US.UTF-8
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
ekzorchik@srv-us2204a1a:~$ echo "LC_ALL="en_US.UTF-8"" | sudo -s tee /etc/default/locale
LC_ALL=en_US.UTF-8
ekzorchik@srv-us2204a1a:~$ echo "LANG="en_US.UTF-8"" | sudo tee -a /etc/default/locale
LANG=en_US.UTF-8
ekzorchik@srv-us2204a1a:~$ echo "LANGUAGE="en.US.UTF-8"" | sudo tee -a /etc/default/locale
LANGUAGE=en.US.UTF-8
ekzorchik@srv-us2204a1a:~$

После выполняю Logoff&Logon для активации изменений настроек локали.

Шаг №4: Прописываю репозитарий на установку Synchting и устанавливаю:

ekzorchik@srv-us2204a1a:~$ curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
OK

На заметку: означает, что программа apt-key теперь устарела. Для управления файлами ключей теперь используйте trusted.gpg.d. Если перевести на человеческий язык, теперь мы должны самостоятельно добавлять файлы в папку /etc/apt/trusted.gpg.d/. Несмотря на заверения в документации, программа apt-key работает как обычно и выполняет все свои функции.

ekzorchik@srv-us2204a1a:~$ curl -s https://syncthing.net/release-key.txt | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/syncthing.gpg --import
gpg: keyring '/etc/apt/trusted.gpg.d/syncthing.gpg' created
gpg: key D26E6ED000654A3E: 1 signature not checked due to a missing key
gpg: directory '/root/.gnupg' created
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key D26E6ED000654A3E: public key "Syncthing Release Management <release@syncthing.net>" imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg: no ultimately trusted keys found
ekzorchik@srv-us2204a1a:~$
ekzorchik@srv-us2204a1a:~$ echo "deb https://apt.syncthing.net/ syncthing release" | sudo tee /etc/apt/sources.list.d/syncthing.list
deb https://apt.syncthing.net/ syncthing release
ekzorchik@srv-us2204a1a:~$
ekzorchik@srv-us2204a1a:~$ sudo apt-get update
ekzorchik@srv-us2204a1a:~$ apt-cache show syncthing | grep Version
Version: 1.23.2
Version: 1.23.1
Version: 1.18.0~ds1-3ubuntu0.1
Version: 1.18.0~ds1-3
ekzorchik@srv-us2204a1a:~$
ekzorchik@srv-us2204a1a:~$ sudo apt-get install -y syncthing
ekzorchik@srv-us2204a1a:~$ syncthing --version
syncthing v1.23.2 "Fermium Flea" (go1.20.1 linux-amd64) deb@build.syncthing.net 2023-02-27 03:45:16 UTC [noupgrade]
ekzorchik@srv-us2204a1a:~$

Шаг №5: Настраиваем, что запуск утилиты syncthing будет производится посредством сервиса, который и создадим:

ekzorchik@srv-us2204a1a:~$ sudo nano /etc/systemd/system/syncthing@.service
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization for %I
Documentation=man:syncthing(1)
After=network.target

[Service]
User=%i
ExecStart=/usr/bin/syncthing -no-browser -gui-address="0.0.0.0:8384" -no-restart -logflags=0
Restart=on-failure
SuccessExitStatus=3 4
RestartForceExitStatus=3 4

[Install]
WantedBy=multi-user.target

Любое изменение строк сервиса выше после обязательно следует выполнить команду

ekzorchik@srv-us2204a1a:~$ sudo systemctl daemon-reload
ekzorchik@srv-us2204a1a:~$ sudo systemctl enable syncthing@$USER
Created symlink /etc/systemd/system/multi-user.target.wants/syncthing@ekzorchik.service → /etc/systemd/system/syncthing@.service.
ekzorchik@srv-us2204a1a:~$ sudo systemctl start syncthing@$USER
ekzorchik@srv-us2204a1a:~$ sudo netstat -tulpn | grep syncthing
tcp6       0      0 :::8384                 :::*                    LISTEN      2447/syncthing
tcp6       0      0 :::22000                :::*                    LISTEN      2447/syncthing
udp        0      0 0.0.0.0:21027           0.0.0.0:*                           2447/syncthing
udp        0      0 0.0.0.0:45686           0.0.0.0:*                           2447/syncthing
udp6       0      0 :::21027                :::*                                2447/syncthing
udp6       0      0 :::58265                :::*                                2447/syncthing
udp6       0      0 :::22000                :::*                                2447/syncthing
ekzorchik@srv-us2204a1a:~$ sudo systemctl status syncthing@$USER | head -n 20
● syncthing@ekzorchik.service - Syncthing - Open Source Continuous File Synchronization for ekzorchik
     Loaded: loaded (/etc/systemd/system/syncthing@.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-03-14 15:43:19 MSK; 1min 47s ago
       Docs: man:syncthing(1)
   Main PID: 2439 (syncthing)
      Tasks: 16 (limit: 4571)
     Memory: 20.4M
        CPU: 1.673s
     CGroup: /system.slice/system-syncthing.slice/syncthing@ekzorchik.service
             ├─2439 /usr/bin/syncthing -no-browser -gui-address=0.0.0.0:8384 -no-restart -logflags=0
             └─2447 /usr/bin/syncthing -no-browser -gui-address=0.0.0.0:8384 -no-restart -logflags=0

Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: Access the GUI via the following URL: http://127.0.0.1:8384/
Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: TCP listener ([::]:22000) starting
Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: Relay listener (dynamic+https://relays.syncthing.net/endpoint) starting
Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: QUIC listener ([::]:22000) starting
Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: My name is "srv-us2204a1a"
Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: Completed initial scan of sendreceive folder "Default Folder" (default)
Mar 14 15:43:31 srv-us2204a1a syncthing[2439]: [TSITS] INFO: Detected 1 NAT service
Mar 14 15:43:40 srv-us2204a1a syncthing[2439]: [TSITS] INFO: quic://0.0.0.0:22000 detected NAT type: Port restricted NAT
ekzorchik@srv-us2204a1a:~$

Шаг №6: Запускаю браузер и обращаюсь к системе где шагами выше был установлен пакет Syncthing, т.е. URL ссылка примет вид: http://IP&DNS:8384 (http://172.35.35.32:8384)

в первый раз приложение спрашивает о формирование анонимного отчета, нажимаю Нет

Отправку анонимного отчета запрещаем

Вот так первоначально после установки выглядит Административный Web-интерфейс Syncthing

Вот так первоначально после установки выглядит Административный Web-интерфейс Syncthing

Шаг №7: Syncthing uses port 22000 to communicate with peers. If your computer or server enabled the UFW firewall, then you need to allow port 22000 with the following command.

sudo ufw allow 22000/tcp

Шаг №8: Произвожу настройку аутентификации установив имя пользователя и пароль:

http://IP&DNS:8384 (http://172.35.35.32:8384) - (GUI аутентификация: Установите имя пользователя и пароль) Настройки — вкладка "Интерфейс"

  • (Адрес GUI): 172.35.35.32:8384
  • Имя пользователя для доступа к панели управления: ekzorchik
  • Пароль для доступа к панели управления: 712mbddr@
  • Использовать HTTPS для панели управления: отмечаю галочкой
  • Запускать браузер: отмечаю галочкой
  • Тема оформления: По умолчанию

На заметку: Изменить IP адрес или логин можно и через конфигурационный файл:

ekzorchik@srv-us2204a1a:~$ nano ~/.config/syncthing/config.xml
    <gui enabled="true" tls="true" debugging="false">
        <address>172.35.35.32:8384</address>
        <user>ekzorchik</user>
        <password>$2a$10$NbTGkE8h5jCodaKxAuOGee8J7cAwAcnANaLCrqmn5gzkUF7uqHMe6</password>
        <apikey>YQRqqd9fvM4vGjy9mzdH5vQ65iPSLHEg</apikey>
        <theme>default</theme>
    </gui>

и нажимаю "Сохранить", после обновления страницы (через клавишу F5 к примеру), URL адрес уже будет вида (https://IP&DNS:8384) (https://172.35.35.32:8384) и окно авторизации

Окно авторизации при доступе к Web-интефрейсу Syncthing

Шаг №9: Устанавливаю на Windows Server 2012 R2 Std также Syncthing

https://syncthing.net/downloads/

https://github.com/syncthing/syncthing/releases/download/v1.23.2/syncthing-windows-amd64-v1.23.2.zip

распаковав и после запустив

Скачал и распаковал syncthing на Windows Server 2012 R2

открывается браузер и URL ссылка вида: http://127.0.0.1:8384 (и запущенная консоль командной строки)

Клиент Syncthing на Windows запущен, консоль командной строки отображает статус работы

Через Web-интерфейс задаю также логин и пароль на доступ к Web-интерфейсу и что доступ к панели Администрирования с применением https:

http://127.0.0.1:8384 - Нет - Действия - Настройки — вкладка "Интерфейс"

  • (Адрес GUI): 172.35.35.28:8384
  • Имя пользователя для доступа к панели управления: ekzorchik1
  • Пароль для доступа к панели управления: 712mbddr@
  • Использовать HTTPS для панели управления: отмечаю галочкой
  • Запускать браузер: отмечаю галочкой
  • Тема оформления: По умолчанию

и нажимаю "Сохранить", обновляю страницу

Шаг №10: Теперь свяжем эти две системы, для этого понадобятся идентификаторы устройств с обоих систем:

(on Ubuntu 22.04)

https://172.35.35.32:8384 - user&pass - Действия - Показать ID и копируем идентификатор устройства: TSITS6O-4INQCVY-3CRRJF7-LCKNSSL-GM23WE2-EDD4YEX-QK4HAZ4-DH3IIAH

(on Windows Server 2012 R2 Std)

https://172.35.35.28:8384 - user&pass - Действия - Показать ID и копируем идентификатор устройства: GHSEJGH-5MTXXBB-7VI3ZLW-M4SR5BM-5SRRRR5-ELDESIP-TKOBZ3M-JTF6AQQ

Шаг №11: Добавляем устройство Windows в Ubuntu системе:

https://172.35.35.32:8384 - user&pass - (Удаленные устройства) - Добавить удаленное устройство — вкладка "Общие"

  • ID устройства: копируем сюда ID устройства Windows

На заметку: Если обо устройства в одной сети то при добавлении устройства его идентификатор вещяется.

вкладка "Предоставление доступа"

  • Автопринятие: отмечаю галочкой

и нажимаю "Сохранить"

после чего на устройстве с Windows будет запрос, что устройство Ubuntu хочет подключить, отвечаем "Добавить устройство"

На Windows системе добавляем Ubuntu систему

затем на вкладке "Предоставление доступа" также ставим галочку "Автопринятие"

и нажимаем "Сохранить"

Шаг №12: Создаем на Ubuntu системе папку содержимое которой будет подвергаться обмену:

(on Ubuntu 22.04)

ekzorchik@srv-us2204a1a:~$ mkdir /home/ekzorchik/share1

https://172.35.35.32:8384 - user&pass - Папки - Добавить папку -

вкладка Общие

  • Ярлык папки: share1
  • ID папки: share1
  • Путь к папке: /home/ekzorchik/share1

вкладка Предоставление доступа

  • Устройства без общего доступа: отмечаю галочкой srv-rdphome (это система с Windows)

и нажимаю "Сохранить"

На заметку: если посмотреть лог работы сервиса, то можно увидеть, что каталог share1 на Windows системе создался в каталоге текущего пользователя ~/share1, т.е. C:\Users\ekzorchik\share1

На Ubuntu системе сервиса Syncthing создаю каталог для обмена файлами

Шаг №13: Проверяю, как работает синхронизация файлов, из Windows системы копирую в каталог что-либо и после проверяю, что это что-либо отобразится на Ubuntu системе:

Из Windows системы копирую в каталог чтчто-либо и после проверяю, что это что-либо отобразится на Ubuntu системе

заметил, что Windows система предварительно проводит сканирование содержимого папки

Сервис Syncthing на Windows системе предварительно проводит сканирование содержимого папки.

а тем временем Ubuntu система

После Ubuntu система с сервисом Syncthing проводит синхронизацию содержимого папки

ожидаю…
ekzorchik@srv-us2204a1a:~$ ls -lh ~/share1/ -a
total 1.2G
drwxrwxr-x 3 ekzorchik ekzorchik 4.0K Mar 14 16:26 .
drwxr-x— 8 ekzorchik ekzorchik 4.0K Mar 14 16:20 ..
drwxr-xr-x 2 ekzorchik ekzorchik 4.0K Mar 14 16:22 .stfolder
-rw-r—r— 1 ekzorchik ekzorchik 2.4G Mar 14 16:35 .syncthing.SNG7-PBX16-64bit-2302-1.iso.tmp

видно, что пока формируется временный файл

ожидаю…

Синхронизация добавленного файла произвелась, теперь оба каталога share1 на обоих системах одинаковы.

Шаг №14: Если нужно сделать чтобы только одна система, к примеру, Ubuntu была главной в роли распространения файлов из каталога share1

(on Ubuntu 22.04)

https://172.35.35.32:8384 - user&pass - Папки — выбираю share1 и перехожу в "Редактировать" — вкладка "Дополнительно"

(Сканирование)

  • Следить за изменениями: Отмечаю галочкой
  • Тип папки: меняю на "Только отправить", тем самым делая что только на Ubuntu система эталонные файлы в этой папке, а уже куда она подключена по такому же принципу делаю для папки share1
  • Тип папки: только получить

после обязательно нажимаем "Сохранить" для активации изменений.

На заметку: Какие действия можно указать для папки

  • Тип папки: Отправить и получить — производить и отправку файлов, и получение
  • Тип папки: Только отправить — Файлы защищены от изменений сделанных на других устройствах, но изменения, сделанные на этом устройстве, будут отправлены всему кластеру.
  • Тип папки: Только получить — Файлы синхронизируются из группы, но изменения, сделанные на этом устройстве, не будут отправлены на другие устройства группы.

На заметку: Думаю для хранения резервных копий на нескольких системах можно использовать на главной Ubuntu

Шаг №15: Если обе системы: главная и подключаемая в рамках одной сети или сети разделенной Вашим маршрутизатором, то я бы оставил только "Локальное обнаружение"

(on Ubuntu 22.04)

https://172.35.35.32:8384 - user&pass — вкладка "Подключения"

  • Адрес протокола синхронизации: tcp4://172.35.35.32:22000
  • Включить NAT traversal: снимаю галочку
  • Глобальное обнаружение: снимаю галочку (сам добавлю идентификатор устройства)
  • Локальное обнаружение: оставляю галочку
  • Включить релеи: снимаю галочку

после нажимаю "Сохранить" и по такому же принципу проделываем на подключаемом устройстве, только меняем на свой адрес протокола синхронизации.

После чего если посмотреть на Web-интерфейс администрирования на Ubuntu 22.04, то видно, что изменился тип соединения с NAT на TCP LAN, как мне и нужно, т.к. обмен идет в рамках локальной сети.

Изменяю тип соединения в локальной сети между Ubuntu и Windows системами только через TCP LAN

Итого: Пока из проделанного выше я вижу удобный инструмент для обмена файлами, пока разберу еще различные заметки прежде чем публиковать все на своих ресурсах.

На этом пока все с уважением автор блога Олло Александр aka ekzorchik.