Umieszczamy stronę na domowym routerze

Od dawna chciałem "dotknąć rękami" usług internetowych, konfigurując serwer WWW od podstaw i wypuszczając go do Internetu. W tym artykule chcę podzielić się zdobytym doświadczeniem w przekształcaniu domowego routera z urządzenia o ograniczonej funkcjonalności w praktycznie pełnoprawny serwer.

Zaczęło się od tego, że wieloletni router TP-Link TL-WR1043ND przestał spełniać potrzeby domowej sieci, chciałem pasma 5 GHz i szybkiego dostępu do plików na podłączonym do routera nośniku. Po przeszukaniu branżowych forów (4pda, ixbt), stron z recenzjami i zapoznaniu się z asortymentem lokalnych sklepów zdecydowałem się na zakup Keenetic Ultra.

Na rzecz tego urządzenia przemawiały dobre opinie właścicieli:

  • brak problemów z przegrzewaniem (musiałem więc zrezygnować z produktów Asus);
  • niezawodność w pracy (wyeliminowałem TP-Link);
  • prosta konfiguracja (bałem się, że sobie nie poradzę, więc wyeliminowałem Microtik).

Musiałem pogodzić się z minusami:

  • brak WiFi 6, chciałem mieć sprzęt z zapasem na przyszłość;
  • 4 porty LAN, chciałem więcej, ale to już nie była kategoria domowa.

W rezultacie powstała taka "serwerowa":

Umieszczamy stronę na domowym routerze

  • po lewej stronie terminal optyczny Rostelecomu;
  • po prawej nasz buldog;
  • do routera podłączony jest zapomniany m.2 SSD o pojemności 128 GB, umieszczony w obudowie USB3 z AliExpress, teraz jest starannie przymocowany do ściany;
  • na pierwszym planie przedłużacz z niezależnym wyłącznikiem gniazdek, przewód od niego prowadzi do taniego UPS;
  • na tylnej stronie wiązka skrętki — na etapie remontu mieszkania od razu zaplanowałem gniazdka RJ45 w miejscach przewidywanego umiejscowienia sprzętu, aby nie zależeć od zatorów w sygnale WiFi.

I tak mamy sprzęt, trzeba go skonfigurować:

Umieszczamy stronę na domowym routerze

  • pierwsza konfiguracja routera zajmuje około 2 minut, podajemy parametry połączenia z dostawcą (mam terminal optyczny przełączony w tryb bridge, połączenie PPPoE nawiązuje router), nazwa sieci WiFi i hasło — w zasadzie wszystko, router uruchamia się i działa.

Umieszczamy stronę na domowym routerze

Ustawiamy przekierowanie portów zewnętrznych na porty samego routera w sekcji "Reguły sieciowe — Przekierowanie":

Umieszczamy stronę na domowym routerze

Umieszczamy stronę na domowym routerze

Teraz możemy przejść do "zaawansowanej" części, czego chciałem od routera:

  1. funkcjonalność małego NAS dla domowej sieci;
  2. pełnienie funkcji serwera WWW dla kilku prywatnych stron;
  3. Funkcjonalność osobistej chmury do dostępu do danych osobistych z dowolnego miejsca na świecie.

Pierwsze realizowane jest za pomocą wbudowanych narzędzi, nie wymagając szczególnych wysiłków:

  • bierzemy nośnik przeznaczony do tej roli (pendrive, kartę pamięci w czytniku, dysk twardy lub SSD w zewnętrznej obudowie i formatujemy go w Ext4 przy użyciu MiniTool Partition Wizard Free Edition (nie mam pod ręką komputera z systemem linux, można to zrobić przy użyciu wbudowanych narzędzi). Z tego co rozumiem, w trakcie pracy system zapisuje na pendrive tylko logi, więc jeśli je ograniczymy po skonfigurowaniu systemu — można używać również kart pamięci, jednak jeśli planujemy dużo i często zapisywać na nośniku — lepiej użyć SSD lub HDD.

Umieszczamy stronę na domowym routerze

Po tym łączymy nośnik z routerem i obserwujemy go na ekranie monitora systemowego.

Umieszczamy stronę na domowym routerze

Przechodzimy klikając na "Dyski USB i drukarki" w sekcji "Aplikacje" i konfigurujemy współdzielony zasób w sekcji "Sieć Windows":

Umieszczamy stronę na domowym routerze

I mamy zasób sieciowy, który można wykorzystać z komputerów z Windows, podłączając w razie potrzeby jako dysk: net use y: \\192.168.1.1SSD /persistent:yes

Prędkość takiego improwizowanego NAS jest całkowicie wystarczająca do domowego użytku, po kablu wykorzystuje cały gigabit, a po Wi-Fi prędkość wynosi około 400-500 megabitów.

Umieszczamy stronę na domowym routerze

Konfiguracja pamięci — jeden z koniecznych kroków w konfiguracji serwera, następnie musimy:
zakupić domenę i statyczny adres IP (można to zrobić bez tego, korzystając z Dynamic DNS, ale statyczny IP już miałem, więc łatwiej było skorzystać z bezpłatnych usług Yandexudelegując do nich domenę, otrzymujemy hosting DNS i pocztę na swojej domenie);

Umieszczamy stronę na domowym routerze

skonfigurować serwery DNS i dodać rekordy A wskazujące na Twój IP:

Umieszczamy stronę na domowym routerze

Wdrożenie ustawień delegowania domeny i DNS zajmuje kilka godzin, więc równolegle zajmujemy się konfiguracją routera.

Na początek należy zainstalować repozytorium Entware, z którego będziemy mogli zainstalować na routerze potrzebne pakiety. Skorzystałem z tej instrukcji, tylko nie przesyłałem pakietu instalacyjnego przez FTP, a stworzyłem folder bezpośrednio na wcześniej podłączonym dysku sieciowym i skopiowałem tam plik w standardowy sposób.

Uzyskując dostęp przez SSH, zmieniamy hasło komendą passwd i instalujemy komendą opkg install [nazwy pakietów] wszystkie potrzebne pakiety:

Umieszczamy stronę na domowym routerze

W trakcie konfiguracji na routerze zostały zainstalowane następujące pakiety (wynik polecenia opkg list-installed):

Lista pakietów
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

Możliwe, że coś tu jest zbędne, ale mam dużo miejsca na nośniku, więc nie zagłębiałem się w to.

Po zainstalowaniu pakietów konfigurujemy nginx, próbowałem z dwoma domenami — na drugiej skonfigurowano https, a na razie jest tylko placeholder. Porty 81 i 433 zamiast 80 i 443 są używane, ponieważ na normalnych portach działają panele administracyjne routera.

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;
            }
        }
}


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;

Aby strona działała przez https, skorzystałem z popularnego skryptu dehydrated, instalując go zgodnie z tym poradnikiem. Proces nie sprawił mi trudności, zaciąłem się tylko na tym, że w treści skryptu, aby działał na moim routerze, muszę zakomentować linię w pliku /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

I zaznaczam, że generacja dhparams.pem poleceniem „openssl dhparam -out dhparams.pem 2048” na moim routerze zajmuje ponad 2 godziny, gdyby nie wskaźnik postępu — straciłbym cierpliwość i zrestartował.

Po otrzymaniu certyfikatów uruchamiamy nginx poleceniem "\/opt\/etc\/init.d\/S80nginx restart". W zasadzie na tym konfiguracja się kończy, ale strony jeszcze nie ma — jeśli włożymy do katalogu \/share\/nginx\/html plik index.html, zobaczymy stronę testową.

index.html

<!DOCTYPE html>
<html>
<head>
<title>Strona testowa!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Strona testowa!</h1>
<p>To prosta, statyczna strona testowa, absolutnie nic interesującego.</p>
</body>
</html>

Aby pięknie zaprezentować informacje, osoba taka jak ja, która nie jest profesjonalistą, łatwiej może skorzystać z gotowych szablonów, po długim przeszukiwaniu różnych katalogów znalazłem templatemo.com — tam jest niezły wybór darmowych szablonów, które nie wymagają podawania autorstwa (co jest rzadkością w Internecie, większość szablonów licencyjnych wymaga zachowania linku do źródła, skąd pochodzą).

Wybieramy odpowiedni szablon — są różne opcje na różne okazje, pobieramy archiwum i rozpakowujemy je do katalogu /share/nginx/html, można to zrobić już z własnego komputera, następnie edytujemy szablon (tu będą potrzebne minimalne umiejętności HTML, aby nie naruszyć struktury) i zamieniamy grafikę, jak pokazano na poniższym rysunku.

Umieszczamy stronę na domowym routerze

Podsumowanie: router nadaje się całkiem nieźle do hostowania lekkiej strony, zasadniczo — jeśli nie przewiduje się dużego obciążenia, można zainstalować też PHP, i eksperymentować z bardziej złożonymi projektami (patrzę na nextcloud/owncloud, wydaje się, że są udane instalacje na takim sprzęcie). Możliwość instalacji pakietów zwiększa jego użyteczność — na przykład, gdy trzeba było zabezpieczyć port RDP komputera w sieci lokalnej, zainstalowałem knockd na routerze — i przekierowanie portu do komputera otwierało się tylko po knockingu portów.

Dlaczego router, a nie zwykły komputer? Router to jedno z niewielu urządzeń komputerowych, które pracują całą dobę w wielu mieszkaniach, domowy router jest zazwyczaj całkowicie bezgłośny, a lekka strona z liczbą odwiedzin dziennie poniżej stu nie będzie mu w ogóle przeszkadzać.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster