Сидбокс

Сидбокс (англ. Seedbox) - частное автономное устройство, выполняющее функцию сбора, хранения и распространения данных или сетевых мета-данных (информации об узлах) другим узлам в сети.

Зачастую реализуется на базе одноплатного компьютера, в виду низкой энергозатратности и отсутствием шума.

В отличии от десктоп сидирования, устройство обеспечивает высокий показатель up-time.

Примеры устройств

OrangePi PC Plus / 1 Tb OrangePi PC Plus / 1 Tb

Сидбоксинг

Культура и сообщество энтузиастов, мотивированных свободой обмена данными: метео, bittorrent, и другие направления.

Yggdrasil

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

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

Поскольку Yggdrasil обеспечивает соединение пиров путем туннелирования, не нужно настраивать маршрутизацию (проброс) портов на роутере, активировать опцию UPnP, достаточно разрешить выданный BitTorrent клиентом порт в настройках фаервол (при использовании модели whitelist)

Аппаратная часть

Контроллер

Выбор устройства

Для организации раздач в локальной сети Yggdrasil, требования к производительности минимальны, в большинстве случаев подойдет ARM платформа с 1 Гб оперативной памяти и внешним накопителем.

Использование для этой цели старого ноутбука, с постоянно подключенным зарядным устройством нежелательно для АКБ, если в устройстве не предусмотрен аппаратный модуль активной зарядки, обеспечивающий питание устройства напрямую, в случае, когда аккумулятор заряжен.

Оптимальным выбором для создания сид-бокса будет Raspbery Pi. Из бюджетных вариантов, существует множество альтернатив, например для BitTorrent раздач подойдет Orange Pi PC Plus, имеющий на борту процессор Allwinner H3 SoC Quad-core Cortex-A7, 1GB LPDDR3 SDRAM и встроенную память 8GB eMMC Flash.

Операционные системы

Обычно для обслуживания сид-сервера, используется операционные системы семейства Linux.

Например, Orange Pi предоставляет для загрузки свои официальные образы - Android, Linux, и другие, с адаптацией под характеристики каждой модели.

Также, существуют независимые проекты с открытым исходным кодом для множества устройств, например Armbian, DietPi и другие.

Не смотря на то, что большинство одноплатных компьютеров поставляется с предустановленной ОС, лучше установить последнюю версию подходящего для своих нужд дистрибутива.

Для установки операционной системы, после создания установочного образа (удобно использовать Balena etcher), подключаемся с помощью SSH, VNC или локально, если имеется внешний монитор, например, с HDMI адаптером. Если используется портативный LCD дисплей, лучше запитывать его от отдельного источника питания USB, так как потребление тока может превышать 2 Ампера, что нежелательно для питания от микрокомпьютера напрямую.

Охлаждение

Основной нагрузкой на процессор, при организации сида BitTorrent, является вычисление Info Hash при создании и валидации содержимого раздач (что в прочем можно оптимизировать в настройках выбранного клиента).

Поэтому желательно установить на модули процессора, питания и памяти дополнительные радиаторы пассивного охлаждения, которые можно приобрести в радио-любительских магазинах. В операционной системе Linux, контроль температуры датчиков удобно осуществлять с помощью утилиты sensors, установить которую можно командой:

apt install lm-sensors

Расширение памяти

Программное расширение

Если контроллер обладает малым объемом ОЗУ, расширить встроенную оперативную память можно с помощью файла подкачки на диске.

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

fallocate -l 2G /swapfile

назначаем права root

chmod 600 /swapfile

форматируем файл

mkswap /swapfile

после чего подключаем командой

swapon /swapfile

для подключения /swapfile при загрузке системы, добавим в /etc/fstab

# <file system>   <mount point>   <type>   <options>   <dump> <pass>
/swapfile         none            swap     sw          0      0

Память swap желательно размещать на легко заменяемых носителях с высокой скоростью записи/чтения.

Если накопитель используется также и для других нужд, важно предусмотреть отдельный раздел. На дисках HDD, желательно размещать swap в начале разделов.

