Размяшчаем сайт на хатнім роўтары

Мне даўно хацелася "пакратаць рукамі" інтэрнэт-сэрвісы, настроіўшы вэб-сервер з нуля і выпусціўшы яго ў Інтэрнэт. У гэтым артыкуле жадаю падзяліцца атрыманым досведам ператварэння хатняга роўтара з вузкафункцыянальнай прылады ў практычна паўнавартасны сервер.

Пачалося ўсё з таго, што які служыў верай і праўдай роўтар TP-Link TL-WR1043ND перастаў задавальняць запатрабаванні хатняй сеткі, захацелася 5Ггц дыяпазону і хуткага доступу да файлаў на назапашвальніку, падлучаным да роўтара. Прагледзеўшы профільныя форумы (4pda, ixbt), сайты з водгукамі і паглядзеўшы на асартымент мясцовых крам - вырашыў набыць Keenetic Ultra.

На карысць менавіта гэтай прылады спрацавалі добрыя водгукі ўладальнікаў:

  • адсутнасць праблем з перагрэвам (тут прыйшлося адмовіцца ад прадукцыі Asus);
  • надзейнасць у працы (тут выкрасліў TP-Link);
  • прастата ў наладзе (пабаяўся не справіцца і выкрасліў Microtik).

Прыйшлося прымірыцца з мінусамі:

  • няма WiFi6, хацелася ўзяць абсталяванне з запасам на будучыню;
  • 4 LAN порта, хацелася больш, але гэта ўжо не хатняя катэгорыя.

У выніку атрымалася вось такая "серверная":

Размяшчаем сайт на хатнім роўтары

  • злева аптычны тэрмінал Растэлекама;
  • справа наш паддоследны роўтэр;
  • провадам да роўтара падлучаны заваляўшыся m.2 SSD на 128 ГБ, змешчаны ў скрынку USB3 з аліэкспрэса, цяпер ён акуратна замацаваны на сценцы;
  • на пярэднім плане падаўжальнік з незалежным адключэннем разетак, провад ад яго ідзе да недарагога UPS;
  • на заднім плане пучок вітай пары - на этапе рамонту кватэры адразу запланаваў RJ45 разеткі ў месцах меркаванага размяшчэння тэхнікі, каб не залежаць ад засмечанасці WiFi.

Такім чынам, у нас ёсць абсталяванне, неабходна яго наладзіць:

Размяшчаем сайт на хатнім роўтары

  • першасная налада роўтара займае каля 2 хвілін, паказваем параметры падлучэння да правайдэра (у мяне аптычны тэрмінал пераключаны ў рэжым брыджа, PPPoE злучэнне паднімае роўтар), назоў WiFi сеткі і пароль — у прынцыпе ўсё, роўтар запускаецца і працуе.

Размяшчаем сайт на хатнім роўтары

Ставім пераадрасаванне знешніх партоў на парты самага роўтара ў раздзеле "Сеткавыя правілы - Пераадрасацыя":

Размяшчаем сайт на хатнім роўтары

Размяшчаем сайт на хатнім роўтары

Цяпер можна перайсці да «прасунутай» часткі, чаго я хацеў ад роўтара:

  1. функцыянал невялікага NAS для хатняй сеткі;
  2. выкананне функцый вэб-сервера для некалькіх прыватных старонак;
  3. функцыянал персанальнага аблокі для доступу да асабістых дадзеных з любой кропкі свету.

Першае рэалізуецца ўбудаванымі сродкамі, не патрабуючы асаблівых намаганняў:

  • бярэм прызначаны для гэтай ролі назапашвальнік (флэшку, карту памяці ў картрыдары, цвёрдая кружэлка або SSD у вонкавым боксе і фарматуем у Ext4 з дапамогай Бясплатнае выданне MiniTool Partition Wizard (у мяне няма кампутара з linux пад рукой, тамака можна ўбудаванымі сродкамі). Як я разумею, пры працы сістэма піша на флешку толькі логі, таму, калі іх абмежаваць пасля налады сістэмы - можна выкарыстоўваць і карты памяці, калі плануеце шмат і часта пісаць на назапашвальнік - лепш SSD або HDD.

Размяшчаем сайт на хатнім роўтары

Пасля гэтага падлучальны назапашвальнік да роўтара і назіраем яго на экране сістэмнага манітора

Размяшчаем сайт на хатнім роўтары

Пераходзім пстрычкай па «USB-дыскі і друкаркі» у раздзел «Дадаткі» і наладжваем агульны рэсурс у раздзеле «Сетка Windows»:

Размяшчаем сайт на хатнім роўтары

І ў нас ёсць сеткавы рэсурс, які можна выкарыстоўваць з кампутараў пад 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

user  nobody;
worker_processes  1;
#error_log  /opt/var/log/nginx/error.log;
#error_log  /opt/var/log/nginx/error.log  notice;
#error_log  /opt/var/log/nginx/error.log  info;
#pid        /opt/var/run/nginx.pid;

events {
    worker_connections  64;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  /opt/var/log/nginx/access.log main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

server {
    listen 81;
    server_name milkov.su www.milkov.su;
    return 301 https://milkov.su$request_uri;
}

server {
        listen 433 ssl;
        server_name milkov.su;
        #SSL support
        include ssl.conf;
        location / {
            root   /opt/share/nginx/html;
            index  index.html index.htm;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
            }
        }
}
</spoiler>
<spoiler title="etc/nginx/ssl.conf">
ssl_certificate /opt/etc/nginx/certs/milkov.su/fullchain.pem;
ssl_certificate_key /opt/etc/nginx/certs/milkov.su/privkey.pem;
ssl_ciphers '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 on;
ssl_dhparam /opt/etc/nginx/dhparams.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_stapling on;

Для таго, каб сайт працаваў па 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.

Чаму менавіта роўтар, а не звычайны PC? Роўтар - адна з нямногіх кампутарных жалязяк, якія кругласутачна працуюць у многіх кватэрах, хатні роўтэр звычайна абсалютна бясшумны і лёгкі сайт з лікам наведванняў у суткі менш за сотню яго зусім не напружыць.

Крыніца: habr.com

Дадаць каментар