[Из песочницы] Домашний сервер c нуля

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

Список задач, которые выполняет домашний сервер:

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

Фото для привлечения внимания:

917bfabbb2df46b7a74b11f303a0c2e7.jpg

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

После долгих размышлений и пары тестов были куплены следующие комплектующие:

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

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

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

В итоге получилось следующие

С железной частью разобрались, теперь пора приступить к настройке функционала. В качестве ОС была выбрана 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-service stop /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 Межсетевой экран

Приступаем к проектированию домашней сети, в общей концепции сеть выглядит следующим образом:

ab18511d73bd433aaadbedc062656fce.jpg

Придется немного переконфигурировать роутер. В настройках «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 gateway 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» c аналогичными железками, но уже в нормальном исполнении.

Сразу же хотелось заметить работает стабильно уже 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, «encryption»: 1, «idle-seeding-limit»: 30, «idle-seeding-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 поток в 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-password admin > ./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 Буду очень признателен за отзывы и новые идеи по этой теме.

© Habrahabr.ru