Подробнее о подготовке внешнего носителя данных, можно прочитать в разделе Подготовка носителя

Хранение данных

Объем внутренней памяти устройства минимален и ориентирован для установки операционной системы и программного обеспечения к ней. Чтобы превратить компьютер в полноценный сервер файло-обмена, необходимо подключить внешний накопитель. Помимо расширения объема штатной памяти, внешний носитель удобен возможностью легкой замены, масштабированием или организацией массива RAID для ускорения операций чтения/записи, а также репликации данных.

Для небольшого файло-обменного сервера, может быть использована обычная USB «флешка» на 128 Gb или внешний HDD диск, например Seagate Basic STJL1000400 2.5 USB 3.0 с 1TB ST1000LM035-FR на борту.

Внешние SSD накопители имеют большую скорость обмена данными в мульти-поточном режиме, но бюджетные диски бытового класса особенно чувствительны к циклам записи. Для HDD характерны долговечность но вместе с тем, ограниченная скорость чтения данных, что заметно при нескольких одновременных подключениях к серверу или работой с реляционными базами данных.

Поскольку внешний накопитель будет использоваться для раздач BitTorrent, лучше отдать предпочтение HDD.

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

Внешний накопитель

Рассмотрим пример создания разделов и форматирования с помощью утилит parted и mkfs.

Подключаем накопитель и находим его в списке:

parted -l

В моем случае это /dev/sda, поэтому он будет указан в качестве примеров ниже и важно заменить актуальным, во избежание потери данных.

Переходим в редактирование разделов

parted /dev/sda

Документацию интерфейса можно получить командой

help mkpart

Указываем стандарт разметки, GPT

mklabel gpt

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

Поскольку не знаю, сколько места может потребоваться для каждого пользователя (планируется расширять память новыми устройствами аппаратно) создаю один общий логический раздел для директории /home и указываю размер 0-100%. Отступы (alignment) раздела при этом будут созданы автоматически.

mkpart logical ext4 0% 100%

Проверяем разметку разделов

print free

Если всё устраивает, сохраняем изменения командой

quit

Форматируем раздел, например в журналируемую файловую систему Ext4

mkfs -t ext4 /dev/sda1

Далее необходимо узнать UUID раздела командой

lsblk -o PATH,SIZE,RO,TYPE,MOUNTPOINT,UUID,MODEL

и для автоматического монтирования после запуска системы, указать в

/etc/fstab

результат должен быть примерно таким:

# <file system>                                 <mount point>       <type>      <options>                                                       <dump>  <pass>
UUID=cf3151b5-dc12-1248-95d4-4de43dga3273       /mnt/sda1           ext4        defaults,noatime,rw,user,auto                                   0       2
Пример подключения в home

Копируем данные пользователей, предварительно остановив все службы, работающие с домашним каталогом, например, qbittorent-nox

service qbittorent-nox stop

производим резервное копирование и удаляем каталог /home

cp /home /home.bak
rm -R /home 

монтируем диск

mount /dev/sda1 /home

копируем (или переносим) данные на носитель

cp /home.bak /home

каждому пользователю рекурсивно возвращаем права

chown -R qbittorent-nox:qbittorent-nox /home/qbittorent-nox

запускаем службы

service qbittorent-nox start

По аналогии, можно создать несколько разделов, задав при этом нужные точки монтирования.

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

Сетевой накопитель

Можно также подключить удалённый накопитель, расположенный на другом устройстве.

curlftpfs

Утилита для монтирования удалённой директории посредством FTP и CURL.

/usr/bin/curlftpfs -o allow_other ftp://user:password@[host]:21/source /target

Поскольку монтирование происходит от root, права доступа к ресурсу будут ограничены для остальных служб. Чтобы разрешить доступ к директории другим службам/пользователям, добавлен флаг -o allow_other.

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

[Service]
Type=forking
ExecStartPre=+/usr/bin/curlftpfs -o allow_other ftp://user:password@[host]:21/source /target
ExecStop=+/usr/bin/umount /target

* Знак «+» нужен для выполнения данных команд от root, в то время как основной сервис в ExecStart выполняется от своего пользователя.
* * Разрешить монтирование для других пользователей можно в файле /etc/fuse.conf раскомментировав параметр user_allow_other

Следует заметить, что curlftpfs имеет ряд недостатков, например очистка памяти, проблемы с правами доступа на виртуальных машинах и тд.

sshfs

Смонтировать сетевое устройство можно также с помощью SSH.

Подключение осуществляется с помощью пары ключей RSA или с помощью пароля одной командой:

/usr/bin/sshfs -o password_stdin user@server:/source '/target' <<< 'password'

К недостаткам такого метода можно отнести вопрос повышенных привилегий SSH и дополнительной нагрузки на процессор, особенно, если подключение к удалённому хосту происходит средствами Yggdrasil.

rclone

Многофункциональная утилита для синхронизации с популярными облачными платформами, также поддерживает различные протоколы - SSH, FTP и другие.

Для монтирования сетевого диска, используется команда rclone mount.

Прежде, чем смонтировать удалённый ресурс, необходимо настроить подключение с помощью rclone config

Монтирование:

/usr/bin/rclone mount remote:/source /target &
  • при операциях записи, необходимо включить минимальный уровень кеширования, указав флаг –vfs-cache-mode writes
  • при запуске через systemd, важно указывать путь к файлу профиля через –config
  • rclone, в отличии от других альтернатив, не требует запуска от администратора
  • пример локального зеркала FTP для qbittorrent-nox

Маршрутизация

В локальной сети, обычно, сидирующее устройство подключается к роутеру посредством интерфейса Ethernet, не занимая при этом эфир Wifi.

При одновременном сидировании в различные сети, в том числе - интернет, обойти ограничения NAT и расширить географию раздач можно добавлением интерфейса VPN, например с помощью CLI установщика OpenVPN. Таким образом, раздачи будут осуществляться на интерфейсы eth0 (ISP), tun0 (Yggdrasil), tun1 (VPN) и т.д.

Использование каналов можно проверить с помощью утилиты ifstat

* Проброс портов и активация UPnP на роутере для работы BitTorrent-сервера в сети Yggdrasil не требуется.

Сервер на базе qBittorrent

Общая информация о клиенте, доступна в разделе qBittorrent

Устанавливаем серверный клиент qbittorrent-nox

apt install qbittorrent-nox

добавляем пользователя

adduser --system --group qbittorrent-nox

настраиваем авто-запуск

nano /etc/systemd/system/qbittorrent-nox.service
[Unit]
Description=qBittorrent Command Line Client
After=network.target

[Service]
Type=forking
User=qbittorrent-nox
Group=qbittorrent-nox
UMask=007
ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8080
Restart=on-failure

[Install]
WantedBy=multi-user.target

* чтобы ограничить использование памяти, можно добавить лимиты в секцию [Service]:

MemoryHigh=256M
MemoryMax=512M
MemorySwapMax=512M

активируем

systemctl enable qbittorrent-nox

запускаем

systemctl start qbittorrent-nox

проверяем сервис и порт

systemctl status qbittorrent-nox
netstat -tupnl | grep 8080

добавляем правила iptables для подключения к веб-панели

ufw allow from ADMIN_REMOTE_IP to any port 8080

заходим в админ-панель указав admin/adminadmin в качестве логина по-умолчанию

http://SEED_SERVER_IP:8080

указываем базовые настройки

  • Connection → Listening Port - этот порт необходимо добавить в правила iptables для сидирования раздач в Yggdrasil (см. далее)
  • Speed → Global Rate Limits - ограничиваем скорость, чтобы сид-сервер не занимал весь пропускной канал на пиках
  • Web UI → Authentication → Username / Password - указываем логин пароль, отличный от стандартного
  • BitTorrent → Automatically add these trackers to new downloads - удобно указать адреса трекеров для автоматического добавления к загружаемым торрентам и магнет-ссылкам, например трекеры в сети Yggdrasil
  • Advanced → Always announce to all trackers, Always announce to all trackers in a tier - активируем работу со всеми доступными трекерами в списке каждого торрента (подробнее)
  • Advanced → qBittorrent Section → Optional IP address to bind to - IPv6 из списка, если хотим делиться только в сети Yggdrasil или оставляем по-умолчанию для раздач всем сетям (адрес своего узла в сети Yggdrasil можно получить с помощью команды yggdrasilctl getSelf)
  • Advanced → Enable embedded tracker - Включив данную опцию, можно активировать сервер торрент-трекера и опубликовать его в списке внутрисетевых сервисов (см. также Opentracker)

Сохраняем настройки и открываем Listening Port (для раздач в сеть интернет, достаточно поддержки роутером и наличия включённой опции UPnP)

ufw allow from 0200::/7 to any port [Listening Port]

данные профиля сохранены в директории пользователя qbittorrent-nox

/home/qbittorrent-nox/.config/qBittorrent

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

/home/qbittorrent-nox/.local/share/qBittorrent/logs
Расширение доступа

По умолчанию, qbittorrent-nox работает с файлами только в рамках собственного каталога /home/qbittorrent-nox

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

Для этого, добавляем пользователя qbittorrent-nox в соответствующую группу, указав флаг append:

usermod -a -G family qbittorrent-nox

Разрешаем bash в файле /etc/passwd

qbittorrent-nox:...:/home/qbittorrent-nox:/usr/bin/bash

Совместным каталогам группы family назначаем права не ниже 0770

Общий доступ к файлам

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

Таким образом, загрузив файл с одного устройства и продолжив его раздачу, можно открыть файл на другом, при этом не занимать дисковое пространство клиентской машины.

Файловые менеджеры различных дистрибутивов достаточно удобны в настройке.

Например в графической среде Gnome, в файловом менеджере переходим в левом меню + Other Locations и указываем в нижнем трее адрес подключения - ftp, ssh, smb или другой.

Соответственно на файловом сервере должно быть установлен и настроен соответствующий сервис, а также разрешено подключение в правилах iptables.

Обсуждение

Thunar, 2023/09/08 17:15, 2023/09/08 17:16
Просто небольшой коммент )
Для установки ОС на Raspberry Pi не обязательно наличие монитора, подключения по HDMI и т.п. На офф. сайте есть инструкция по разворачиванию ОС на флешке, подключенной к настольному компьютеру или ноутбуку. А дальше флешка вставляется в Raspberri и продолжить настройку можно по ssh или VNC.
У меня Raspberri уже довольно давно и я устанавливал и настраивал там много всякого и ниразу не использовал монитор :)
Кстати, Raspberry Pi OS Lite - это редакция Raspberry Pi OS без графической оболочки, что для сидбокса, возможно будет предпочтительнее, ввиду меньшего потребления ресурсов.
https://www.raspberrypi.com/software/operating-systems/

По системным требованиям: есть старенькая коробочка Synology с процессором на 1600 МГц и всего 256 Мб RAM, на ней установлена стандартная DSM 6 со множеством сервисов, включая DownloadStation на базе transmission, smbd, NFS, FTP etc - так вот, оно с такими параметрами вполне себе справляется со своими задачами без особых "затыков". Узкое место в моём случае - это пропускная способность канала провайдера. Для большого количества активных раздач это критично...

d4708, 2023/09/08 17:21, 2023/09/08 18:12
Да, можно и так, первичная установка происходит из предустановленного дистрибутива на внешнем накопителе и после базовых настроек, копируется на внутреннюю память. У меня просто этот LCD был изначально (так как планировал сделать опенсорсный тачпад) и фантазии проверить SSH не хватило, вместо чего еще долго прикручивал параметры дисплея, чтобы заставить его работать. Благо в последних релизах Armbian добавили его поддержку из коробки..

p.s. исправил зависимость от внешнего монитора, спасибо

Только авторизованные участники могут оставлять комментарии.
yggdrasil/bittorrent/seedbox.txt · Последнее изменение: 2023/10/24 06:40 — d4708
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki