Поднимаем DLNA-сервер в Fedora

Наверное, каждый, у кого имеется несколько устройств, способных воспроизводить мультимедиа-контент, задумывался о настройке стримингового сервиса в своей сети. В данной статье мы подробно рассмотрим, как можно это реализовать.

Введение

DLNA (Digital Living Network Alliance) — это стандарт, позволяющий в реальном времени транслировать любой мультимедиа-контент внутри локальной сети и отображать его на любых совместимых устройствах.

В настоящее время существует огромное количество реализаций DLNA серверов: как свободных, так и проприетарных. Мы же рассмотрим самый простой и быстрый на наш взгляд — minidlna.

Установка сервера

Для начала подключим репозитории RPM Fusion. Информацию о том, как это сделать, можно найти в данной статье.

Установим пакет minidlna:

sudo dnf install minidlna

Активируем и запустим его:

sudo systemctl enable --now minidlna.service

Настройка сервера

Все настройки расположены в файле /etc/minidlna.conf. Откроем его в любом текстовом редакторе с правами суперпользователя и внесём соответствующие правки:

sudoedit /etc/minidlna.conf

Воспользуемся примером уже настроенного и хорошо прокомментированного конфига:

# Порт для HTTP трафика (метаданные, служебная информация)
port=8200

# Список сетевых интерфейсов, которые должен слушать сервер.
# В закомментированном виде будет слушать все доступные.
#network_interface=eth0

# Пользователь, от имени которого будет запущен сервер.
user=minidlna

# Каталоги с мультимедиа-библиотекой. Если их более одного,
# необходимо добавить по одной на каждый.
# Допускается через запятую указать тип мультимедиа-контента,
# которое должно быть загружено из каждого каталога. Все прочие
# в нём будут игнорироваться.
# Допустимые типы контента:
#  * "A" - аудио-файлы;
#  * "V" - видео-файлы;
#  * "P" - изображения.
# Разрешается их комбинировать, например "AV" - импортировать
# из данного каталога аудио и видео, игнорируя изображения.
media_dir=V,/media/storage/Video
media_dir=A,/media/storage/Music
media_dir=P,/media/storage/Wallpapers

# Включение или отключения режима общей мультимедиа библиотеки
# (содержимое всех каталогов из media_dir будет объединено в
# один общий виртуальный).
merge_media_dirs=yes

# Название DLNA-сервера, которое будет отображаться
# на устройствах клиентов.
friendly_name=EasyCoding Home DLNA

# Каталог для хранения кэшей мультимедиа и различных метаданных.
db_dir=/var/cache/minidlna

# Каталог для хранения журналов работы мультимедиа-сервера.
log_dir=/var/log/minidlna

# Уровень детализации журналов работы.
log_level=general,artwork,database,inotify,scanner,metadata,http,ssdp,tivo=warn

# Имена файлов с обложками аудио-файлов. Minidlna будет искать их
# в каталогах с аудио и отображать на клиентах. Имена файлов
# регистрозависимы, а в качестве разделителя используется прямой слэш ("/").
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg

# Включение или отключение мониторинга каталогов медиа-библиотеки. Новые
# файлы будут добавляться в базу в реальном времени.
inotify=yes

# Включение или отключение режима стриминга .jpg и .mp3 файлов на TiVo
# с поддержкой HMO.
enable_tivo=no

# Включение или отключение режима жёсткого следования стандартам.
# Это может повлечь за собой пережатие контента в иной формат.
strict_dlna=no

# Страница сервера с MOTD в интрасети или Интернете (не обязательно).
#presentation_url=http://www.mylan/index.php

# Интервал опроса каталогов медиа-библиотеки если мониторинг включён.
notify_interval=900

# Серийный номер и идентификатор модели виртуального устройства сервера,
# который будет передаваться клиентам во время рукопожатия.
serial=15AC0D6F2
model_number=1

# Путь к локальному сокету minidlna.
minissdpdsocket=/var/run/minissdpd.sock

# Переопределение корневого каталога в структуре медиа-библиотеки.
# Допустимые значения:
#   + "." - стандартный контейнер;
#   + "B" - "просмотр каталога";
#   + "M" - "музыка";
#   + "V" - "видео";
#   + "P" - "изображения".
root_container=.

# Включение или отключение режима принудительности сортировки файлов в
# библиотеки вне зависимости от предпочтений клиентов.
force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title

# Максимальное количество одновременно подключённых клиентов.
max_connections=50

По окончании настройки обязательно перезапустим сервис:

sudo systemctl restart minidlna.service

Настройка межсетевого экрана

Для своей работы DLNA-сервер использует стандартные порты 8200/tcp (передача метаданных и работа с клиентами; основан на HTTP) и 1900/udp (непосредственно стриминг мультимедийного контенета). Откроем их средствами Firewalld:

sudo firewall-cmd --add-service=minidlna --permanent

Применим новые правила Firewalld:

sudo firewall-cmd --reload

Теперь minidlna сервер должен быть доступен для всех подключённых устройств внутри локальной сети.

Настройка медиа-библиотеки

В дистрибутиве Fedora по умолчанию применяется мандатная система контроля доступа SELinux, которая настроена на ограничение по принципу «запрещено всё, что не разрешено», поэтому minidlna не получит доступ к медиа-библиотеке если она распложена в одном из домашних каталогов пользователей.

В качестве оптимального решения рекомендуется размещать её на отдельном разделе, смонтированном например как /media/storage.