Hosting un sito su un router domestico

Da tempo desideravo «toccare con mano» i servizi internet configurando un server web da zero e rendendolo accessibile su Internet. In questo articolo voglio condividere l'esperienza acquisita nel trasformare un router domestico da dispositivo a bassa funzionalità in un server quasi completo.

Tutto è iniziato quando il fidato router TP-Link TL-WR1043ND ha smesso di soddisfare le esigenze della rete domestica; avevo bisogno della banda a 5 GHz e di un accesso veloce ai file su un'unità collegata al router. Dopo aver consultato forum specializzati (4pda, ixbt), siti di recensioni e guardato l'assortimento dei negozi locali, ho deciso di acquistare il Keenetic Ultra.

La scelta di questo dispositivo è stata influenzata dalle buone recensioni dei proprietari:

  • assenza di problemi di surriscaldamento (qui ho dovuto rinunciare ai prodotti Asus);
  • affidabilità operativa (qui ho escluso TP-Link);
  • facilità di configurazione (temevo di non farcela e ho escluso Microtik).

Ho dovuto fare i conti con alcuni svantaggi:

  • manca WiFi6, avrei voluto un dispositivo con una riserva per il futuro;
  • 4 porte LAN, ne avrei volute di più, ma questa è già una categoria non domestica.

Alla fine, ho ottenuto un «server» come questo:

Hosting un sito su un router domestico

  • a sinistra, terminale ottico di Rostelecom;
  • a destra, il nostro router in prova;
  • cablato al router c'è un m.2 SSD da 128 GB, sistemato in una custodia USB3 acquistata su AliExpress, ora è montato ordinatamente sulla parete;
  • in primo piano, una prolunga con interruttori indipendenti, il cavo da essa va a un UPS economico;
  • nel retro, un fascio di cavi in​​twisted pair — durante la ristrutturazione dell'appartamento ho pianificato RJ45 prese nei luoghi previsti per il posizionamento dell'attrezzatura, per non dipendere dalla congestione del WiFi.

Quindi, abbiamo l'attrezzatura, è necessario configurarla:

Hosting un sito su un router domestico

  • la configurazione primaria del router richiede circa 2 minuti, indichiamo i parametri di connessione al provider (il mio terminale ottico è passato alla modalità bridge, la connessione PPPoE viene attivata dal router), il nome della rete WiFi e la password — in pratica è tutto, il router si avvia e funziona.

Hosting un sito su un router domestico

Impostiamo la port forwarding delle porte esterne sulle porte del router nella sezione 'Regole di rete – Port Forwarding':

Hosting un sito su un router domestico

Hosting un sito su un router domestico

Ora possiamo passare alla parte 'avanzata', ciò che volevo dal router:

  1. funzionalità di un piccolo NAS per la rete domestica;
  2. esecuzione delle funzioni di un server web per alcune pagine personali;
  3. funzionalità del cloud personale per accedere ai dati personali da qualsiasi parte del mondo.

La prima viene realizzata tramite strumenti integrati, senza richiedere sforzi particolari:

  • prendiamo un'unità designata per questo scopo (chiavetta USB, scheda di memoria in un lettore, disco rigido o SSD in un box esterno e formattiamo in Ext4 utilizzando MiniTool Partition Wizard Free Edition (non ho a disposizione un computer con linux, dove è possibile utilizzare strumenti integrati). Se ho capito bene, durante il funzionamento, il sistema scrive solo log sulla chiavetta, quindi, se limitati dopo la configurazione del sistema, è possibile utilizzare anche le schede di memoria, ma se prevedi di scrivere molto e spesso sull'unità, è meglio optare per un SSD o un HDD.

Hosting un sito su un router domestico

Dopo di che, colleghiamo l'unità al router e la vediamo sullo schermo del monitor di sistema.

Hosting un sito su un router domestico

Clicchiamo su «Dischi USB e stampanti» nella sezione «Applicazioni» e configuriamo la risorsa condivisa nella sezione «Rete Windows»:

Hosting un sito su un router domestico

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

La velocità di un NAS improvvisato è più che sufficiente per un utilizzo domestico; tramite cavo utilizza un'intera connessione a un gigabit, mentre via WiFi la velocità si attesta attorno ai 400-500 megabit.

Hosting un sito su un router domestico

La configurazione dello storage è uno dei passi necessari per impostare il server, e ora dobbiamo:
acquistare un dominio e un indirizzo IP statico (si può anche rinunciare a questo, utilizzando il Dynamic DNS, ma io avevo già un IP statico, quindi è stato più semplice approfittare dei servizi gratuiti di Yandexdelegando lì il dominio, otteniamo hosting DNS e email sul nostro dominio);

Hosting un sito su un router domestico

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

Hosting un sito su un router domestico

L'attivazione delle impostazioni di delega del dominio e DNS richiede alcune ore, quindi ci occupiamo parallelamente della configurazione del router.

Per prima cosa, è necessario installare il repository Entware, dal quale potremo installare i pacchetti necessari sul router. Io ho seguito queste istruzioni, solo che non ho caricato il pacchetto di installazione via FTP, ma ho creato una cartella direttamente sul disco di rete precedentemente collegato e ho copiato il file in modo normale.

Dopo aver ottenuto l'accesso via SSH, cambiamo la password con il comando passwd e installiamo con il comando opkg install [имена пакетов] tutti i pacchetti necessari:

Hosting un sito su un router domestico

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

Elenco dei pacchetti
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

Forse qui c'è qualcosa di superfluo, ma c'è molto spazio sul dispositivo di archiviazione, quindi ho deciso di non indagare.

Dopo l'installazione dei pacchetti, configuriamo nginx; ho provato con due domini: sul secondo è configurato https e al momento mostra solo una pagina di avviso. Le porte interne 81 e 433 vengono utilizzate al posto delle normali 80 e 443, poiché sulle porte standard sono attive le interfacce di amministrazione del router.

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;

Per far funzionare il sito su HTTPS, ho utilizzato il noto script dehydrated, installandolo secondo questa guida. Non ho riscontrato difficoltà in questo processo, mi sono solo bloccato su un dettaglio, poiché nel testo dello script per funzionare sul mio router devo commentare la riga nel file /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

E desidero sottolineare che la generazione di dhparams.pem con il comando «openssl dhparam -out dhparams.pem 2048» sul mio router richiede più di 2 ore; se non ci fosse stato l'indicatore di progresso, avrei perso la pazienza e avrei riavviato.

Dopo aver ottenuto i certificati, riavviamo Nginx con il comando "/opt/etc/init.d/S80nginx restart". In linea di principio, la configurazione è terminata, ma il sito non esiste ancora: se mettiamo nella cartella /share/nginx/html il file index.html, vedremo una pagina di benvenuto.

index.html

<!DOCTYPE html>
<html>
<head>
<title>Pagina di test!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Pagina di test!</h1>
<p>Questa è una semplice pagina di test statica, assolutamente nulla di interessante.</p>
</body>
</html>

Per presentare le informazioni in modo gradevole, per un non professionista come me è più semplice utilizzare modelli già pronti; dopo una lunga ricerca tra vari cataloghi, ho trovato templatemo.com — lì c'è una buona selezione di modelli gratuiti che non richiedono attribuzioni obbligatorie (cosa rara su internet, la maggior parte dei modelli richiede di mantenere un link alla risorsa da cui sono stati ottenuti).

Scegliere il modello adatto — ce ne sono per vari casi, scaricare l'archivio e decomprimerlo nella cartella /share/nginx/html, è possibile farlo già dal proprio computer, quindi modificare il modello (serviranno minime conoscenze di HTML per non compromettere la struttura) e sostituire la grafica, come mostrato nell'immagine sottostante.

Hosting un sito su un router domestico

Riassunto: il router è del tutto adeguato per l'hosting di un sito web leggero, in linea di massima — se non ci si aspetta un grande carico, si può installare anche PHP, e sperimentare con progetti più complessi (osservo nextcloud/owncloud, sembra che ci siano installazioni di successo su tale hardware). La possibilità di installare pacchetti ne aumenta l'utilità — ad esempio, quando era necessario proteggere la porta RDP del PC nella rete locale, ho installato knockd sul router — e il port forwarding verso il PC si attivava solo dopo il port knocking.

Perché un router e non un PC normale? Il router è uno dei pochi pezzi di hardware informatico che lavora 24 ore su 24 in molte case, il router domestico è generalmente silenzioso e un sito leggero con meno di cento visitatori al giorno non lo sovraccarica affatto.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster