Hostowanie strony internetowej na routerze domowym

Od dawna chciałem „dotknąć rąk” usług internetowych, konfigurując od podstaw serwer WWW i udostępniając go w Internecie. W tym artykule chcę podzielić się swoim doświadczeniem w przekształceniu domowego routera z wysoce funkcjonalnego urządzenia w niemal pełnoprawny serwer.

Wszystko zaczęło się od tego, że router TP-Link TL-WR1043ND, który służył wiernie, przestał spełniać potrzeby sieci domowej, zależało mi na paśmie 5 GHz i szybkim dostępie do plików na urządzeniu magazynującym podłączonym do routera . Po przejrzeniu specjalistycznych forów (4pda, ixbt), stron z recenzjami i zapoznaniu się z asortymentem lokalnych sklepów, zdecydowałem się na zakup Keenetic Ultra.

Dobre recenzje właścicieli zadziałały na korzyść tego konkretnego urządzenia:

  • brak problemów z przegrzaniem (tutaj musieliśmy zrezygnować z produktów Asusa);
  • niezawodność działania (tutaj przekreśliłem TP-Link);
  • łatwy w konfiguracji (bałem się, że sobie nie poradzę i przekreśliłem Microtik).

Musiałem pogodzić się z wadami:

  • brak WiFi6, chciałem sprzęt zabrać z rezerwą na przyszłość;
  • 4 porty LAN, chciałem więcej, ale to już nie jest kategoria domowa.

W rezultacie otrzymaliśmy ten „serwer”:

Hostowanie strony internetowej na routerze domowym

  • po lewej stronie terminal optyczny Rostelecom;
  • po prawej stronie nasz eksperymentalny router;
  • leżący w pobliżu dysk SSD m.2 128 GB, umieszczony w pudełku USB3 z Aliexpress, jest podłączony przewodem do routera, teraz jest starannie zamontowany na ścianie;
  • na pierwszym planie przedłużacz z niezależnie odłączonymi gniazdami, przewód z niego idzie do niedrogiego UPS;
  • w tle wiązka skrętek - już na etapie remontu mieszkania od razu zaplanowałem gniazda RJ45 w miejscach, w których miał stanąć sprzęt, aby nie być uzależnionym od zaśmiecania WiFi.

Mamy więc sprzęt, pozostaje go skonfigurować:

Hostowanie strony internetowej na routerze domowym

  • Wstępna konfiguracja routera trwa około 2 minut, podajemy dostawcy parametry połączenia (mój terminal optyczny przełącza się w tryb mostkowy, połączenie PPPoE podnosi router), nazwę sieci WiFi i hasło – w zasadzie to wszystko , router uruchamia się i działa.

Hostowanie strony internetowej na routerze domowym

Przekierowanie portów zewnętrznych na porty samego routera ustawiamy w sekcji „Reguły sieciowe - Przekazywanie”:

Hostowanie strony internetowej na routerze domowym

Hostowanie strony internetowej na routerze domowym

Teraz możemy przejść do części „zaawansowanej”, czyli tego, czego oczekiwałem od routera:

  1. funkcjonalność małego NAS-a dla sieci domowej;
  2. wykonywanie funkcji serwera WWW dla kilku stron prywatnych;
  3. funkcjonalność chmury osobistej umożliwiająca dostęp do danych osobowych z dowolnego miejsca na świecie.

Pierwszy realizowany jest za pomocą wbudowanych narzędzi, nie wymagając dużego wysiłku:

  • Bierzemy dysk przeznaczony do tej roli (pendrive, karta pamięci w czytniku kart, dysk twardy lub dysk SSD w pudełku zewnętrznym i formatujemy go do Ext4 za pomocą Kreator partycji MiniTool w wersji bezpłatnej (Nie mam pod ręką komputera z Linuksem, da się to dzięki wbudowanym narzędziom). Jak rozumiem, podczas pracy system zapisuje tylko logi na pendrive, więc jeśli ograniczysz je po skonfigurowaniu systemu, możesz też skorzystać z kart pamięci, jeśli planujesz dużo i często zapisywać na dysk - SSD lub HDD jest lepszy.

Hostowanie strony internetowej na routerze domowym

Następnie podłączamy dysk do routera i obserwujemy go na ekranie monitora systemu

Hostowanie strony internetowej na routerze domowym

Kliknij „Napędy i drukarki USB” w sekcji „Aplikacje” i skonfiguruj udział w sekcji „Sieć Windows”:

Hostowanie strony internetowej na routerze domowym

I mamy zasób sieciowy, z którego można korzystać z komputerów z systemem Windows, łącząc się w razie potrzeby jako dysk: użycie sieci y: \192.168.1.1SSD /persistent:yes

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

Hostowanie strony internetowej na routerze domowym

Konfiguracja pamięci masowej jest jednym z niezbędnych kroków do skonfigurowania serwera, następnie potrzebujemy:
- kup domenę i statyczny adres IP (można się bez tego obejść stosując Dynamiczny DNS, ale ja miałem już statyczny adres IP, więc okazało się, że jest łatwiejszy w użyciu bezpłatne usługi Yandex - delegując tam domenę, otrzymujemy hosting DNS i pocztę w naszej domenie);

Hostowanie strony internetowej na routerze domowym

- skonfiguruj serwery DNS i dodaj rekordy A wskazujące na Twój adres IP:

Hostowanie strony internetowej na routerze domowym

Zanim ustawienia domeny i delegowania DNS zaczną obowiązywać, może minąć kilka godzin, dlatego jednocześnie konfigurujemy router.

Na początek musimy zainstalować repozytorium Entware, z którego będziemy mogli zainstalować niezbędne pakiety na routerze. Skorzystałem ta instrukcja, po prostu nie przesyłałem pakietu instalacyjnego przez FTP, ale utworzyłem folder bezpośrednio na wcześniej podłączonym dysku sieciowym i skopiowałem tam plik w zwykły sposób.

Po uzyskaniu dostępu przez SSH zmień hasło za pomocą polecenia passwd i zainstaluj wszystkie niezbędne pakiety za pomocą polecenia opkg install [nazwy pakietów]:

Hostowanie strony internetowej na routerze domowym

Podczas instalacji 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-pakiet - 20190110-2
certyfikaty ca - 20190110-2
coreutils – 8.31-1
coreutils-mktemp - 8.31-1
cron-4.1-3
zwijanie - 7.69.0-1
diffutils - 3.7-2
dropbear - 2019.78-3
wydanie entware - 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
liblkid — 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
biblioteka - 2.27-9
libslang2 - 2.3.2-4
libssh2 - 1.9.0-2
libssp - 8.3.0-9
libstdcpp - 8.3.0-9
libuid - 2.35.1-1
libxml2 - 2.9.10-1
lokalizacje - 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
biedny box - 1.31.1-2
terminfo - 6.2-1
zlib - 1.2.11-3
strefainfo-azja - 2019c-1
strefainfo-europe - 2019c-1

Być może było tu coś zbędnego, ale miejsca na dysku było sporo, więc nie zawracałem sobie głowy zaglądaniem w to.

Po zainstalowaniu pakietów konfigurujemy nginx, próbowałem z dwiema domenami - druga jest skonfigurowana z https i na razie jest en. Porty wewnętrzne 81 i 433 są używane zamiast 80 i 443, ponieważ panel administracyjny routera zawiesza się na normalnych portach.

itp/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;

Aby strona działała poprzez https użyłem dobrze znanego skryptu odwodnionego, instalując go za pomocą ten podręcznik. Proces ten nie sprawił żadnych trudności, natknąłem się jedynie na fakt, że w tekście skryptu do pracy na moim routerze musisz skomentować linię w pliku /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

I zauważam, że wygenerowanie pliku dhparams.pem za pomocą polecenia „openssl dhparam -out dhparams.pem 2048” na moim routerze zajmuje ponad 2 godziny, gdyby nie wskaźnik postępu, straciłbym cierpliwość i uruchomiłbym się ponownie.

Po otrzymaniu certyfikatów zrestartuj Nginx za pomocą polecenia „/opt/etc/init.d/S80nginx restart”. W zasadzie instalacja jest zakończona, ale nie ma jeszcze strony internetowej - jeśli umieścimy plik indeks.html w katalogu /share/nginx/html, zobaczymy skrót.

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>

Aby pięknie umieścić informacje, takiemu laikowi jak ja łatwiej jest skorzystać z gotowych szablonów; po długich poszukiwaniach w różnych katalogach znalazłem szablonmo.com - istnieje duży wybór bezpłatnych szablonów, które nie wymagają podania autorstwa (co jest rzadkością w Internecie; większość szablonów w licencji wymaga zapisania linku do zasobu, z którego zostały pobrane).

Wybieramy odpowiedni szablon - są dla różnych przypadków, pobieramy archiwum i rozpakowujemy do katalogu /share/nginx/html, można to zrobić ze swojego komputera, następnie edytujemy szablon (tutaj będziesz potrzebować minimalnej wiedzy HTML, aby nie zepsuć struktury) i zastąpić grafikę tak, jak pokazano na poniższym rysunku.

Hostowanie strony internetowej na routerze domowym

Podsumowanie: router w zasadzie całkiem nadaje się do hostowania na nim lekkiej strony internetowej - jeśli nie spodziewasz się dużego obciążenia, możesz zainstaluj i phpi eksperymentuj z bardziej złożonymi projektami (patrzę na nextcloud/owncloud, wydaje się, że instalacje na takim sprzęcie są udane). Możliwość instalacji pakietów zwiększa jego użyteczność - np. gdy trzeba było chronić port RDP komputera w sieci lokalnej, zainstalowałem pukanie na routerze - a przekierowanie portów do komputera otwierało się dopiero po pukaniu portów.

Dlaczego router, a nie zwykły komputer? Router to jeden z nielicznych elementów sprzętu komputerowego, który w wielu mieszkaniach pracuje całą dobę, router domowy jest zazwyczaj absolutnie cichy, a lekka witryna z mniej niż setką odwiedzin dziennie w ogóle mu nie przeszkadza.

Źródło: www.habr.com

Dodaj komentarz