Домашний медиа-сервер (NAT + Samba + Torrent + DLNA) на платформе Ubuntu Server.

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

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

Несколько слов об аппаратной части. Если не планируется перекодировка медиаконтента силами сервера, то для обслуживания домашней сети вполне можно выбрать компактные mini-ITX решения на базе новых процессоров Intel Atom D2700/2500 или аналогичных решений от AMD. Это позволяет собрать компактную и практически бесшумную систему которую можно без труда разместить в любом удобном месте. Единственная сложность в этом случае - поиск дополнительной низкопрофильной сетевой карты.

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

Если же вы планируете работу с тяжелым FullHD материалом и не хотите идти на компромиссы, то отличным решением будут жесткие диски Seagate серии SV35, на сегодняшний день это лучшие для подобных задач из протестированных нами дисков. Необходимость в RAID массиве представляется нам сомнительной, если только вы не собираетесь хранить на сервере в единственном экземпляре домашний фото и видеоархив. 

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

Примерная схема домашней сети будет иметь вид:

Домашний медиа-сервер 

 

В специально отведенном месте находятся медиасервер и сетевое оборудование, туда же сведена сетевая разводка для стационарных клиентов, точка доступа Wi-Fi расположена с учетом получения наилучшей зоны покрытия и может быть подключена с использованием PoE, что избавит вас от необходимости отдельно подводить питание. С ней работают все мобильные устройства домашней сети и те из стационарных, подключение которых посредством кабеля затруднено. При этом необходимо помнить, что Wi-Fi канал делится между всеми клиентами и для стационарных устройств по возможности следует использовать проводную сеть.

Разобравшись с общими вопросами, перейдем к практической части. Наша задача: создать на базе Ubuntu Server 12.04 домашний медиасервер, который будет обеспечивать общий доступ в интернет, сетевое хранилище для медиаконтента и иных документов, торрент-клиент и DLNA-сервер для простого и удобного доступа к мультимедийному содержимому мобильных и бытовых устройств. Процесс настройки мы разделим на этапы, каждый из которых будет создавать отдельный сервис и если вам не требуется та и или иная функциональность, то вы можете их пропустить.

Общий доступ в интернет и сетевые службы (NAT + DHCP). 

Первым делом необходимо выполнить настройку сети. Будем считать что интерфейс eth0 у нас смотрит в сеть провайдера, а eth1 во внутреннюю сеть. Если провайдер предоставляет доступ в интернет посредством коммутируемого соединения, то вам потребуется настроить его дополнительно.

Сетевые настройки хранятся в /etc/network/interfaces, откроем его

sudo nano /etc/network/interfaces

и приведем к следующему виду:

 

auto eth0
  iface eth0 inet static
    address 192.168.3.106
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-nameservers 192.168.3.1

auto eth1
  iface eth1 inet static
    address 192.168.30.100
    netmask 255.255.255.0

post-up /etc/nat

Внимание! Настройки eth0 в нашем случае приведены исключительно в качестве примера, вам необходимо настроить данный интерфейс в соответствии с настройками вашего провайдера.

Последняя строка предназначена для автоматической загрузки правил iptables, которые будут располагаться в файле /etc/nat. Перезапустим сеть: 

sudo /etc/init.d/networking restart

В процессе перезапуска мы получим сообщение об ошибке, что /etc/nat не найден, которое можем смело проигнорировать. Если все было сделано правильно, то на сервере появится интернет. 

Установим последние обновления:

sudo apt-get update
sudo apt-get upgrade

и для удобства администрирования установим ssh и mc:

sudo apt-get install mc ssh

Теперь создадим /etc/nat

sudo touch /etc/nat 

и приступим к его редактированию:

#!/bin/sh

#Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
#Разрешаем траффик на lo
iptables -A INPUT -i lo -j ACCEPT
#Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
#Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.30.0/24 -j MASQUERADE
#Разрешаем ответы из внешней сети
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth0 -o eth1 -j REJECT

Сохраняем файл и делаем его исполняемым:

sudo chmod +x /etc/nat

Перезагружаем сервер:

sudo reboot

После выполнения вышеуказанных действий наш имеет доступ в интернет и может раздавать его во внутреннюю сеть. Однако клиенты все еще не могут автоматически получать сетевые настройки, для этого нам необходим DHCP-сервер. Мы рекомендуем пакет dnsmasq, который кроме DHCP-сервера содержит кеширующий DNS-прокси:

sudo apt-get install dnsmasq

Перейдем к настройке, для этого откроем файл /etc/dnsmasq.conf, найдем и зададим следующие опции:

address=/ubuntu-home.local/192.168.30.100

данная опция позволит обращаться к нашему серверу не по ip-адресу, а по понятному простым пользователям имени, в нашем случае ubuntu-home.local.

listen-address=127.0.0.1, 192.168.30.100

Задает адреса сетевых интерфейсов, на которых будет доступен DHCP и DNS сервер.

dhcp-range=192.168.30.150,192.168.30.250,255.255.255.0,12h

Указывает диапазон адресов выдаваемый DHCP сервером 192.168.30.150-250 и срок аренды - 12 часов. 

Это необходимый минимум настроек, перезапускаем службу:

sudo service dnsmasq restart

после чего пробуем получить сетевые настройки на клиентском устройстве и выйти с него в интернет. На этом первый этап можно считать завершенным. Устанавливать для домашней сети прокси-сервер (squid и т.п.) мы не видим смысла, так как никаких значительных преимуществ вы не получите.

Сетевое хранилище (Samba)

Одна из основных функций домашнего сервера, который должен обеспечивать хранение и легкий доступ к данным посредством протокола SMB, т.е. через привычные общие файлы и папки Windows. 

Установим сервер samba:

sudo apt-get install samba

затем откроем конфигурационный файл /etc/samba/smb.conf и приступим к настройкам.

В секции Global Settings укажем сетевое имя и рабочую группу в которую входят устройства вашей домашней сети:

workgroup = HOME
server string = %h server (Samba, Ubuntu)

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

В секции Networking укажем сетевые интерфейсы, на которых будет доступно сетевое хранилище:

interfaces = 127.0.0.0/8 eth1

В секции Authentication устанавливаем:

security = share

В конец секции Misc добавим строку включающую поддержку протокола SMB2:

max protocol = SMB2

Сохраним файл и закроем его. Теперь самое время создать папки для наших общих ресурсов. Мы будем хранить пользовательские данные в /data, где создадим для разного типа контента папки Backups, Documents, Downloads, Movies, Music и Pictures. Однако вам никто не мешает создать свои собственные папки. Для создания структуры каталогов выполним следующие команды:

sudo mkdir /data
sudo mkdir /data/Backups
sudo mkdir /data/Documents
...
sudo mkdir /data/Pictures 

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

sudo chmod 777 -R /data

Теперь снова откроем /etc/samba/smb.conf и создадим общие ресурсы. В самый конец конфигурационного файла добавим:

[Backups]
path = /data/Backups
guest ok = yes
writeable = yes

[Documents]
path = /data/Documents
guest ok = yes
writeable = yes
...

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

Создав все необходимые общие ресурсы перезапустим сервис:

sudo service smbd restart

Наш сервер должен появиться в сетевом окружении и зайдя на него мы должны увидеть созданные нами общие папки.

Домашний медиа-сервер

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

 

 

Торрент-клиент

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

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

Для установки серверной версии transmission выполните команду:

sudo apt-get install transmission-daemon

Перейдем к настройкам, которые хранятся в файле /etc/transmission-daemon/settings.json.

Внимание! transmission-daemon имеет одну неприятную особенность, если в момент изменения конфигурационного файла служба была запущена, то при повторном  запуске она откатит все внесенные изменения. Поэтому все настройки следует производить только при остановленной службе!

Остановим службу:

sudo service transmission-daemon stop

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

Прежде всего определимся с рабочими директориями. Загруженные торренты будем помещать в уже существующую папку Downloads (/data/Downloads). Для самих торрент-файлов создадим специальную папку Torrents, содержимое которой будет отслеживаться нашим клиентом и при появлении в ней нового торрент-файла загрузка будет начинаться автоматически. В этой же папке создадим скрытую директорию для недокачаных торрентов .incomplete, чтобы они не смущали ваших домашних и были бы им недоступны до момента полной закачки.

Создадим директории и установим нужные права:

sudo mkdir /data/Torrents
sudo mkdir /data/Torrents/.incomplete
sudo chmod 777 -R /data/Torrents

Обращаем внимание, что точка в начале имени файла или папки делает его скрытым. Теперь откроем /etc/samba/smb.conf и добавим еще один общий ресурс:

[Torrents]
  path = /data/Torrents
  guest ok = yes
  writeable = yes

Перезапустим Samba:

sudo service smbd restart

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

Домашний медиа-сервер

Создав необходимую структуру директорий перейдем к настройке торрент-клиента, откроем  /etc/transmission-daemon/settings.json и начнем его редактирование. Первым делом включим веб интерфейс и зададим параметры доступа к нему:

"rpc-authentication-required": true
"rpc-bind-address": "192.168.30.100"
"rpc-enabled": true
"rpc-password": "password"
"rpc-port": 9091
"rpc-url": "/transmission/"
"rpc-username": "transmission"
"rpc-whitelist": "127.0.0.1,192.168.30.*"
"rpc-whitelist-enabled": true

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

Настроим директории: 

"download-dir": "/data/Downloads"
"incomplete-dir": "/data/Torrents/.incomplete"
"incomplete-dir-enabled": true

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

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

"watch-dir": "/data/Torrents"
"watch-dir-enabled": true

После чего настроим торрент-опции:

"dht-enabled": true
"peer-port": 51413,
"port-forwarding-enabled": true,
"utp-enabled": true

Данные настройки включают DHT, указывают порт, на котором следует принимать входящие соединения, включает автоматический форвардинг портов с использованием UPnP или NAT-PMP, что позволяет принимать входящие соединения даже находясь за NAT и, последняя опция, включает протокол µTP.

Сохраняем файл и, на всякий случай, делаем его резервную копию:

sudo cp -f  /etc/transmission-daemon/settings.json  /etc/transmission-daemon/settings.bak

Теперь можно запустить службу:

sudo service transmission-daemon start

и зайти в веб-интерфейс, набрав в браузере адрес http://ubuntu-home.local:9091. Для проверки поместим в общую папку Torrents торрент-файл, если все сделано правильно то к его имени добавится расширение added и начнется закачка, а в папке .incompleted появится закачиваемый торрент.

u04

 Также можно добавлять торренты через веб-интерфейс, выбирая файл на компьютере или указывая URL-адрес.

u04

Для того, чтобы наш торрент-клиент мог принимать внешние подключения разрешим входящие соединения на порт 51413, для этого добавим в /etc/nat строки:

#Разрешаем входящие torrent
iptables -A INPUT -p tcp --dport 51413 -j ACCEPT
iptables -A INPUT -p udp --dport 51413 -j ACCEPT

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

u05

На этом настройку торрент-клиента можно считать законченной и переходить к следующему этапу.

DLNA-сервер

Что такое DLNA? Это сокращение от Digital Living Network Alliance, под которым скрывается набор стандартов для обмена медиаконтентом для совместимых устройств. DLNA позволяет пользователям легко и прозрачно получать доступ к мультимедийному содержимому сети с любого устройства (телевизор, планшет. ноутбук и т.п.) не задумываясь о технической стороне  вопроса, работа сводится к оперированию привычными понятиями: музыка, видео, изображения и выборе необходимого контента из структурированного каталога.

В качестве DLNA-сервера мы будем использовать MediaTomb. Установим пакет:

sudo apt-get install mediatomb

Если вы хотите отображать фильмы в виде превью, то установите еще два пакета:

sudo apt-get install ffmpeg ffmpegthumbnailer

Сразу укажем сетевые интерфейсы на которых будет работать сервис, для этого в файле /etc/default/mediatomb найдем и зададим опцию:

INTERFACE="eth1"

Основные настройки медиасервера хранятся в /etc/mediatomb/config.xml. Настроек немного, сначала включим веб-интерфейс и зададим параметры доступа к нему:

<ui enabled="yes" show-tooltips="yes">
      <accounts enabled="yes" session-timeout="30">
        <account user="mediatomb" password="mediatomb"/>

Укажем имя сервера и корневой каталог для медиаконтента:

<name>Ubuntu Home</name>
<home>/data</home>

Включим превью при отображении фильмов:

<ffmpegthumbnailer enabled="yes">

Ниже идут опции отвечающие за размер и место фильма, откуда будет взята картинка, при желании можете поэкспериментировать с ними. Остальные настройки оставляем по умолчанию. Перезапускаем сервис:

sudo service mediatomb restart

Теперь в сетевом окружении мы можем увидеть значок медиасервера.

u06

Но подключаться к нему еще рано, необходимо создать библиотеки мультимедиа. Для этого зайдем в веб-интерфейс http://ubuntu-home.local:49152 и перейдем к дереву файловой системы. Выбрав папку с мультимедийным контентом можем добавить ее в библиотеку нажав на кнопку "плюс" справа или задать режим регулярного сканирования папки нажав на соседнюю кнопку где плюс изображен в окружении стрелочек.

u07

Для работы с медиасервером можно использовать любой поддерживающий DNLA клиент. Например Windows Media Center, работа с ним очень проста и не вызовет затруднений даже у  неподготовленного пользователя. Добавляем библиотеку:

u09

Просматриваем содержимое:

u09

Однако посмотреть фильм или послушать музыку у нас не получится, Media Center не знаком с flac и не умеет показывать mkv, с аналогичными ограничениями вы можете сталкиваться и в других клиентах. Вариантов решения проблемы может быть несколько: выбор поддерживаемых форматов для медиафайлов, перекодировка мультимедийного содержимого сервером или использование клиентов поддерживающих более широкий спектр форматов.

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

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

u10

Затем смотрим кино:

u11

 или слушаем музыку:

u13

Как видим, в течении всего одного вечера можно создать на базе Ubuntu Server простой и удобный медиасервер, который станет центром вашей домашней сети.

 

Яндекс.Метрика