Ne v kontakte Asocial programmer's blog

Собираем домашний сервер. Часть 2, софтовая.

Feature image

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

Операционная система

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

Таким образом, выбор ОС делался из соображений “изкоробочной” поддержки всех необходимых сервисов и удобного интерфейса к ним. Безусловно, настроить все это самому можно без особых проблем, но оно мне надо? После того, как настройка софта из фана превращается в производственную необходимость, удобство и скорость управления резко возрастают в цене.

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

Zentyal

Поиск не был долгим. Увидев трехстраничный список роутерных дистрибутивов в википедии, я просто выбрал те названия, которые были мне хоть чуть-чуть знакомы и сосредоточился на них. И очень быстро выяснил, что из них только Zentyal (бывший eBox) удовлетворяет последнему пожеланию, а именно, в его основу легла Ubuntu 10.04, хорошо мне знакомая.

Разработчиики позиционируют свой дистрибутив как Small Business Server, но балогдаря развитой модульной структуре, он прекрасно подходит и для домашнего сервера. Сам по себе дистрибутив является не только бесплантым, но еще и лицензирован под GPLv2. Основной козырь этого дистрибутива - хорошо продуманный веб-интерфейс, покрывающий 95% лично моих нужд. Из коробки в нем нет разве что торрентов, но это не проблема.

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

Немного об установке и настройке

Ставится Zentyal так же как и Ubuntu Server и единственной проблемой оказалось, что не очень понятно, как его инсталлировать в headless режиме. Мне  оказалось проще подключить монитор, чем устраивать сложности с ssh, но не для всех это будет хорошим выходом.

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

Наиболее тонким моментом был процесс плавного переключения домашней сети со старого роутера на новый сервер. Напомню, что до сего момента, в центре нашей домашней сети стоял роутер ASUS WL-520GU (очень хорошая и надежная машинка, кстати) с прошивкой от Олега, он раздавал все остальным интернет через NAT и локальные IP из подсети 192.168.171.0/24. В конце лета к нам к квартиру пришел интернет от РосТелекома и, как более шустрый, вытеснил прежнего провайдера (HomeNet) из WAN порта, оставив его болтаться без дела.

Поэтому на период первичной настройки подключил HomeNet к новому серверу в качестве WAN и настроил LAN на тот же диапазон, что и “боевую” сеть, то есть на 192.168.171.0/24. Процесс настройки сети меня приятно поразил своей простотой и продуманностью — задание параметров сетевых интерфейсов и настройка одного из них как WAN прошла как по нотам. В итоге у меня возникло две параллельных сети с очень похожей топологией, и в процессе настройки я переключал свой ноутбук с WiFi соединения на Ethernet и обратно, чтобы попасть в общую и новую сети соответственно. Сконфигурировав сетевые подключения, я прогулялся по квартире, собрав MAC-адреса всех имеющихся устройств и внес их в настройки DHCP-сервера, не забыв и роутер (это важно, да).

Наконец, я произвел слияние новой и старой сетей при помощи вот таких нехитрых шагов:

  1. Перевел роутер в режим точки доступа (т. е. отключил NAT и все, что с ним связано). В результате WAN-порт функционально уравнялся с другим четырьмя портами роутера.
  2. Отключил DHCP на роутере, поскольку эту функцию теперь возьмет на себя сервер.
  3. Вместо WAN’a от РосТелекома я подключил роутер ко внутреннему сетевому интерфейсу сервера, а РосТелеком воткнул во второй внешний интерфейс сервера.
  4. Ребутнул роутер и перезапустил сеть на всех девайсах.

И, о чудо! Ничего не сломалось, все девайсы получили правильные адреса, включая роутер, и интернет спокойно пошел через HomeNet. Далее я настроил второй внешний интерфейс, который был подключен к РосТелекому, а так же две полезных фитчи: traffic balancing и WAN failover. Первая означает балансировку трафика между двумя внешними каналами, а вторая - оперативное переключение трафика на один канал, если второй вдруг откажет. Это делается тоже на удивление просто, если следовать советам в документации. Именно поэтому я не стану приводить никаких конфигов — не скриншоты же веб-гуя мне вам показывать? :-) Там и так все предельно ясно.

Файлопомойка

С нею тоже не возникло особенных проблем. Поначалу, я расстроился, выяснив, что для этого Zentyal предлагает только Samba. Однако, современные дистрибутивы на удивление хорошо умеют с нею работать (чего не скажешь о Винде с NFS), а замеры скорости окончательно рассеяли мои сомнения. Да и в вопросе контроля доступа это решение, пожалуй, лучше NFS. Поэтому, я создал пользователей по числу членов семьи, каждому из них по личной шаре и общую — для собственно файлопомойки.

Виртуальные машины

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

Начну с того, что Zentyal умеет работать с двумя типами виртуальных машин — qemu-kvm и VirtualBox, но при том он не умеет работать с виртуалками разных типов одновременно, а выбором по умолчанию является kvm. Kvm мне показался несколько тормознутым, да и с настройками сетевых интерфейсов в bridged режиме у него было мутно (хоть я в конце концов и разобрался, но это можно честно считать вторым камнем). Недолго думая, я удалил из системы qemu-kvm, поставил VirtualBox и был очень удивлен, когда только что созданная машина отказалась запускаться, а в тексте ошибки было что-то про неизвестный системе тип виртуальной машины hvm. Гугл ничего посоветовать не смог, и мне пришлось заглянуть в сорцы, благо, они открыты. Оказалось, что Zentyal ориентируется не по наличию в системе kvm, а по наличию libvirt, через который он с ним работает, а вот этого в документации уже не было. После удаления libvirt Zentyal замечательно определил наличие VirtualBox’a и даже позволил создать и запустить одну виртуалку :-)

С настройкой bridged режима в vbox все проще некуда — надо лишь потом не забыть настроить DHCP на выдачу вирутальной машине постоянного IP адреса, а вот для kvm пришлось бы один из физических интерфейсов переводить в bidged режим (при этом теряя все привязанные к нему настройки), а потом привязывать виртуальную машину в появившемуся интерфейсу br1.

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

GIT-хостинг

Здесь, я, пожалуй, закончу с диферамбами по Zentyal’у и похвалю еще один продукт. Этим продуктом будет Indefero — система для управления проектами, выполненная в стиле Google Code, но обладающая тремя несомненными преимуществами: open-source, поддержка GIT, SVN и Mercurial в качестве репозитория, и очень легко устанавливающаяся, по крайней мере на Ubuntu, для которой есть ppa с актуальными пакетиками. По приведенной мною ссылке вы найдете исчерпывающую информацию о проекте и его использовании, а я лишь заявлю, что если вам нужна простая, функциональная система, да непременно на своем сервере, и вас не пугает отсутствие дизайна, тогда эта система для вас.

Еще вкусняшки?

Вообще, по ходу настройки всего этого добра я поиграл с кучей разного интересного софта, о чем я не буду писать (настройка VPN, серевого принтера и т. п.), пост и без того гигантский. Если вы дочитали до сюда, ничего не пропуская, я восхищен. Может быть, я расскажу, как я настраивал стриминг видео из сетевого хранилища, но это после того, как донастрою его. Отдельным постом я, наверное, оформлю бенчмарки с сервера, но это тоже чуть позже. Ну а на этот раз достаточно :-)

Ну и, кстати, насчет вкусняшек. Вся эта деятельность не развивалась бы так бурно, если бы не вкусняшки, которыми меня все это время подкармливала жена. И кое-какие рецепты она наверняка опубликует, правда, Солнышко? ;-)

P.S. Amberian Dawn — River of Tuoni