Găzduim site-ul pe un router de acasă

Îmi doream de mult timp să "explorez" serviciile de internet, configurând un server web de la zero și lansându-l în internet. În această articol, vreau să împărtășesc experiența obținută transformând routerul de acasă dintr-un dispozitiv cu funcții limitate într-un server funcțional.

Totul a început atunci când routerul TP-Link TL-WR1043ND, care a servit cu credință și devotament, a început să nu mai satisfacă nevoile rețelei de acasă; am dorit banda de 5GHz și acces rapid la fișierele de pe unitatea de stocare conectată la router. După ce am consultat forumuri specializate (4pda, ixbt), site-uri cu recenzii și am privit oferta magazinelor locale - am decis să achiziționez Keenetic Ultra.

În favoarea acestui dispozitiv au contat recenziile bune ale utilizatorilor:

  • lipsa problemelor de supraîncălzire (a trebuit să renunț la produsele Asus);
  • fiabilitate în funcționare (aici am eliminat TP-Link);
  • simplicitatea în configurare (mi-a fost frică să nu mă descurc și am eliminat Microtik).

A trebuit să mă împac cu dezavantajele:

  • nu are WiFi6, mi-ar fi plăcut să iau un echipament cu stoc pentru viitor;
  • 4 porturi LAN, mi-ar fi plăcut mai multe, dar aceasta nu este deja o categorie pentru acasă.

În cele din urmă, rezultatul a fost un setup "server":

Găzduim site-ul pe un router de acasă

  • în stânga terminalul optic de la Rostelecom;
  • în dreapta routerul nostru experimental;
  • un SSD m.2 de 128 GB, găsit prin casă, conectat la router printr-un adaptor USB3 de pe AliExpress, acum este montat cu grijă pe perete;
  • în prim-plan, un prelungitor cu oprirea independentă a prizelor, iar cablul de la acesta merge la un UPS ieftin;
  • în fundal, un grup de cablu twisted pair - în timpul renovării apartamentului, am planificat din start prize RJ45 în locurile unde va fi amplasată echipamentul, pentru a nu depinde de aglomerația WiFi.

Așadar, avem echipamentul, trebuie să-l configurăm:

Găzduim site-ul pe un router de acasă

  • configurarea inițială a routerului durează aproximativ 2 minute, specificăm parametrii de conectare la furnizor (terminalul optic este setat în modul bridge, conexiunea PPPoE fiind preluată de router), numele rețelei WiFi și parola — în principiu, asta este tot, routerul este pornit și funcționează.

Găzduim site-ul pe un router de acasă

Setăm redirecționarea porturilor externe către porturile routerului în secțiunea „Reguli de rețea - Redirecționare”:

Găzduim site-ul pe un router de acasă

Găzduim site-ul pe un router de acasă

Acum putem trece la partea „avansată”, ceea ce am dorit de la router:

  1. funcționalitatea unui mic NAS pentru rețeaua de acasă;
  2. îndeplinirea funcțiilor serverului web pentru câteva pagini private;
  3. funcționalitatea unui cloud personal pentru accesul la datele personale din orice colț al lumii.

Primul se realizează prin intermediul uneltelor integrate, fără a necesita eforturi speciale:

  • luăm un dispozitiv destinat acestui rol (stick USB, card de memorie în cititor, hard disk sau SSD în cutie externă și îl formatăm în Ext4 cu ajutorul MiniTool Partition Wizard Free Edition (nu am un computer cu linux la îndemână, acolo se poate face cu unelte integrate). Din câte înțeleg, în timpul funcționării sistemul scrie pe stick doar loguri, așa că, dacă le limităm după configurarea sistemului — putem folosi și carduri de memorie, dacă planificați să scrieți mult și des pe dispozitiv — mai bine SSD sau HDD.

Găzduim site-ul pe un router de acasă

După aceea, conectăm dispozitivul la router și îl observăm pe monitorul sistemului

Găzduim site-ul pe un router de acasă

Facem clic pe „Discuri USB și imprimante” în secțiunea „Aplicații” și configurăm resursa partajată în secțiunea „Rețea Windows”:

Găzduim site-ul pe un router de acasă

Și avem o resursă de rețea pe care o putem folosi cu computerele pe Windows, conectându-l după necesitate ca disc: net use y: \192.168.1.1SSD /persistent:yes

Viteza acestui NAS improvizat este suficientă pentru utilizarea acasă, pe cablu folosește întreaga capacitate de un gigabit, iar pe WiFi viteza este de aproximativ 400-500 megabiți.

Găzduim site-ul pe un router de acasă

Configurarea stocării este unul dintre pașii necesari pentru configurarea serverului, apoi trebuie să:
— achiziționăm un domeniu și o adresă IP statică (se poate și fără aceasta, folosind Dynamic DNS, dar eu aveam deja o adresă IP statică, așa că a fost mai simplu să folosesc serviciile gratuite de la Yandex — delegând acolo domeniul, obținem DNS-hosting și email pe domeniul nostru);

Găzduim site-ul pe un router de acasă

— configurați serverele DNS și adăugați înregistrări A care indică pe IP-ul dvs.:

Găzduim site-ul pe un router de acasă

Intrarea în vigoare a setărilor de delegare a domeniului și DNS durează câteva ore, așa că, în paralel, ne ocupăm de configurarea routerului.

Pentru început, trebuie să instalăm repository-ul Entware, din care vom putea instala pachetele necesare pe router. Eu am folosit această instrucțiune, doar că nu am încărcat pachetul de instalare prin FTP, ci am creat un folder direct pe discul de rețea conectat anterior și am copiat acolo fișierul în mod obișnuit.

Obținând acces prin SSH, schimbăm parola cu comanda passwd și instalăm folosind comanda opkg install [numele pachetelor] toate pachetele necesare:

Găzduim site-ul pe un router de acasă

În timpul configurării, pe router erau instalate următoarele pachete (rezultatul comenzii opkg list-installed):

Lista pachetelor
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

Se pare că aici s-a strecurat ceva în plus, dar am destul spațiu pe unitate, așa că nu am investigat.

După instalarea pachetelor, configurăm nginx; am încercat cu două domenii — pe al doilea am configurat https, iar acum are o pagină de menținere. Porturile interne 81 și 433 sunt folosite în loc de 80 și 443, deoarece pe porturile standard sunt interfețele de administrare ale routerului.

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;

Pentru ca site-ul să funcționeze pe https, am folosit cunoscutul script dehydrated, instalându-l conform aceastei instrucțiuni. Acest proces nu a cauzat dificultăți, am avut doar o mică ezitare la faptul că în textul scriptului pentru a funcționa pe routerul meu trebuie să comentez linia din fișierul /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

Și voi menționa că generarea dhparams.pem cu comanda „openssl dhparam -out dhparams.pem 2048” pe routerul meu durează mai mult de 2 ore, dacă nu ar fi fost indicatorul de progres — aș fi pierdut răbdarea și aș fi făcut un restart.

După obținerea certificatelor, repornim nginx cu comanda "/opt/etc/init.d/S80nginx restart". În principiu, aici se termină configurarea, dar site-ul încă nu există — dacă punem în catalogul /share/nginx/html fișierul index.html, vom vedea o pagină de meniu.

index.html

<!DOCTYPE html>
<html>
<head>
<title>Pagina de test!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Pagina de test!</h1>
<p>Aceasta este o pagină statică de test, absolut nimic interesant.</p>
</body>
</html>

Pentru a aranja informația frumos, pentru un neprofesionist ca mine este mai simplu să folosesc șabloane gata făcute, după o lungă căutare în diferite cataloguri am găsit templatemo.com — există o selecție decentă de șabloane gratuite, care nu necesită indicarea autorului (ceea ce este rar pe internet, majoritatea șabloanelor licențiate cer să păstrezi un link către resursa de unde au fost obținute).

Alegem un șablon potrivit — sunt disponibile pentru cele mai diverse situații, descărcăm arhiva și o extragem în catalogul /share/nginx/html, acest lucru se poate face deja de pe computerul propriu, apoi edităm șablonul (aici sunt necesare minime cunoștințe de HTML, pentru a nu strica structura) și înlocuim grafica, așa cum este arătat în imaginea de mai jos.

Găzduim site-ul pe un router de acasă

Rezumat: routerul este destul de potrivit pentru găzduirea unui site simplu, în principiu — dacă nu se preconizează o încărcătură mare, se poate instala php, și experimenta cu proiecte mai complexe (mă uit la nextcloud/owncloud, pare că există instalări reușite pe astfel de hardware). Posibilitatea de a instala pachete îi crește utilitatea — de exemplu, când a fost nevoie să protejez portul RDP al PC-ului din rețeaua locală, am instalat knockd pe router — și redirecționarea portului către PC se deschidea doar după knocking pe port.

De ce router și nu un PC obișnuit? Routerul este unul dintre puținele dispozitive de calcul care funcționează non-stop în multe apartamente, un router de acasă este de obicei complet silențios și un site ușor cu un număr de vizitatori pe zi mai mic de o sută nu îl va obosi deloc.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster