Размещаем сайт на домашнем роутере
Мне давно хотелось «потрогать руками» интернет-сервисы, настроив веб-сервер с нуля и выпустив его в Интернет. В этой статье хочу поделиться полученным опытом превращения домашнего роутера из узкофункционального устройства в практически полноценный сервер.
Началось всё с того, что служивший верой и правдой роутер TP-Link TL-WR1043ND перестал удовлетворять потребности домашней сети, захотелось 5ГГц диапазона и быстрого доступа к файлам на накопителе, подключенном к роутеру. Просмотрев профильные форумы (4pda, ixbt), сайты с отзывами и посмотрев на ассортимент местных магазинов — решил приобрести Keenetic Ultra.
В пользу именно этого устройства сработали хорошие отзывы владельцев:
- отсутствие проблем с перегревом (тут пришлось отказаться от продукции Asus);
- надежность в работе (тут вычеркнул TP-Link);
- простота в настройке (побоялся не справиться и вычеркнул MikroTik).
Пришлось примириться с минусами:
- нет WiFi6, хотелось взять оборудование с запасом на будущее;
- 4 LAN порта, хотелось больше, но это уже не домашняя категория.
В итоге получилась вот такая «серверная»:
- слева оптический терминал Ростелекома;
- справа наш подопытный роутер;
- проводом к роутеру подсоединен завалявшийся m.2 SSD на 128 ГБ, помещенный в коробку USB3 с алиэкспресса, сейчас он аккуратно закреплен на стенке;
- на переднем плане удлинитель с независимым отключением розеток, провод от него идет к недорогому UPS;
- на заднем плане пучок витой пары — на этапе ремонта квартиры сразу запланировал RJ45 розетки в местах предполагаемого размещения техники, чтобы не зависеть от замусоренности WiFi.
Итак, у нас есть оборудование, необходимо его настроить:
- первичная настройка роутера занимает около 2 минут, указываем параметры подключения к провайдеру (у меня оптический терминал переключен в режим бриджа, PPPoE соединение поднимает роутер), название WiFi сети и пароль — в принципе всё, роутер запускается и работает.
Ставим переадресацию внешних портов на порты самого роутера в разделе «Сетевые правила — Переадресация»:
Теперь можно перейти к «продвинутой» части, чего я хотел от роутера:
- функционал небольшого NAS для домашней сети;
- выполнение функций веб-сервера для нескольких частных страничек;
- функционал персонального облака для доступа к личным данным из любой точки мира.
Первое реализуется встроенными средствами, не требуя особых усилий:
- берем предназначенный для этой роли накопитель (флешку, карту памяти в картридере, жесткий диск или SSD во внешнем боксе и форматируем в Ext4 с помощью MiniTool Partition Wizard Free Edition (у меня нет компьютера с linux под рукой, там можно встроенными средствами). Как я понимаю, при работе система пишет на флешку только логи, поэтому, если их ограничить после настройки системы — можно использовать и карты памяти, если планируете много и часто писать на накопитель — лучше SSD или HDD.
После этого подключаем накопитель к роутеру и наблюдаем его на экране системного монитора
Переходим щелчком по «USB-диски и принтеры» в раздел «Приложения» и настраиваем общий ресурс в разделе «Сеть Windows»:
И у нас имеется сетевой ресурс, который можно использовать с компьютеров под Windows, подключив при необходимости как диск: net use y: \\192.168.1.1\SSD /persistent:yes
Скорость такого импровизированного NAS вполне достаточна для домашнего применения, по проводу он использует весь гигабит, по WiFi скорость составляет около 400-500 мегабит.
Настройка хранилища — один из необходимых шагов для настройки сервера, далее нам нужно:
— приобрести домен и статический IP адрес (можно обойтись и без этого, используя Dynamic DNS, но статический IP у меня уже был, поэтому проще оказалось воспользоваться бесплатными сервисами Яндекса — делегировав туда домен, мы получаем DNS-хостинг и почту на своем домене);
— настроить DNS сервера и добавить A-записи, указывающие на ваш IP:
Вступление в силу настроек делегирования домена и DNS занимает несколько часов, поэтому параллельно занимаемся настройкой роутера.
Для начала необходимо установить репозиторий Entware, из которого мы сможем ставить на роутер необходимые пакеты. Я воспользовался этой инструкцией, только не заливал установочный пакет по FTP, а создал папку прямо на подключенном ранее сетевом диске и скопировал туда файл обычным способом.
Получив доступ по SSH, меняем пароль командой passwd и ставим командой opkg install [имена пакетов] все нужные пакеты:
В ходе настройки на роутере оказались установлены следующие пакеты (результат вывода команды opkg list-installed):
Возможно, тут что-то лишнее затесалось, но места на накопителе много, поэтому разбираться не стал.
После установки пакетов настраиваем nginx, я пробовал с двумя доменами — на втором настроен https, и пока висит заглушка. 81 и 433 внутренние порты вместо 80 и 443 используются, поскольку на нормальных портах висят админки роутера.
Для того, чтобы сайт работал по https, воспользовался известным скриптом dehydrated, установив его по этой инструкции. Затруднений этот процесс не вызвал, запнулся только на том, что в тексте скрипта для работы на моем роутере надо закомментировать строчку в файле /opt/etc/ssl/openssl.cnf:
И отмечу, что генерация dhparams.pem командой «openssl dhparam -out dhparams.pem 2048» на моем роутере занимает больше 2 часов, если бы не индикатор прогресса — потерял бы терпение и перезагрузил.
После получения сертификатов перезапускаем nginx командой «/opt/etc/init.d/S80nginx restart». В принципе на этом настройка закончена, но сайта еще нет — если положим в каталог /share/nginx/html файл index.html, увидим заглушку.
Чтобы разместить информацию красиво, непрофессионалу типа меня проще воспользоваться готовыми шаблонами, после долгого перебора различных каталогов нашел templatemo.com — там неплохой выбор бесплатных шаблонов, не требующих обязательного указания авторства (что редкость в интернете, большая часть шаблонов в лицензии требуют сохранить ссылку на ресурс, откуда они получены).
Выбираем подходящий шаблон — там есть на самые разные случаи, скачиваем архив, и раcпаковываем его в каталог /share/nginx/html, делать это можно уже со своего компьютера, затем редактируем шаблон (тут потребуются минимальные знания HTML, чтобы не нарушить структуру) и заменяем графику, как показано на рисунке ниже.
Резюме: роутер вполне пригоден для размещения на нем легкого сайта, в принципе — если не предполагается большой нагрузки, можно поставить и php, и экспериментировать с более сложными проектами (смотрю на nextcloud/owncloud, вроде есть успешные установки на такое железо). Возможность установки пакетов поднимает его полезность — например, когда надо было защитить RDP порт ПК в локальной сети, поставил knockd на роутер — и проброс порта к ПК открывался только после port knocking.
Почему именно роутер, а не обычный PC? Роутер — одна из немногих компьютерных железяк, круглосуточно работающих во многих квартирах, домашний роутер обычно абсолютно бесшумен и легкий сайт с числом посещений в сутки меньше сотни его совершенно не напряжет.
Источник
Домашний сервер, или приключение длиной в 6 лет. Часть первая
Здравствуй, Хабр, давно не виделись.
Сегодня я хотел бы рассказать про свой домашний сервер: какие ошибки допустил, на какой конфигурации сейчас остановился, да и вообще — зачем я это делал.
Дисклеймер: некоторая часть ПО, о котором ведется речь в статье, может быть использована на бесплатной основе только в ознакомительных целях или с ограничениями по функциональности, пожалуйста, перед использованием изучите сайт разработчика на предмет лицензирования и возможности использования ПО для вашего дома.
История началась в уже далеком 2014 году, ходят мифы, что когда-то доллар был по 32 рубля за одного зелёного, трава была зеленее, небо чище, а энтузиазма было столько, что я занялся вещами о которых расскажу ниже в статье, сейчас я бы на такое уже не отважился.
В один прекрасный день, разбирая свои провода и коробки на шкафу, и раскладывая оставшееся железо от ремонта старых ПК друзей, родственников и знакомых, я вдруг решил создать центральное хранилище резервных копий для семейных фотографий, домашний CCTV, сделать медиа-сервер для удобного просмотра кино и сериалов, да и лаба для всевозможных экспериментов тоже не помешала бы, такой домашний NAS с расширенным функционалом. Подобная идея уже некоторое время мелькала у меня в голове, но все было не до нее — либо чего-то из железа не хватало, либо времени, а тут все как раз сошлось.
Собственно началось все с нескольких жестких дисков разного объема, в качестве процессора я взял старенький Intel i3-2120 3.3Ghz и 4GB RAM DDR3 (2 планки по 2GB), какого-то старого очень китайского корпуса, который, как видно на фото, был доработан в прямом смысле напильником, хотя на самом деле там побывали и кусачки, и молоток, да и ножовкой по металлу я что-то пилил. В качестве материнской платы была взята списанная из офиса MSI B75MA-E31 (списали ее потому, что после каждого ребута в ней слетали настройки биоса и она постоянно просила настроить время и прочие параметры), как оказалось уже позже, когда я ее таки забрал, в ней косячил разъем под батарейку CR2032, вооружившись мультиметром, паяльником и парой других мертвых материнок, мне удалось перепаять целиком посадочное гнездо с контактами батарейки и восстановить нормальную работу материнской платы.
В Итоге получилось что-то такое:
На самом деле на фото вариант уже с интегрированными корзинами под HDD, чуть ранее “сервер” был собран без них просто в рамках посадочных мест корпуса под HDD, но фотографии того варианта я не нашел, хотя, как помню, первый вариант довольно быстро был модернизирован корзинами до состояния как на фото, так что суть оно передает очень точно, так сяк и продакшн.
Что же по софту спросите вы, так вот изначально в качестве операционной системы была выбрана Windows 10…
Собственно этот выбор позже принес огромное количество неудобств, т.к. некоторый софт переставал работать при автоматической установке обновлений и прочих ситуациях, характерных пользовательским версиям Windows работающим без длительных перезагрузок.
Но первичный опыт был получен и некоторое время я пользовался расшаренными папками с этой машины, сделал ту самую заветную копию семейных фотографий, начал собирать домашнюю медиатеку.
Для домашнего CCTV (видеонаблюдения) я купил на Avito несколько камер D-Link dcs-2130, для начала камеры были очень даже неплохие, но большим минусом данных камер была необходимость использования блока питания с довольно коротким проводом, провод в итоге я удлинял с помощью витой пары — получилось вполне сносно.
Позже у меня появилось пара камер с ночным режимом записи (съемка с инфракрасной подсветкой), которые также использовались некоторое время.
По программному обеспечению я перепробовал множество вариантов: сначала родной софт от D-link, который на тот момент был просто ужасен, потом я пробовал “Линия IP”, “Trassir” и “iSpy”, насколько знающий читатель поймет, “Линия IP” и “Trassir” накладывали множественные ограничения в триальных режимах, да и опять же ни одно из решений я не мог для себя оценить как идеальное, в итоге на длительный срок я остановился на открытом бесплатном ПО для организации видеонаблюдения — “iSpy”.
iSpy уже в то время позволял использовать сценарии записи по движению, экспорт видео, удобный поиск по зонам и т.п. В рамках данной статьи я не хотел бы подробно останавливаться на этом программном обеспечении, но основное, что стоит сказать — оно меня тогда устроило и позволило решить стоящую передо мной задачу, хотя интерфейс сложно было назвать удобным и понятным для пользователя.
Спустя полгода или чуть больше, намучившись с Windows, я решил, что надо попробовать в качестве основной операционной системы что-то стабильное, не требующее постоянных перезагрузок и обновлений, основанное на Unix/Linux.
В итоге выбор пал на FreeNas. Я довольно долго жил с ним и не тужил, используя плагины для расширения базового функционала и шары с поддержкой Windows ACL, Emby в jail для DLNA вполне справлялись со своими задачами, диски разного объема спокойно склеивались в отказоустойчивые RAID-массивы.
Я перепробовал все доступные конфигурации RAID, провел огромное множество тестов на скорость записи и чтения, тесты на IOPS, изучил теорию по массивам и типам файловых систем, в общем провел время с пользой.
Точно уже и не вспомню, но freenas радовал меня около года, если не больше, но было 2 основные причины, почему я снова решил сменить операционную систему моего сервера.
Первой было то, что я никак не мог подобрать удовлетворяющее меня решение для домашнего CCTV, которое работало бы на FreeNas, извиняюсь перед читателями, я достоверно не помню какие варианты я пробовал использовать и с чем экспериментировал на FreeNas в плане CCTV, но точно помню, что хорошего решения тогда я не нашел.
И второй причиной было отсутствие гибкости для экспериментов. В частности с виртуальными машинами Windows и Linux, а тут еще и на работе решили попробовать Windows Hyper-V и дабы расширить свой кругозор и принудительно получить некоторые навыки я снова вернулся к Windows, только теперь уже Windows Server 2012.
Кстати к этому времени у меня высвободилась оперативная память с основного ПК — 2 планки по 4GB DDR3, соответственно у меня уже было 8GB для моих лихих затей.
А еще я приобрел с рук (все там же на Авито) RAID контроллер LSI 8888ELP за 4500 рублей, абсолютно новый, в коробке и пленке.
Я конечно тут же получил несколько неприятных напоминаний, что Windows системный администратор должен страдать по определению — создание виртуальных машин с Linux оказывается требует отключения secure boot в гипервизоре и еще некоторых плясок с бубном, и если сейчас ни одной машины не запущено, то Windows Server опять же норовит поставить обновление и перезагрузиться, либо по утру я обнаруживал синий экран, т.к. что-то винде там в очередной раз не понравилось и прочие радости жизни с продукцией Microsoft.
Но цель изучить Microsoft Hyper-V, базовый функционал виртуализации от Microsoft, была достигнута.
По софту для решения первоначальных задач все оставалось примерно так же:
- CCTV-iSpy, на тот момент я уже привык к этому ПО и оно казалось мне отличным. Для синхронизации фото я, как и в первый раз на Windows 10, использовал ПО Goodsync — вполне хороший софт, имеет много настроек и режимов, но, как водится, в триальном режиме много чего не доступно.
- Windows шары для обмена файлами — только теперь я уже поставил авторизацию по AD, да да я поднял домен, опять же для интереса и усложнения жизни себе любимому, с AD я уже много лет работал в рамках организации, но пробовать что-то эдакое на реальном домене страшно, а тут ломай не хочу.
- Для скачивания файлов с интернета все так же был transmission, он кстати поддерживает и авторизацию и webui для удобного добавления файлов с других ПК в сети.
- Небольшие изменения коснулись DLNA — на данном этапе я познакомился с Plex. Это отличный программный медиа-сервер, хоть и не без недостатков. Основным минусом является то, что файлы необходимо именовать очень “правильно”, варианты рекомендуемых названий конечно же описаны в документации к ПО, но когда вы скачиваете файлы с общедоступных ресурсов или от друзей, то конечно же названия там зачастую не соответствуют требованиям Plex.
- HFS — http file server (от rejetto) для доступа к нужным файлам из интернета, чтобы попасть на сам сервер на роутере был настроен ddns+nat.
Только теперь софт был разбит на разные виртуальные машины, с попыткой сэкономить ресурсы. Также периодически появлялись и уходили виртуалки на linux, debian, ubuntu, centos. Шло время и в голове зрели идеи, что надо закругляться с затянувшимся триалом Windows Server 2012, да и Hyper-V был уже не так интересен. Я уже рассматривал, что же дальше поставить в качестве ОС и куда теперь девать накопившиеся данные на сервере. У меня конечно же есть еще 2 персональных компьютера, один мой, второй у супруги, там тоже есть некоторые объемы на hdd, но данные сервера уже не помещались.
Но под конец 2016 года на меня свалились даром около 15-17 замученных, но вполне рабочих дисков по 1 ТБ, без BAD блоков. Собственно грех было не приспособить их в домашний сервер, но была проблема — на материнской плате всего 3 слота SATA II и один SATA III, также был RAID-контроллер LSI 8888ELP — это еще 8 портов SATA, и даже купленная мной в какой-то момент плата расширения Espada PCIe-4 x SATA III не позволяли собрать в данном корпусе что-то вменяемое.
Я стал изучать рынок Б\у серверов supermicro на предмет покупки 3U-4U сервера с hotswap-корзинами, CPU, RAM и т.п. Также очень хотелось уже получить наличие IPMI (iLO в терминах HP), то есть KVM over IP, дабы была возможность подключаться к серверу по IP в веб или java приложении. Хотя сервер до этого времени жил в тумбочке под телевизором (где у нормальных людей обычно обитают Playstation и Xbox) и был подключен по HDMI к тому самому телевизору, но каждый раз для управления мне приходилось переключать клавиатуру со своего ПК (пока Windows Server работал штатно, ничего не обновляя и не зависая в синий экран, естественно я подключался по RDP) — соответственно IPMI был бы очень кстати, да и вроде подарок на день рождения я себе так и не купил.
Картинку резал из видео, поэтому за качество извиняюсь, но как видно “сервер” живет на нижней полке, и особо никому не мешает.
Но изучив цены, я очень быстро поубавил свои хотелки, как по процессору, по объему оперативной памяти, так и по наличию IPMI, тем не менее всё, что я находил, было для меня всё ещё дорого. Через неделю, устав бороться с жабой и рыться в барахолках, я решил купить дисковую полку Dell PowerVault MD1000 (DAS) с кабелем для Raid-контроллера (SFF8088-SFF8470), которым я собственно и планировал подключить полку к своему серверу через внешний порт на RAID-карте. Полка обошлась мне в 23 800 руб., а кабель еще в 3000.
Приехал мой подарок из славного города Санкт-Петербурга, доставленный логистической компанией, бережно упакованный в деревянный паллет, в пленке и защитной упаковке:
Фото паллета уже после того как я извлёк из него дисковую полку, разбирал я его ножом и отверткой, на все про все ушло примерно 40 минут.
Я знал, что полка будет тяжелая, но то что я буду проклинать все и вся включая себя за эту идею — я даже представить не мог! Еще даже не достав дисковую полку из паллета (а она была там забита гвоздями намертво), я уже понял, что это будет то еще приключение.
Удивительно, но я не смог найти у себя ни одной фотографии дисковой полки отдельно, поэтому приложу фото из интернета:
А на фото ниже можно наблюдать уже сервер с полкой в сборе, в тумбочке на балконе.
Тумбочку делал конечно же сам, всё как положено — сначала спроектировал в какой-то онлайн-программе и распечатал раскрой материала на листочке, затем в ОБИ, куда я поехал за материалом, как водится не оказалось в наличии той щитовой доски с сайта, для которой я распечатал раскрой, поэтому я взял вариант в наличии на 2мм толще, предупредил там на распиле, но естественно один принимает заказы на распил, другой носит, третий пилит, где-то там в коммуникации эти 2 мм потерялись. Тумбочку я конечно же собрал, но 2 мм “погрешности” — это огромная разница при сборке мебели.
Статья вышла куда длиннее чем я изначально рассчитывал, а мы дошли только до середины повествования, да и супруга уже требует внимания.
И да, сервер реально оказался на балконе, и летом, и зимой. Почему же так произошло? Те, кто хоть раз включал дисковую полку enterprise-уровня, уже догадались, а для остальных я опишу ощущения (в том числе и не только свои) во второй части!
Источник