Домашній сервер з нуля

Коли можливості штатного роутера з «openwrt» на борту були остаточно виснажені і завантаження процесора почала впливати на стабільність роботи мережі, було вирішено розвантажити трудягу перенесенням функціоналу на домашній сервер. В виду того, що залізниця буде на кілька порядків потужніші, було вирішено забезпечити її купою додаткових можливостей, які дідку навіть і не снилися. Корпус також було вирішено робити самостійно.

Список завдань, які виконує домашній сервер:

  1. Сервер віртуалізації на базі virtualbox c WebGUI;
  2. Міжмережевий екран;
  3. Торрент-качалка на базі transmission і файловий сервер;
  4. Сервер телефонії на базі Asterisk;
  5. TFTP сервер для завантаження по мережі і налаштування різного обладнання;
  6. Приватне хмара для зберігання файлів на базі «owncloud»;
  7. HTTP проксі Ace Stream для перегляду TorrentTV;
  8. Хостинг для домашнього сайту c доступом по https;
Фото для залучення уваги:



Глава 1. Створення корпусу, збірка
Основні функціональні можливості описані, приступаємо до вибору заліза для всього цього господарства.

Після довгих роздумів і пари тестів були куплені такі комплектуючі:
  1. Материнська плата msi j1800i формату Mini-ITX;
  2. 2 планки пам'яті DDR3 2 Гб;
  3. Блок живлення на 230 Вт;
  4. 2 жорстких диска 2.5' на 320 Гб, були в наявності;
  5. Роутер tp-link 1043ND був в наявності (Було шкода викидати);


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

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

У підсумку вийшло наступні












Глава II. Налаштування
З залізної частиною розібралися, тепер пора приступити до налаштування функціоналу. У якості ОС була обрана 64 розрядна «Debian 7 netinstall», в процесі установки диски були об'єднані в програмний RAID0. Передбачаючи холівар на тему відмовостійкості всі важливі дані лежать в хмарах, так що при відмові диска розгорнути систему з резервної копії можна досить швидко.

Система встановлена, приступаємо до реалізації вищевказаного плану.

2.1 Сервер віртуалізації на базі virtualbox c WebGUI
Для максимального використання ресурсів " заліза потрібно встановити сервер віртуалізації, в даному випадку застосовується програмний пакет virtualbox.

Установка virtualbox + phpvirtualboxВстановлюємо сервер віртуалізації virtualbox, на наш сервер, для початку додамо репозитарій і ключі до нього:

deb http://download.virtualbox.org/virtualbox/debian wheezy contrib non-free
wget-q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | apt-key add –


Оновлюємо репозитарій і запускаємо установку virtualbox:

aptitude update
aptitude install virtualbox-4.3

Встановлюємо розширення для virtualbox:

wget http://download.virtualbox.org/virtualbox/4.3.14/Oracle_VM_VirtualBox_Extension_Pack-4.3.14.vbox-extpack
VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.3.12.vbox-extpack

Перезавантажуємо сервіс vboxweb-service командами:

/etc/init.d/vboxweb-stop service
/etc/init.d/vboxweb-service start

Для роботи Virtualbox необхідно створити користувача, під яким будуть працювати віртуальні машини.

Додаємо користувача vbox:

adduser vbox

Установка phpvirtualbox
Для початку встановимо apache і php:

apt-get install apache php

Завантажуємо phpvirtualbox:

wget-c-t0 http://optimate.dl.sourceforge.net/project/phpvirtualbox/phpvirtualbox-4.3-2.zip

Розпаковуємо вміст архіву phpvirtualbox-4.3-2.zip в папку веб сервера:

unzip phpvirtualbox-4.3-2.zip 

Перевантажуємо веб сервер:

/etc/init.d/apache2 restart

Переходимо в директорію phpvirtualbox в папці веб сервера і створюємо конфігураційний файл:

mv config.php-example config.php

Вносимо деякі правки:

nano config.php
var $username = 'vbox';
var $password = 'Пароль при створенні облікового запису vbox'; 
var $location = 'http://IP Адреса цієї машини:18083/';
var $consoleHost = 'IP Адреса цієї машини';

Редагуємо конфігураційний фаил virtualbox:

echo 'VBOXWEB_USER=vbox
VBOXWEB_HOST= IP Адреса цієї машини
VBOXWEB_PORT=18083 ' > /etc/default/virtualbox

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

/etc/init.d/vboxweb-service restart

Відкриваємо в браузері адресу нашого сервера:

http://IP Адреса цієї машини/phpvirtualbox/
логін: admin
пароль: admin
Веб інтерфейс практично нічим не відрізняється від настільної версії Virtualbox.

2.2 Міжмережевий екран
Приступаємо до проектування домашньої мережі, в загальній концепції мережа виглядає наступним чином:



Доведеться трохи переконфігурувати роутер. В налаштуваннях «openwrt» Заводимо необхідну кількість VLAN і розподіляємо за ним порти, так як на даній материнській платі є лише один ethernet порт, то робимо його транковым і все VLAN заводимо з тегами на нього.

Перенастраиваем мережеві адаптери на нашому сервері, перед цим необхідно поставити пакет для підтримки vlan: apt-get install vlan.

Налаштування мережі на сервері
# The loopback network interface
auto lo
iface lo inet loopback
#NATIVE VLAN NETWORK
auto eth0.1
iface eth0.1 inet static
address 192.168.1.3
netmask 255.255.255.0
шлюз 192.168.1.1
vlan_raw_device eth0
up ifconfig eth0.1 up
#PROVIDER1 VLAN
auto eth0.2
iface eth0.2 inet manual
vlan_raw_device eth0
up ifconfig eth0.2 up
#PROVIDER2 VLAN
auto eth0.3
iface eth0.3 inet manual
vlan_raw_device eth0
up ifconfig eth0.3 up
#SIP VLAN
auto eth0.4
iface eth0.4 inet manual
vlan_raw_device eth0
up ifconfig eth0.4 up
# GUEST NETWORK
auto eth0.10
iface eth0.10 inet manual
vlan_raw_device eth0
up ifconfig eth0.10 up


В якості міжмережевого екрану я вибрав реалізацію «cisco ASA» на віртуальній машині. Не буду сперечатися: рішення дивне, неймовірно костыльное, але обумовлено необхідністю з'єднання з робочими мережами декількох компаній з «IPsec site to site vpn» з аналогічними залозками, але вже в нормальному виконанні.

Відразу ж хотілося помітити працює стабільно вже 4 місяці, проблем немає лінк стабільний, швидкість з'єднання при даній реалізації вийшла ~ 20 Мбіт/с, що цілком непогано, враховуючи те, що обсяг даних, які передаються невеликий. В моїй реалізації дана віртуальна машина керує усіма вхідними та вихідними сполуками у всіх VLAN домашньої мережі, підсумкова завантаження системи не перевищує 12%.

Завантажуємо образ віртуальної машини «Cisco ASA 8.4 for vmware посилання давати не буду на увазі того, що перша посилання в пошуковику найімовірніше приведе Вас на нього. Завантажуємо на наш сервер, і імпортуємо нашу машину в virtualbox. Попутно міняємо всі адаптери на «PCnet PCI II» і після імпорту розподіляємо з в режимі моста по створеним VLAN. Також в налаштуваннях послідовного порту створюємо pipe /tmp/tts0 за коштами якого будемо проводити первинну настройку нашій недоcisco.

Подальша настройка досить специфічною і залежить від ваших завдань, приводити конфігураційний файл ASA, на мій погляд, безглуздо, так як налаштування інтерфейсів, списків доступу, NAT, VPN та іншого краще прочитати окремо так, так як це тема не однієї і навіть не десятки статей. Опишу лише базові речі, які я використовую. По-перше маршрутизація, так як всі мережі заведені в неї, і вона ж є шлюзом за замовчуванням для домашньої мережі, і для гостьовій мережі. По-друге, на ній розгорнуто «anyconnect» для доступу в домашню мережу VPN. Базові налаштування Cisco ASA» можна прочитати в статті «Руки дійшли: продовжуємо про ASA» хабраюзера Fedia, решта за необхідності можна знайти в мережі.

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

2.3 Торрент-качалка на базі transmission і файловий сервер
Про опис налаштування даного функціоналу розбите не мала кількість клавіатур, але все ж опишу налаштування тут для купи, так сказати.

Звичайно, конфігурація Samba у Вас буде своя, але наведу для прикладу свою.Для початку встановимо Samba сервер командою:

apt-get install samba

І відредагуємо конфігураційний файл /etc/samba/smb.conf:

[global]
workgroup = WORKGROUP
netbios name = NAS
server string = NAS File Server
log level = 1
security = share
unix charset = UTF-8
dos charset = cp1251
store dos attributes = yes
max log size = 10

[NAS]
comment = NAS SERVER FOLDER
path = /home/NAS
create mask = 0777
directory mask = 0777
public = yes
writable = yes
printable = no
guest ok = yes
read only = no

[Share]
comment = NAS SHARE FOLDER
path = /home/NAS/Share
create mask = 0777
directory mask = 0777
public = yes
writable = yes
printable = no
guest ok = yes
read only = no

[cloud]
comment = OWNCLOUD FOLDER
path = /home/NAS/owncloud/
create mask = 0777
directory mask = 0777
public = yes
writable = yes
printable = no
guest ok = yes
read only = no

[torrents]
comment = TORRENTS FOLDER
path = /home/NAS/torrents
create mask = 0777
directory mask = 0777
public = yes
writable = yes
printable = no
guest ok = yes
read only = no

[VM]
comment = VIRTUAL MACHINES FOLDER
path = /home/NAS/VM
create mask = 0777
directory mask = 0777
public = yes
writable = yes
printable = no
guest ok = yes
read only = no

[media]
comment = MEDIA FOLDER
path = /home/NAS/media
create mask = 0777
directory mask = 0777
public = yes
writable = yes
printable = no
guest ok = yes
read only = no 


Після налаштування samba можна приступити до установки робочої конячки завантаження торрентів.

Настав час зайнятися TransmissionВстановлюємо:
apt-get install transmission-daemon

Налаштовуємо transmission-daemon /etc/transmission-daemon/settings.json:
{
"alt-speed-down": 50, 
"alt-speed-enabled": false, 
"alt-speed-time-begin": 540, 
"alt-speed-time-day": 127, 
"alt-speed-time-enabled": false, 
"alt-speed-time-end": 1020, 
"alt-speed-up": 50, 
"bind-address-ipv4": "0.0.0.0", 
"bind-address-ipv6": "::", 
"blocklist-enabled": true, 
"blocklist-url": "", 
"cache-size-mb": 2, 
"dht-enabled": true, 
"download-dir": "/home/NAS/torrents/Downloads", 
"download-limit": 100, 
"download-limit-enabled": 0, 
"стандарт": 1, 
"idle-посів-limit": 30, 
"idle-посів-limit-enabled": false, 
"incomplete-dir": "/home/NAS/torrents/Downloading", 
"incomplete-dir-enabled": false, 
"lazy-bitfield-enabled": true, 
"lpd-enabled": true, 
"max-peers-global": 200, 
"message-level": 2, 
"open-file-limit": 32, 
"peer-limit-global": 200, 
"peer-limit-per-torrent": 60, 
"peer-port": 11523, 
"peer-port-random-high": 65535, 
"peer-port-random-low": 49152, 
"peer-port-random-on-start": false, 
"peer-socket-tos": 0, 
"pex-enabled": true, 
"port-forwarding-enabled": true, 
"preallocation": 2, 
"ratio-limit": 1, 
"ratio-limit-enabled": true, 
"rename-partial-files": true, 
"rpc-authentication-required": true, 
"rpc-bind-address": "0.0.0.0", 
"rpc-enabled": true, 
"rpc-password": "**********", 
"rpc-port": 9091, 
"rpc-username": "transmission", 
"rpc-whitelist": "127.0.0.1,192.168.0.100", 
"rpc-whitelist-enabled": false, 
"script-torrent-done-enabled": false, 
"script-torrent-done-filename": "", 
"speed-limit-down": 900, 
"speed-limit-down-enabled": true, 
"speed-limit-up": 100, 
"speed-limit-up-enabled": false, 
"start-added-torrents": true, 
"trash-original-torrent-files": true, 
"umask": 0, 
"upload-limit": 100, 
"upload-limit-enabled": 0, 
"upload-slots-per-torrent": 14
}


2.4 Сервер телефонії на базі Asterisk + FreePBX
Дзвінки — справа не дешева, особливо коли по роботі часто і в різні країни, при тому що є vpn-тунелі до роботи — не розгорнути сервер телефонії, було б, м'яко кажучи, дивно. Виходячи з вище зазначеної схеми піднімаємо нову віртуальну машину і заводимо її мережеві інтерфейси в потрібні нам VLAN. Саму установку asterisk + freepbx описувати не буду так як, до мене з цим завданням чудово впорався siv237 і описав всі публікації Проста установка Asterisk + FreePBX для початківців.

Після установки заводимо необхідні транки інтерфейс FreePBX, налаштовуємо dial plan, створюємо користувача і радіємо життю. По чудесному закінченню обставин мій основний провайдер надає міський номер по sip, що власне і стало основною причиною розгортання даного сервера.

Мобільний телефон, коли я вдома, завжди підключений до Wi-Fi, з цього він і став моїм основним sip телефоном. При недоступності сервер робить переадресацію на мій мобільний телефон через міську лінію. Після підключення Wi-Fi антени, розташованої на даху будинку я без проблем можу сходити за хлібом, не пропустивши важливий дзвінок і не заплативши при тому ні через інтернет, ні за хвилини при переадресації.

У найближчих планах прикупити кілька USB модемів, що підтримують функцію передачі голосу і налаштувати вихід в мобільні мережі. Економити так по повній.

2.5 TFTP сервер для завантаження по мережі і налаштування різного обладнання;
Якщо чесно давно забув про цю дуже зручну функцію, раніше для мене це було надмірним, а потім просто вилетіло з голови. Якось після чергового перегляду мого улюбленого Хабра наткнувся на публікацію «Завантажувальний сервер — як завантажувальна флешка, тільки сервер і по мережі», написану Romanenko_Eugene, з описом всього цього. Краще, ніж він, я описати, напевно, не зможу, так що залишу цю частину за ним. На базі даної статті були зібрані необхідні мені дистрибьютивы і я забув, що таке завантажувальна флешка.

2.6 Приватне хмара для зберігання файлів на базі «owncloud»
Після того, як на телефоні з'явилося кілька клієнтів для хмарних сервісів, починають мимоволі з'являється думки, як би все це господарство об'єднати. У підсумку було вирішено побудувати своє хмара, завести в нього директорії для синхронізації з іншими хмарами і радіти життю.

В якості платформи був обраний «owncloud», а в якості зовнішніх провайдерів хмарних я використовую box.com, dropbox, google drive, yandex disk, onedrive. Список великий, але ідея проста. Для початку ставимо клієнти на машину і натравливаем їх на синхронізацію попередньо створену під кожне хмара директорію, потім поверх всього цього господарства ставимо «owncloud».

Керівництво по установці клієнтів переписувати сенсу немає, їх можна знайти на профільних сайтах. А все що стосується установки «owncloud» описано BlackIce13 в публікації «Досвід встановлення ownCloud 6 на Debian 7 wheezy». Нам же залишається продумати, що і куди синхронізувати, щоб спати спокійно, маючи у себе сервер з RAID 0.

2.7 HTTP проксі Ace Stream для перегляду TorrentTV
Після чергового відключення кабельного телебачення за затримку платежу були розпочаті пошуки альтернатив, які дуже швидко знайшлися — TorrentTV. Єдиний мінус полягає в тому, що для перегляду необхідний клієнт acestrem.

Тримати включеним 750 ватного монстра для роздачі телебачення безпосередньо на телевізор досить марнотратно. Після недовгих пошуків було знайдено рішення — проксі, що перетворює torrent stream в http. Проблема зважилася досить швидко, тепер за 60 рублів в місяць можна дивитися гору каналів.

Єдиний мінус — досить повільне перемикання каналів.

УстановкаДля початку встановимо vlc:

apt-get install vlc

Скачаємо aceproxy і acestream і помістимо їх в одну директорію:

wget https://github.com/ValdikSS/aceproxy/archive/master.zip
wget http://dl.acestream.org/debian/7/acestream_3.0.5.1_debian_7.4_x86_64.tar.gz

Створимо поруч кілька директорій:

mkdir logs
mkdir scripts

В директорії ./scripts створимо кілька скриптів:

cd ./scripts

nano aceproxy.sh
#!/bin/sh
python ./aceproxy/acehttp.py > ./logs/acehttp.log 2>&1 &

nano acestream.sh
#!/bin/sh
./acestream/acestreamengine --lib-path ./acestream --client-console > ./logs/acestream.log 2>&1 &

nano vlc.sh
#!/bin/sh
vlc-I telnet --clock-jitter -1 --network-caching -1 --sout-mux-caching 2000 --telnet-admin password > ./logs/acevlc.log 2>&1 &


Перейдемо в директорію вище і створимо скрипти для запуску і зупинки трансляції:
cd ../ 

nano start.sh

#!/bin/bash
/bin/kill -9 `/bin/ps ax |/bin/grep acestream |/usr/bin/awk {'print $1'}`
./scripts/acestream.sh
echo "Start acestream"
sleep 1
/bin/kill -9 `/bin/ps ax |/bin/grep vlc |/usr/bin/awk {'print $1'}`
./scripts/vlc.sh
echo "Start VLC"
sleep 1
/bin/kill -9 `/bin/ps ax |/bin/grep acehttp |/usr/bin/awk {'print $1'}`
./scripts/aceproxy.sh
echo "Start aceproxy"


nano stop.sh
#!/bin/bash
/bin/kill -9 `/bin/ps ax |/bin/grep acestream |/usr/bin/awk {'print $1'}`
echo "Stop acestream"
sleep 1
/bin/kill -9 `/bin/ps ax |/bin/grep vlc |/usr/bin/awk {'print $1'}`
echo "Stop VLC"
sleep 1
/bin/kill -9 `/bin/ps ax |/bin/grep acehttp |/usr/bin/awk {'print $1'}`
echo "Stop aceproxy"


Відредагуємо конфігурацію aceproxy згідно wiki

[ Wiki ]

Запустимо трансляцію каналів ./start.sh

Ось, власне, і все, залишилося тільки створити playlist за власним смаком і насолоджуватися переглядом улюблених каналів.

2.8 Хостинг для домашнього сайту c доступом по https
Що стосується хостингу, у нас вже все готово. Apache варто для любителів php, все готово, я ж люблю Flask, але суть не в цьому, а в зеленому замочку в адресному рядку. Який так сильно радує погляд при наборі заповітних https:// завдяки статті, написаної користувачем SLY_G. Буквально за пару хвилин можна потішити свій погляд, вбачаючи в адресному рядку зелене диво, отримавши безкоштовний ssl сертифікат.

Я довго думав на рахунок покупки домену. І статика є, і бажання, та ось віддавати кровні за домен, який не порадує, бо всі хороші імена вже куплені, або у мене немає фантазії. Але в загальному було вирішено створити ssl-сертифікат на доменне ім'я з ddns. Безкоштовно і сердито, зате друзі не побачать жахливе попередження про небезпечність мого хмари, коли я відправляю посилання на різні файли зі свого сховища. Та й самому постійно не доводиться бачити ці вікна. Загалом, раджу скористатися халявою.

Висновки
Витративши на обладнання приблизно 4 тисячі рублів, можна отримати досить широкий функціонал і використовувати залізо майже по саму зав'язку. На поточний момент середнє завантаження процесора становить ~ 60 % з рідкісними піками. Оперативна пам'ять використана майже повністю на 80%, але це наслідки від віртуалізації. Хост і машини в своп ще не були.

Сервер покриває 90% моїх бажань. Найбільше радує те, що настільки скромне залізо відпрацьовує на всі 100% при низькому енергоспоживанні. Так що рахунок за електрику після переходу з роутера на такий сервер у мене змінився не суттєво.

P. S. Прошу в разі виявлення помилок та неточностей повідомляти на ЛС. Це моя перша стаття на Хабр.

P. P. S. Шановне товариство, дана стаття не є інструкцією по налаштуванню або еталоном правильності конфігурацій. Це просто ще одна стаття про те, що можна зробити зі своїм старим залізом на благо домашньої ЛОМ.

P. P. P. S Буду дуже вдячний за відгуки та нові ідеї з цієї теми.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.