Hosting di un sito Web sul router di casa

Da tempo desideravo "toccare le mani" sui servizi Internet configurando un server Web da zero e rilasciandolo su Internet. In questo articolo voglio condividere la mia esperienza nella trasformazione di un router domestico da un dispositivo altamente funzionale in un server quasi a tutti gli effetti.

Tutto è iniziato con il fatto che il router TP-Link TL-WR1043ND, che aveva servito fedelmente, non soddisfaceva più le esigenze di una rete domestica; volevo una banda a 5 GHz e un accesso rapido ai file su un dispositivo di archiviazione collegato al router . Dopo aver esaminato forum specializzati (4pda, ixbt), siti con recensioni e aver esaminato l'assortimento di negozi locali, ho deciso di acquistare Keenetic Ultra.

Le buone recensioni dei proprietari hanno lavorato a favore di questo particolare dispositivo:

  • nessun problema di surriscaldamento (qui abbiamo dovuto abbandonare i prodotti Asus);
  • affidabilità operativa (qui ho cancellato TP-Link);
  • facile da configurare (temevo di non poterlo gestire e ho cancellato Microtik).

Ho dovuto fare i conti con gli svantaggi:

  • niente WiFi6, volevo prendere l'attrezzatura con una riserva per il futuro;
  • 4 porte LAN, volevo di più, ma questa non è più una categoria casalinga.

Di conseguenza, abbiamo ottenuto questo “server”:

Hosting di un sito Web sul router di casa

  • a sinistra c'è il terminale ottico di Rostelecom;
  • a destra c'è il nostro router sperimentale;
  • un SSD m.2 da 128 GB in giro, riposto in una scatola USB3 di Aliexpress, è collegato al router con un cavo, ora è montato ordinatamente al muro;
  • in primo piano c'è una prolunga con prese disconnesse indipendentemente, il filo da essa va a un UPS economico;
  • sullo sfondo c'è un mucchio di doppini intrecciati: in fase di ristrutturazione dell'appartamento, ho subito previsto delle prese RJ45 nei luoghi in cui avrebbero dovuto essere collocate le apparecchiature, in modo da non dipendere dal WiFi ingombro.

Quindi, abbiamo l'attrezzatura, dobbiamo configurarla:

Hosting di un sito Web sul router di casa

  • La configurazione iniziale del router dura circa 2 minuti, indichiamo i parametri di connessione al provider (il mio terminale ottico è commutato in modalità bridge, la connessione PPPoE solleva il router), il nome della rete WiFi e la password - in pratica è tutto , il router si avvia e funziona.

Hosting di un sito Web sul router di casa

Impostiamo l'inoltro delle porte esterne alle porte del router stesso nella sezione “Regole di rete - Inoltro”:

Hosting di un sito Web sul router di casa

Hosting di un sito Web sul router di casa

Adesso possiamo passare alla parte “avanzata”, quella che volevo dal router:

  1. funzionalità di un piccolo NAS per una rete domestica;
  2. eseguire funzioni di server web per diverse pagine private;
  3. funzionalità cloud personale per l'accesso ai dati personali da qualsiasi parte del mondo.

Il primo viene implementato utilizzando strumenti integrati, senza richiedere troppi sforzi:

  • Prendiamo un'unità destinata a questo ruolo (unità flash, scheda di memoria in un lettore di schede, disco rigido o SSD in una scatola esterna e formattatela su Ext4 utilizzando MiniTool Partition Wizard Edizione gratuita (Non ho un computer con Linux a portata di mano, è possibile con gli strumenti integrati). A quanto ho capito, durante il funzionamento il sistema scrive solo i registri sull'unità flash, quindi se li limiti dopo aver configurato il sistema, puoi anche utilizzare le schede di memoria se prevedi di scrivere molto e spesso sull'unità: un SSD o L'HDD è migliore.

Hosting di un sito Web sul router di casa

Successivamente, colleghiamo l'unità al router e la osserviamo sullo schermo del monitor di sistema

Hosting di un sito Web sul router di casa

Fare clic su “Unità USB e stampanti” nella sezione “Applicazioni” e configurare la condivisione nella sezione “Rete Windows”:

Hosting di un sito Web sul router di casa

E abbiamo una risorsa di rete che può essere utilizzata da computer Windows, collegandosi come disco se necessario: net use y: \192.168.1.1SSD /persistent:yes

La velocità di un NAS così improvvisato è abbastanza sufficiente per l'uso domestico, su un cavo utilizza l'intero gigabit, su WiFi la velocità è di circa 400-500 megabit.

Hosting di un sito Web sul router di casa

L'impostazione dello storage è uno dei passaggi necessari per configurare il server, quindi abbiamo bisogno di:
- acquistare un dominio e un indirizzo IP statico (puoi farne a meno utilizzando il DNS dinamico, ma avevo già un IP statico, quindi si è rivelato più semplice da usare servizi Yandex gratuiti - delegando lì il dominio, riceviamo hosting DNS e posta sul nostro dominio);

Hosting di un sito Web sul router di casa

- configurare i server DNS e aggiungi i record A che puntano al tuo IP:

Hosting di un sito Web sul router di casa

Sono necessarie diverse ore affinché le impostazioni del dominio e della delega DNS abbiano effetto, quindi stiamo configurando contemporaneamente il router.

Innanzitutto dobbiamo installare il repository Entware, dal quale possiamo installare i pacchetti necessari sul router. Ne ho approfittato questa istruzione, semplicemente non ho caricato il pacchetto di installazione tramite FTP, ma ho creato una cartella direttamente sull'unità di rete precedentemente connessa e ho copiato lì il file nel solito modo.

Dopo aver ottenuto l'accesso tramite SSH, modificare la password con il comando passwd e installare tutti i pacchetti necessari con il comando opkg install [package name]:

Hosting di un sito Web sul router di casa

Durante la configurazione, sul router sono stati installati i seguenti pacchetti (l'output del comando opkg list-installed):

Pacchetto speciale
bash-5.0-3
busybox - 1.31.1-1
pacchetto ca - 20190110-2
certificati ca - 20190110-2
coreutils - 8.31-1
coreutils-mktemp - 8.31-1
cron-4.1-3
arricciatura - 7.69.0-1
diffusi - 3.7-2
dropbear - 2019.78-3
versione-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
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
libcurses - 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
libuide - 2.35.1-1
libxml2-2.9.10-1
localizzazioni - 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

Forse c'era qualcosa di superfluo qui, ma c'era molto spazio sul disco, quindi non mi sono preoccupato di guardarlo.

Dopo aver installato i pacchetti, configuriamo nginx, l'ho provato con due domini: il secondo è configurato con https, e per ora c'è uno stub. Vengono utilizzate le porte interne 81 e 433 invece di 80 e 443, poiché il pannello di amministrazione del router si blocca sulle porte normali.

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

Affinché il sito funzionasse tramite https, ho utilizzato il noto script disidratato, installandolo utilizzando questo manuale. Questo processo non ha causato alcuna difficoltà, mi sono imbattuto solo nel fatto che nel testo dello script per lavorare sul mio router è necessario commentare la riga nel file /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

E noto che generare dhparams.pem con il comando “openssl dhparam -out dhparams.pem 2048” sul mio router richiede più di 2 ore, se non fosse stato per l'indicatore di avanzamento, avrei perso la pazienza e avrei riavviato.

Dopo aver ricevuto i certificati, riavviare nginx con il comando “/opt/etc/init.d/S80nginx restart”. In linea di principio, la configurazione è completa, ma non esiste ancora un sito Web: se inseriamo il file index.html nella directory /share/nginx/html, vedremo uno stub.

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>

Per posizionare bene le informazioni, per un non professionista come me è più semplice utilizzare modelli già pronti; dopo una lunga ricerca tra vari cataloghi, ho trovato templatemo.com - esiste una buona selezione di modelli gratuiti che non richiedono attribuzione (cosa rara su Internet; la maggior parte dei modelli nella licenza richiede il salvataggio di un collegamento alla risorsa da cui sono stati ottenuti).

Selezioniamo un modello adatto: ce ne sono per una varietà di casi, scarichiamo l'archivio e decomprimiamolo nella directory /share/nginx/html, puoi farlo dal tuo computer, quindi modificare il modello (qui avrai bisogno di una conoscenza minima di HTML per non rompere la struttura) e sostituire la grafica come mostrato nella figura sotto.

Hosting di un sito Web sul router di casa

Riepilogo: in linea di principio il router è abbastanza adatto per ospitare un sito Web leggero: se non ti aspetti un carico elevato, puoi farlo installa e phpe sperimentare progetti più complessi (guardo nextcloud/owncloud, sembra che ci siano installazioni riuscite su tale hardware). La possibilità di installare pacchetti ne aumenta l'utilità - ad esempio, quando era necessario proteggere la porta RDP di un PC su una rete locale, ho installato knockd sul router - e il port forwarding al PC veniva aperto solo dopo il port knocking.

Perché un router e non un normale PC? Un router è uno dei pochi componenti hardware del computer che funziona XNUMX ore su XNUMX in molti appartamenti; un router domestico di solito è assolutamente silenzioso e un sito leggero con meno di cento visite al giorno non lo disturberà affatto.

Fonte: habr.com

Aggiungi un commento