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":

- 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:

- 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.

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


Ora possiamo passare alla parte "avanzata", ciò che desideravo dal router:
- funzionalità di un piccolo NAS per la rete domestica;
- funzioni di server web per alcune pagine personali;
- 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 (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.

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

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

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.

La configurazione dello storage è uno dei passaggi necessari per impostare il server, successivamente dobbiamo:
— 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 — , otteniamo hosting DNS e email sul nostro dominio);

— e aggiungere record A che puntano al tuo IP:

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 , 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:

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 . 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 /opt/etc/ssl/openssl.cnf:
[openssl_conf]
#engines=enginesE 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 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.

Riassunto: il router è più che adatto per ospitare un sito leggero; in sostanza, se non ci si aspetta un carico elevato, si può , 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
