How to Wiki Database (change log)
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
450 lines
26 KiB
450 lines
26 KiB
====== Сидбокс ====== |
|
|
|
Сидбокс (англ. Seedbox) - частное автономное устройство, выполняющее функцию сбора, хранения и распространения данных или сетевых мета-данных (информации об узлах) другим узлам в сети. |
|
|
|
Зачастую реализуется на базе одноплатного компьютера, в виду низкой энергозатратности и отсутствием шума. |
|
|
|
В отличии от десктоп сидирования, устройство обеспечивает высокий показатель up-time. |
|
|
|
===== Примеры устройств ===== |
|
|
|
{{:yggdrasil:bittorrent:seedbox:orange-pi-pc-plus-1tb-seed-box.png?200|OrangePi PC Plus / 1 Tb}} {{:yggdrasil:bittorrent:seedbox:orange-pi-pc-plus-1tb-seed-box-side-view.png?196|OrangePi PC Plus / 1 Tb}} |
|
|
|
===== Сидбоксинг ===== |
|
|
|
Культура и сообщество энтузиастов, мотивированных свободой обмена данными: метео, bittorrent, и другие направления. |
|
|
|
===== Yggdrasil ===== |
|
|
|
Yggdrasil является отличным инструментом для организации сид-сервера, без необходимости аренды выделенного IP адреса или порта; |
|
сквозное шифрование обеспечивает защиту трафика, повышая устойчивость к прослушиванию и блокировкам со стороны провайдеров. |
|
|
|
Программное обеспечение может быть использовано как для нужд сидирования непосредственно в локальную сеть Yggdrasil, так и в качестве шлюза-ретранслятора данных между удаленными точками, находящихся за NAT или чувствительных к мониторингу трафика. |
|
|
|
Поскольку Yggdrasil обеспечивает соединение пиров путем туннелирования, не нужно настраивать маршрутизацию (проброс) портов на роутере, активировать опцию UPnP, достаточно разрешить выданный BitTorrent клиентом порт в настройках фаервол (при использовании модели whitelist) |
|
|
|
===== Аппаратная часть ===== |
|
|
|
==== Контроллер ==== |
|
|
|
=== Выбор устройства === |
|
|
|
Для организации раздач в локальной сети Yggdrasil, требования к производительности минимальны, в большинстве случаев подойдет ARM платформа с 1 Гб оперативной памяти и внешним накопителем. |
|
|
|
Использование для этой цели старого ноутбука, с постоянно подключенным зарядным устройством нежелательно для АКБ, если в устройстве не предусмотрен аппаратный модуль активной зарядки, обеспечивающий питание устройства напрямую, в случае, когда аккумулятор заряжен. |
|
|
|
Оптимальным выбором для создания сид-бокса будет [[https://www.raspberrypi.com/|Raspbery Pi]]. Из бюджетных вариантов, существует множество альтернатив, например для BitTorrent раздач подойдет [[http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-PC-Plus.html|Orange Pi PC Plus]], имеющий на борту процессор Allwinner H3 SoC Quad-core Cortex-A7, 1GB LPDDR3 SDRAM и встроенную память 8GB eMMC Flash. |
|
|
|
=== Операционные системы === |
|
|
|
Обычно для обслуживания сид-сервера, используется операционные системы семейства Linux. |
|
|
|
Например, Orange Pi [[http://www.orangepi.org/html/serviceAndSupport|предоставляет]] для загрузки свои официальные образы - Android, Linux, и другие, с адаптацией под характеристики каждой модели. |
|
|
|
Также, существуют независимые проекты с открытым исходным кодом для множества устройств, например [[https://www.armbian.com/|Armbian]], [[https://dietpi.com/|DietPi]] и другие. |
|
|
|
Не смотря на то, что большинство одноплатных компьютеров поставляется с предустановленной ОС, лучше установить последнюю версию подходящего для своих нужд дистрибутива. |
|
|
|
Для установки операционной системы, после создания установочного образа (удобно использовать [[https://etcher.balena.io|Balena etcher]]), подключаемся с помощью SSH, VNC или локально, если имеется внешний монитор, например, с HDMI адаптером. |
|
Если используется портативный LCD дисплей, лучше запитывать его от отдельного источника питания USB, так как потребление тока может превышать 2 Ампера, что нежелательно для питания от микрокомпьютера напрямую. |
|
|
|
|
|
=== Охлаждение === |
|
|
|
Основной нагрузкой на процессор, при организации сида BitTorrent, является вычисление Info Hash при создании и валидации содержимого раздач (что в прочем можно оптимизировать в настройках выбранного клиента). |
|
|
|
Поэтому желательно установить на модули процессора, питания и памяти дополнительные радиаторы пассивного охлаждения, которые можно приобрести в радио-любительских магазинах. |
|
В операционной системе Linux, контроль температуры датчиков удобно осуществлять с помощью утилиты sensors, установить которую можно командой: |
|
|
|
<code> |
|
apt install lm-sensors |
|
</code> |
|
|
|
=== Расширение памяти === |
|
|
|
== Программное расширение == |
|
|
|
Если контроллер обладает малым объемом ОЗУ, расширить встроенную оперативную память можно с помощью файла подкачки на диске. |
|
|
|
Чтобы добавить раздел swap на встроенную память, выполняем команды |
|
|
|
<code> |
|
fallocate -l 2G /swapfile |
|
</code> |
|
|
|
назначаем права root |
|
|
|
<code> |
|
chmod 600 /swapfile |
|
</code> |
|
|
|
форматируем файл |
|
|
|
<code> |
|
mkswap /swapfile |
|
</code> |
|
|
|
после чего подключаем командой |
|
|
|
<code> |
|
swapon /swapfile |
|
</code> |
|
|
|
для подключения /swapfile при загрузке системы, добавим в /etc/fstab |
|
|
|
<code> |
|
# <file system> <mount point> <type> <options> <dump> <pass> |
|
/swapfile none swap sw 0 0 |
|
</code> |
|
|
|
Память swap желательно размещать на легко заменяемых носителях с высокой скоростью записи/чтения. |
|
|
|
Если накопитель используется также и для других нужд, важно предусмотреть отдельный раздел. На дисках HDD, желательно размещать swap в начале разделов. |
|
|
|
Подробнее о подготовке внешнего носителя данных, можно прочитать в разделе [[yggdrasil:bittorrent:seedbox#подготовка_носителя|Подготовка носителя]] |
|
|
|
==== Хранение данных ==== |
|
|
|
Объем внутренней памяти устройства минимален и ориентирован для установки операционной системы и программного обеспечения к ней. Чтобы превратить компьютер в полноценный сервер файло-обмена, необходимо подключить внешний накопитель. |
|
Помимо расширения объема штатной памяти, внешний носитель удобен возможностью легкой замены, масштабированием или организацией массива RAID для ускорения операций чтения/записи, а также репликации данных. |
|
|
|
Для небольшого файло-обменного сервера, может быть использована обычная USB "флешка" на 128 Gb или внешний HDD диск, например Seagate Basic STJL1000400 2.5 USB 3.0 с 1TB ST1000LM035-FR на борту. |
|
|
|
Внешние SSD накопители имеют большую скорость обмена данными в мульти-поточном режиме, но бюджетные диски бытового класса особенно чувствительны к циклам записи. |
|
Для HDD характерны долговечность но вместе с тем, ограниченная скорость чтения данных, что заметно при нескольких одновременных подключениях к серверу или работой с реляционными базами данных. |
|
|
|
Поскольку внешний накопитель будет использоваться для раздач BitTorrent, лучше отдать предпочтение HDD. |
|
|
|
Для надежности хранения и обеспечения целостности данных при аварийных отключениях питания, предпочтительнее использовать журналируемую файловую систему, например Ext4. |
|
|
|
=== Внешний накопитель === |
|
|
|
Рассмотрим пример создания разделов и форматирования с помощью утилит parted и mkfs. |
|
|
|
Подключаем накопитель и находим его в списке: |
|
|
|
<code> |
|
parted -l |
|
</code> |
|
|
|
В моем случае это /dev/sda, поэтому он будет указан в качестве примеров ниже и важно заменить актуальным, во избежание потери данных. |
|
|
|
Переходим в редактирование разделов |
|
|
|
<code> |
|
parted /dev/sda |
|
</code> |
|
|
|
Документацию интерфейса можно получить командой |
|
|
|
<code> |
|
help mkpart |
|
</code> |
|
|
|
Указываем стандарт разметки, GPT |
|
|
|
<code> |
|
mklabel gpt |
|
</code> |
|
|
|
В зависимости от целей и способа монтирования диска, можно создать несколько разделов. |
|
|
|
|
|
Поскольку не знаю, сколько места может потребоваться для каждого пользователя (планируется расширять память новыми устройствами аппаратно) |
|
создаю один общий логический раздел для директории /home и указываю размер 0-100%. Отступы (alignment) раздела при этом будут созданы автоматически. |
|
|
|
<code> |
|
mkpart logical ext4 0% 100% |
|
</code> |
|
|
|
Проверяем разметку разделов |
|
|
|
<code> |
|
print free |
|
</code> |
|
|
|
Если всё устраивает, сохраняем изменения командой |
|
|
|
<code> |
|
quit |
|
</code> |
|
|
|
Форматируем раздел, например в журналируемую файловую систему Ext4 |
|
|
|
<code> |
|
mkfs -t ext4 /dev/sda1 |
|
</code> |
|
|
|
Далее необходимо узнать UUID раздела командой |
|
|
|
<code> |
|
lsblk -o PATH,SIZE,RO,TYPE,MOUNTPOINT,UUID,MODEL |
|
</code> |
|
|
|
и для автоматического монтирования после запуска системы, указать в |
|
|
|
<code> |
|
/etc/fstab |
|
</code> |
|
|
|
результат должен быть примерно таким: |
|
|
|
<code> |
|
# <file system> <mount point> <type> <options> <dump> <pass> |
|
UUID=cf3151b5-dc12-1248-95d4-4de43dga3273 /mnt/sda1 ext4 defaults,noatime,rw,user,auto 0 2 |
|
</code> |
|
|
|
== Пример подключения в home == |
|
|
|
Копируем данные пользователей, предварительно остановив все службы, работающие с домашним каталогом, например, qbittorent-nox |
|
|
|
<code> |
|
service qbittorent-nox stop |
|
</code> |
|
|
|
производим резервное копирование и удаляем каталог /home |
|
|
|
<code> |
|
cp /home /home.bak |
|
rm -R /home |
|
</code> |
|
|
|
монтируем диск |
|
|
|
<code> |
|
mount /dev/sda1 /home |
|
</code> |
|
|
|
копируем (или переносим) данные на носитель |
|
|
|
<code> |
|
cp /home.bak /home |
|
</code> |
|
|
|
каждому пользователю рекурсивно возвращаем права |
|
|
|
<code> |
|
chown -R qbittorent-nox:qbittorent-nox /home/qbittorent-nox |
|
</code> |
|
|
|
запускаем службы |
|
|
|
<code> |
|
service qbittorent-nox start |
|
</code> |
|
|
|
По аналогии, можно создать несколько разделов, задав при этом нужные точки монтирования. |
|
|
|
Желательно размещать swap, временные файлы и журналы на внешних дисках для увеличения срока эксплуатации внутренней памяти микрокомпьютера. |
|
|
|
=== Сетевой накопитель === |
|
|
|
Можно также подключить удалённый накопитель, расположенный на другом устройстве. |
|
|
|
== curlftpfs == |
|
|
|
Утилита для монтирования удалённой директории посредством FTP и CURL. |
|
|
|
<code> |
|
/usr/bin/curlftpfs -o allow_other ftp://user:password@[host]:21/source /target |
|
</code> |
|
|
|
Поскольку монтирование происходит от root, права доступа к ресурсу будут ограничены для остальных служб. Чтобы разрешить доступ к директории другим службам/пользователям, добавлен флаг -o allow_other. |
|
|
|
Для подключения диска при авто-запуске, можно использовать crontab, fstab и другие утилиты, но в виду зависимости использующего софта от этой директории, лучше всего добавить команды в инициализацию сервиса: |
|
|
|
<code> |
|
[Service] |
|
Type=forking |
|
ExecStartPre=+/usr/bin/curlftpfs -o allow_other ftp://user:password@[host]:21/source /target |
|
ExecStop=+/usr/bin/umount /target |
|
</code> |
|
|
|
* //Знак "+" нужен для выполнения данных команд от root, в то время как основной сервис в ExecStart выполняется от своего пользователя.//\\ |
|
* * //Разрешить монтирование для других пользователей можно в файле /etc/fuse.conf раскомментировав параметр user_allow_other// |
|
|
|
Следует заметить, что curlftpfs имеет ряд недостатков, например очистка памяти, проблемы с правами доступа на виртуальных машинах и тд. |
|
|
|
== sshfs == |
|
|
|
Смонтировать сетевое устройство можно также с помощью SSH. |
|
|
|
Подключение осуществляется с помощью пары ключей RSA или с помощью пароля одной командой: |
|
|
|
<code> |
|
/usr/bin/sshfs -o password_stdin user@server:/source '/target' <<< 'password' |
|
</code> |
|
|
|
К недостаткам такого метода можно отнести вопрос повышенных привилегий SSH и дополнительной нагрузки на процессор, особенно, если подключение к удалённому хосту происходит средствами Yggdrasil. |
|
|
|
== rclone == |
|
|
|
Многофункциональная утилита для синхронизации с популярными облачными платформами, также поддерживает различные протоколы - SSH, FTP и другие. |
|
|
|
Для монтирования сетевого диска, используется команда [[https://rclone.org/commands/rclone_mount|rclone mount]]. |
|
|
|
Прежде, чем смонтировать удалённый ресурс, необходимо настроить подключение с помощью [[https://rclone.org/commands/rclone_config/|rclone config]] |
|
|
|
Монтирование: |
|
|
|
<code> |
|
/usr/bin/rclone mount remote:/source /target & |
|
</code> |
|
|
|
* при операциях записи, необходимо включить минимальный уровень кеширования, указав флаг //--vfs-cache-mode writes// |
|
* при запуске через systemd, важно указывать путь к файлу профиля через //--config// |
|
* rclone, в отличии от других альтернатив, не требует запуска от администратора |
|
* пример локального зеркала [[yggdrasil:bittorrent:yggtracker:v2#rclone|FTP для qbittorrent-nox]] |
|
|
|
===== Маршрутизация ===== |
|
|
|
В локальной сети, обычно, сидирующее устройство подключается к роутеру посредством интерфейса Ethernet, не занимая при этом эфир Wifi. |
|
|
|
При одновременном сидировании в различные сети, в том числе - интернет, обойти ограничения NAT и расширить географию раздач можно добавлением интерфейса VPN, например с помощью [[https://github.com/angristan/openvpn-install|CLI установщика OpenVPN]]. |
|
Таким образом, раздачи будут осуществляться на интерфейсы eth0 (ISP), tun0 (Yggdrasil), tun1 (VPN) и т.д. |
|
|
|
Использование каналов можно проверить с помощью утилиты ifstat |
|
|
|
* Проброс портов и активация UPnP на роутере для работы BitTorrent-сервера в сети Yggdrasil не требуется. |
|
|
|
===== Сервер на базе qBittorrent ===== |
|
|
|
<WRAP round info 60%> |
|
Общая информация о клиенте, доступна в разделе [[yggdrasil:bittorrent:qbittorrent|qBittorrent]] |
|
</WRAP> |
|
|
|
Устанавливаем серверный клиент qbittorrent-nox |
|
|
|
<code> |
|
apt install qbittorrent-nox |
|
</code> |
|
|
|
добавляем пользователя |
|
|
|
<code> |
|
adduser --system --group qbittorrent-nox |
|
</code> |
|
|
|
настраиваем авто-запуск |
|
|
|
<code> |
|
nano /etc/systemd/system/qbittorrent-nox.service |
|
</code> |
|
|
|
<code> |
|
[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 |
|
</code> |
|
|
|
* чтобы ограничить использование памяти, можно добавить лимиты в секцию [Service]: |
|
|
|
<code> |
|
MemoryHigh=256M |
|
MemoryMax=512M |
|
MemorySwapMax=512M |
|
</code> |
|
|
|
активируем |
|
|
|
<code> |
|
systemctl enable qbittorrent-nox |
|
</code> |
|
|
|
запускаем |
|
|
|
<code> |
|
systemctl start qbittorrent-nox |
|
</code> |
|
|
|
проверяем сервис и порт |
|
|
|
<code> |
|
systemctl status qbittorrent-nox |
|
netstat -tupnl | grep 8080 |
|
</code> |
|
|
|
добавляем правила iptables для подключения к веб-панели |
|
|
|
<code> |
|
ufw allow from ADMIN_REMOTE_IP to any port 8080 |
|
</code> |
|
|
|
заходим в админ-панель указав admin/adminadmin в качестве логина по-умолчанию |
|
|
|
<code> |
|
http://SEED_SERVER_IP:8080 |
|
</code> |
|
|
|
указываем базовые настройки |
|
|
|
* **Connection → Listening Port** - этот порт необходимо добавить в правила iptables для сидирования раздач в Yggdrasil (см. далее) |
|
* **Speed → Global Rate Limits** - ограничиваем скорость, чтобы сид-сервер не занимал весь пропускной канал на пиках |
|
* **Web UI → Authentication → Username / Password** - указываем логин пароль, отличный от стандартного |
|
* **BitTorrent → Automatically add these trackers to new downloads** - удобно указать адреса трекеров для автоматического добавления к загружаемым торрентам и магнет-ссылкам, например [[yggdrasil:sites_and_services:other_network_services#torrent|трекеры в сети Yggdrasil]] |
|
* **Advanced → Always announce to all trackers, Always announce to all trackers in a tier** - активируем работу со всеми доступными трекерами в списке каждого торрента ([[yggdrasil:bittorrent:qbittorrent#зависание_скачиваний|подробнее]]) |
|
* **Advanced → qBittorrent Section → Optional IP address to bind to** - IPv6 из списка, если хотим делиться только в сети Yggdrasil или оставляем по-умолчанию для раздач всем сетям (адрес своего узла в сети Yggdrasil можно получить с помощью команды yggdrasilctl getSelf) |
|
* **Advanced → Enable embedded tracker** - Включив данную опцию, можно активировать сервер торрент-трекера и опубликовать его в списке [[yggdrasil:sites_and_services:other_network_services#torrent|внутрисетевых сервисов]] (см. также [[yggdrasil:bittorrent:opentracker|Opentracker]]) |
|
|
|
Сохраняем настройки и открываем Listening Port (для раздач в сеть интернет, достаточно поддержки роутером и наличия включённой опции UPnP) |
|
|
|
<code> |
|
ufw allow from 0200::/7 to any port [Listening Port] |
|
</code> |
|
|
|
данные профиля сохранены в директории пользователя qbittorrent-nox |
|
|
|
<code> |
|
/home/qbittorrent-nox/.config/qBittorrent |
|
</code> |
|
|
|
в частности, журналы для отладки проблем |
|
|
|
<code> |
|
/home/qbittorrent-nox/.local/share/qBittorrent/logs |
|
</code> |
|
|
|
== Расширение доступа == |
|
|
|
По умолчанию, qbittorrent-nox работает с файлами только в рамках собственного каталога /home/qbittorrent-nox |
|
|
|
Чтобы позволить клиенту оперировать файлами в других каталогах, например, с внешним монтированием или файлами общего пользователя family, приложению необходимо расширить стандартный уровень доступа. |
|
|
|
|
|
Для этого, добавляем пользователя qbittorrent-nox в соответствующую группу, указав флаг append: |
|
|
|
<code> |
|
usermod -a -G family qbittorrent-nox |
|
</code> |
|
|
|
Разрешаем bash в файле /etc/passwd |
|
|
|
<code> |
|
qbittorrent-nox:...:/home/qbittorrent-nox:/usr/bin/bash |
|
</code> |
|
|
|
Совместным каталогам группы family назначаем права не ниже 0770 |
|
|
|
===== Общий доступ к файлам ===== |
|
|
|
Помимо раздачи файлов посредством BitTorrent, сидбокс может выполнять функцию домашнего мультимедиа-сервера для общего хранения файлов между устройствами. |
|
|
|
Таким образом, загрузив файл с одного устройства и продолжив его раздачу, можно открыть файл на другом, при этом не занимать дисковое пространство клиентской машины. |
|
|
|
|
|
Файловые менеджеры различных дистрибутивов достаточно удобны в настройке. |
|
|
|
Например в графической среде Gnome, в файловом менеджере переходим в левом меню **+ Other Locations** и указываем в нижнем трее адрес подключения - ftp, ssh, smb или другой. |
|
|
|
Соответственно на файловом сервере должно быть установлен и настроен соответствующий сервис, а также разрешено подключение в правилах iptables.
|
|
|