Pubblica il sito sul router domestico

Da tempo desideravo "toccare con mano" i servizi internet, configurando un server web da zero e portandolo online. In questo articolo voglio condividere l'esperienza acquisita trasformando un router domestico da dispositivo a funzionalità limitata a un vero e proprio server.

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

A favore di questo dispositivo hanno giocato le buone recensioni dei proprietari:

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

Ho dovuto fare i conti con alcuni svantaggi:

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

Alla fine è venuta fuori una "configurazione da server":

Pubblica il sito sul router domestico

  • a sinistra un terminale ottico di Ростелеком;
  • a destra il nostro router da test;
  • collegato al router c'è un m.2 SSD da 128 GB che giaceva inutilizzato, inserito in una custodia USB3 da AliExpress, ora è fissato ordinatamente al muro;
  • in primo piano un prolungatore con spegnimento indipendente delle prese, il cavo da esso va a un UPS economico;
  • sullo sfondo un fascio di cavi di rete — durante i lavori di ristrutturazione dell'appartamento ho pianificato fin da subito le prese RJ45 nei posti previsti per il posizionamento della tecnologia, per non dipendere dalla congestione del WiFi.

Dunque, abbiamo l'attrezzatura e dobbiamo configurarla:

Pubblica il sito sul router domestico

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

Pubblica il sito sul router domestico

Imposta il port forwarding delle porte esterne sulle porte del router stesso nella sezione "Regole di rete — Port Forwarding":

Pubblica il sito sul router domestico

Pubblica il sito sul router domestico

Ora possiamo passare alla parte "avanzata", ciò che desideravo dal router:

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

Il primo si realizza con mezzi integrati, senza richiedere sforzi particolari:

  • prendiamo un'unità destinata a questo scopo (chiavetta USB, scheda di memoria in un lettore, disco fisso o SSD in un box esterno e formattiamo in Ext4 con l'aiuto di MiniTool Partition Wizard Free Edition (non ho un computer con linux a portata di mano, lì si possono utilizzare tramite strumenti integrati). A quanto ho capito, durante l'uso il sistema scrive sulla chiavetta solo i log, quindi, se si limitano dopo la configurazione del sistema — è possibile utilizzare anche le schede di memoria, se si prevede di scrivere molto e frequentemente sull'unità — meglio SSD o HDD.

Pubblica il sito sul router domestico

Dopo di ciò colleghiamo l'unità al router e la osserviamo sullo schermo del monitor di sistema

Pubblica il sito sul router domestico

Facciamo clic su «Dischi USB e stampanti» nella sezione «Applicazioni» e configurando la risorsa condivisa nella sezione «Rete Windows»:

Pubblica il sito sul router domestico

Abbiamo così 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 l'uso domestico, utilizza un gigabit via cavo e la velocità via WiFi è di circa 400-500 megabit.

Pubblica il sito sul router domestico

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

Pubblica il sito sul router domestico

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

Pubblica il sito sul router domestico

L'entrata in vigore delle impostazioni di delega del dominio e DNS richiede alcune ore, quindi nel frattempo ci occupiamo della configurazione del router.

Per cominciare, è necessario installare il repository Entware, da cui possiamo installare i pacchetti necessari sul router. Ho utilizzato questa guida, 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.

Ottenuto l'accesso via SSH, cambiamo la password con il comando passwd e installiamo con il comando opkg install [nomi dei pacchetti] tutti i pacchetti necessari:

Pubblica il sito sul router domestico

Durante la configurazione, sul router risultano 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

Potrebbe esserci qualcosa di superfluo qui, ma c'è molto spazio di archiviazione, quindi non mi sono preoccupato.

Dopo aver installato i pacchetti, configuriamo nginx, ho provato con due domini — sul secondo è impostato https, e per ora c'è una pagina di attesa. Le porte interne 81 e 433 sono usate al posto di 80 e 443, poiché le interfacce di gestione del router sono occupate sulle porte normali.

etc/nginx/nginx.conf

utente  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;
        #Supporto SSL
        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 istruzione. Questo processo non ha presentato difficoltà, mi sono solo bloccato su un punto in cui nel testo dello script per il funzionamento sul mio router devo commentare la riga nel file /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

E voglio 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 fosse stato per l'indicatore di avanzamento, avrei perso la pazienza e riavviato.

Dopo aver ricevuto i certificati, riavviamo nginx con il comando "\/opt\/etc\/init.d\/S80nginx restart". Fondamentalmente, a questo punto la configurazione è conclusa, ma il sito ancora non c'è — se mettiamo nella cartella \/share\/nginx\/html un file index.html, vedremo la pagina di attesa.

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 niente 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 aver esaminato a lungo vari cataloghi, ho trovato templatemo.com Ci sono buone scelte di modelli gratuiti che non richiedono l'indicazione obbligatoria dell'autore (cosa rara su Internet; la maggior parte dei modelli con licenza richiede di mantenere il link alla risorsa da cui sono stati ottenuti).

Scegliamo un modello adatto: ce ne sono per i più svariati casi, scarichiamo l'archivio e lo estraiamo nella cartella /share/nginx/html. Possiamo farlo già dal nostro computer, poi modifichiamo il modello (sono necessarie conoscenze minime di HTML per non compromettere la struttura) e sostituiamo la grafica, come mostrato nell'immagine qui sotto.

Pubblica il sito sul router domestico

Riassunto: il router è più che adatto per ospitare un sito leggero; in sostanza, se non ci si aspetta un carico elevato, si può installare anche PHP, ed esperimentare con progetti più complessi (sto guardando a Nextcloud/Owcloud; 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 del PC nella rete locale, ho installato Knockd sul router: e il port forwarding al PC si apriva solo dopo il port knocking.

Perché proprio un router, e non un normale PC? Il router è una delle poche macchine che funzionano 24 ore su 24 e sono presenti in molte abitazioni; un router domestico è solitamente assolutamente silenzioso e un sito leggero con meno di cento visitatori al giorno non lo stressa 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