Разполагане на сайт на домашния рутер

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

Всичко започна, когато верният рутер TP-Link TL-WR1043ND престана да отговаря на нуждите на домашната мрежа, искаше ми се 5GHz обхват и бърз достъп до файлове на хранилището, свързано с рутера. След като разгледах специализирани форуми (4pda, ixbt), сайтове с отзиви и прегледах асортимента на местните магазини, реших да закупя Keenetic Ultra.

В полза на точно това устройство говорят добрите отзиви на собствениците:

  • липса на проблеми с прегряване (тук се наложи да се откажа от продукцията на Asus);
  • надеждност на работа (тук изключих TP-Link);
  • простота при настройка (уплаших се, че няма да се справя и изключих Microtik).

Наложи се да се примиря с недостатъците:

  • няма WiFi6, искаше ми се да взема оборудване с резерв за бъдещето;
  • 4 LAN порта, исках повече, но това вече не е домашна категория.

В крайна сметка изглежда ето какво "сървърно":

Разполагане на сайт на домашния рутер

  • вляво оптичният терминал на Ростелеком;
  • вдясно нашият опитен рутер;
  • с кабел рутерът е свързан с наличния m.2 SSD с капацитет 128GB, поставен в USB3 кутия от Aliexpress, в момента е здраво закрепен на стената;
  • в преден план разклонител с независимо изключване на контактите, от него хитро е свързан евтиния UPS;
  • в задния план сноп витая двойка - при ремонта на апартамента веднага предвидих RJ45 контакти на предвидените места за техника, за да не завися от замърсеността на WiFi.

И така, имаме оборудване, необходимо е да го настроим:

Разполагане на сайт на домашния рутер

  • първоначалната настройка на рутера отнема около 2 минути, посочваме параметрите за свързване с доставчика (при мен оптичният терминал е превключен в режим мост, PPPoE връзката е активирана от рутера), името на WiFi мрежата и паролата - всъщност това е всичко, рутерът стартира и работи.

Разполагане на сайт на домашния рутер

Настройваме пренасочване на външните портове към портовете на самия рутер в раздела "Мрежови правила - Пренасочване":

Разполагане на сайт на домашния рутер

Разполагане на сайт на домашния рутер

Сега можем да преминем към "напредналата" част, което исках от рутера:

  1. функционалност на малък NAS за домашната мрежа;
  2. изпълнява функции на уеб сървър за няколко лични странички;
  3. функционал на личното облако за достъп до лични данни от всяка точка на света.

Първото се реализира с вградени средства, без да изисква специални усилия:

  • взимаме предназначеното за тази роля устройство за съхранение (флашка, карта памет в четец на карти, външен хард диск или SSD в външен кутия) и го форматираме в Ext4 с помощта на MiniTool Partition Wizard Free Edition (нямам компютър с linux под ръка, там може да стане с вградени средства). Както разбирам, при работа системата записва на флашката само записки, затова, ако ги ограничим след настройка на системата — може да се използват и карти памет, но ако планирате много и често записвания на устройството — по-добре е SSD или HDD.

Разполагане на сайт на домашния рутер

След това свързваме устройството към рутера и го наблюдаваме на екрана на системния монитор

Разполагане на сайт на домашния рутер

Преминаваме с клик по "USB-дискове и принтери" в секцията "Приложения" и настройваме общ ресурс в раздела "Windows Network":

Разполагане на сайт на домашния рутер

И разполагаме със сетеви ресурс, който може да се използва с компютри с Windows, свързвайки при необходимост като диск: net use y: \\192.168.1.1SSD /persistent:yes

Скоростта на този импровизиран NAS е напълно достатъчна за домашна употреба, по кабел използва целия гигабит, по WiFi скоростта е около 400-500 мегабита.

Разполагане на сайт на домашния рутер

Настройката на хранилището е една от необходимите стъпки за настройка на сървъра, следва да направим:
— да закупим домейн и статичен IP адрес (може да се заобиколи и без него, използвайки Dynamic DNS, но статичен IP вече имах, затова беше по-лесно да се възползвам от безплатните услуги на Яндекс — делегирайки там домейна, получаваме DNS хостинг и поща на своя домейн);

Разполагане на сайт на домашния рутер

— да настроим DNS сървъри и да добавим A-записи, указващи на вашия IP:

Разполагане на сайт на домашния рутер

Влизането в сила на настройките за делегиране на домейна и DNS отнема няколко часа, затова паралелно се занимаваме с настройката на рутера.

Първо е необходимо да инсталираме репозиториума Entware, от който можем да инсталираме необходимите пакети на рутера. Аз използвах това ръководство, само че не качвах инсталационния пакет по FTP, а създадох папка директно на свързания преди това мрежов диск и копирах там файла по обичайния начин.

Получавайки достъп по SSH, променяме паролата с командата passwd и инсталираме с командата opkg install [имената на пакетите] всички нужни пакети:

Разполагане на сайт на домашния рутер

По време на настройката на рутера бяха инсталирани следните пакети (резултат от извода на командата opkg list-installed):

Списък на пакетите
bash — 5.0-3
busybox — 1.31.1-1
ca-bundle — 20190110-2
ca-certificates — 20190110-2
coreutils — 8.31-1
coreutils-mktemp — 8.31-1
cron — 4.1-3
curl — 7.69.0-1
diffutils — 3.7-2
dropbear — 2019.78-3
entware-release — 1.0-2
findutils — 4.7.0-1
glib2 — 2.58.3-5
grep — 3.4-1
ldconfig — 2.27-9
libattr — 2.4.48-2
libblkid — 2.35.1-1
libc — 2.27-9
libcurl — 7.69.0-1
libffi — 3.2.1-4
libgcc — 8.3.0-9
libiconv-full — 1.11.1-4
libintl-full — 0.19.8.1-2
liblua — 5.1.5-7
libmbedtls — 2.16.5-1
libmount — 2.35.1-1
libncurses — 6.2-1
libncursesw — 6.2-1
libndm — 1.1.10-1a
libopenssl — 1.1.1d-2
libopenssl-conf — 1.1.1d-2
libpcap — 1.9.1-2
libpcre — 8.43-2
libpcre2 — 10.34-1
libpthread — 2.27-9
libreadline — 8.0-1a
librt — 2.27-9
libslang2 — 2.3.2-4
libssh2 — 1.9.0-2
libssp — 8.3.0-9
libstdcpp — 8.3.0-9
libuuid — 2.35.1-1
libxml2 — 2.9.10-1
locales — 2.27-9
mc — 4.8.23-2
ndmq — 1.0.2-5a
nginx — 1.17.8-1
openssl-util — 1.1.1d-2
opkg — 2019-06-14-dcbc142e-2
opt-ndmsv2 — 1.0-12
php7 — 7.4.3-1
php7-mod-openssl — 7.4.3-1
poorbox — 1.31.1-2
terminfo — 6.2-1
zlib — 1.2.11-3
zoneinfo-asia — 2019c-1
zoneinfo-europe — 2019c-1

Възможно е тук да е попаднало нещо излишно, но мястото на диска е много, затова не се разрових.

След инсталирането на пакетите настройваме nginx, опитах с два домейна — на втория е настроен https, и засега си седи на заглушка. Вътрешните портове 81 и 433 се използват вместо 80 и 443, тъй като на нормалните порти са админките на рутера.

etc/nginx/nginx.conf

потребител  никто;
процеси_работников  1;
#журнал_ошибок  /opt/var/log/nginx/error.log;
#журнал_ошибок  /opt/var/log/nginx/error.log  уведомление;
#журнал_ошибок  /opt/var/log/nginx/error.log  информация;
#pid        /opt/var/run/nginx.pid;

events {
    связи_работников  64;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    #формат_журнала  основной  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #журнал_доступа  /opt/var/log/nginx/access.log основной;
    отправить_файл        включен;
    #tcp_nopush     включен;
    #timeout_ожидания  0;
    timeout_ожидания  65;
    #gzip  включен;

сервер {
    прослушивать 81;
    имя_сервера milkov.su www.milkov.su;
    возврат 301 https://milkov.su$request_uri;
}

сервер {
        прослушивать 433 ssl;
        имя_сервера milkov.su;
        #Поддержка SSL
        включить ssl.conf;
        местоположение / {
            корень   /opt/share/nginx/html;
            индекс  index.html index.htm;
        страница_ошибки  500 502 503 504  /50x.html;
        местоположение = /50x.html {
            корень   html;
            }
        }
}


ssl_certificate /opt/etc/nginx/certs/milkov.su/fullchain.pem;
ssl_certificate_key /opt/etc/nginx/certs/milkov.su/privkey.pem;
ssl_cipher 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers включен;
ssl_dhparam /opt/etc/nginx/dhparams.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_stapling включен;

За да работи сайтът по https, използвах известния скрипт dehydrated, инсталирайки го по тази инструкция. Процесът не предизвика затруднения, само се запънах на това, че в текста на скрипта за работа на моя рутер трябва да коментирам реда в файла /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

И отбелязвам, че генерирането на dhparams.pem с командата «openssl dhparam -out dhparams.pem 2048» на моя рутер отнема повече от 2 часа, ако не беше индикаторът за напредъка — щеше да загубя търпение и да рестартирам.

След получаване на сертификатите, рестартираме nginx с командата "/opt/etc/init.d/S80nginx restart". По принцип на това настройката приключва, но сайтът все още не е наличен — ако сложим в каталога /share/nginx/html файл index.html, ще видим съобщение за заслон.

index.html

<!DOCTYPE html>
<html>
<head>
<title>Тестова страничка!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Тестова страничка!</h1>
<p>Това е проста статична тестова страничка, абсолютно няма нищо интересно.</p>
</body>
</html>

За да публикувам информацията по-елегантно, на непрофесионалист като мен му е по-лесно да използва готови шаблони, след дълго търсене из различни каталози открих templatemo.com — там има добър избор от безплатни шаблони, които не изискват задължително посочване на авторството (което е рядкост в интернет; повечето шаблони с лиценз изискват запазване на връзката към ресурса, откъдето са получени).

Избираме подходящ шаблон — там има за най-различни случаи, сваляме архива и го разархивираме в каталога /share/nginx/html; можем да го направим вече от компютъра си, след което редактираме шаблона (тук ще са необходими минимални познания по HTML, за да не нарушим структурата) и заменяме графиката, както е показано на изображението по-долу.

Разполагане на сайт на домашния рутер

Резюме: рутерът е напълно подходящ за хостване на лек сайт; всъщност, ако не се предвижда голямо натоварване, може да се инсталира и php, и да се експериментира с по-сложни проекти (поглеждам към nextcloud/owncloud; изглежда, че има успешни инсталации на такова желязо). Възможността за инсталиране на пакети увеличава полезността му — например, когато трябваше да защитя RDP порта на компютъра в локалната мрежа, инсталирах knockd на рутера — и пренасочването на порта към компютъра се отваряше само след port knocking.

Защо рутер, а не обикновен компютър? Рутерът е едно от малкото компютърни устройства, които работят денонощно в много домове; домашният рутер обикновено е абсолютно безшумен, а лек сайт с по-малко от сто посещения на ден няма да му създаде никакво напрежение.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster