Nous hébergeons le site sur un routeur domestique

J'ai longtemps voulu «toucher» les services Internet en configurant un serveur Web à partir de rien et en le diffusant sur Internet. Dans cet article, je souhaite partager mon expérience de la transformation d'un routeur domestique d'un appareil étroitement fonctionnel en un serveur presque à part entière.



Tout a commencé avec le fait que le routeur TP-Link TL-WR1043ND, qui servait fidèlement, a cessé de répondre aux besoins du réseau domestique, je voulais une bande de 5 GHz et un accès rapide aux fichiers sur un lecteur connecté au routeur. Après avoir parcouru les forums spécialisés (w3bsit3-dns.com, ixbt), les sites avec des critiques et regardé la gamme de magasins locaux, j'ai décidé d'acheter Keenetic Ultra.



En faveur de cet appareil en particulier, les bonnes critiques des propriétaires ont fonctionné:



  • pas de problème de surchauffe (ici nous avons dĂ» abandonner les produits Asus);
  • fiabilitĂ© dans le travail (ici j'ai barrĂ© TP-Link);
  • facilitĂ© de configuration (j'avais peur de ne pas faire face et barrĂ© MikroTik).


J'ai dû accepter les inconvénients:



  • pas de WiFi6, je voulais prendre du matĂ©riel avec une marge pour l'avenir;
  • 4 ports LAN, j'en voulais plus, mais ce n'est plus une catĂ©gorie domestique.


En conséquence, nous avons ce "serveur":







  • Ă  gauche, le terminal optique de Rostelecom;
  • Ă  droite, notre routeur expĂ©rimental;
  • un fil vers le routeur est connectĂ© au SSD m.2 128 Go, placĂ© dans une boĂ®te USB3 d'aliexpress, maintenant il est parfaitement fixĂ© au mur;
  • au premier plan se trouve une rallonge avec dĂ©connexion indĂ©pendante des prises, le fil qui en part va Ă  un onduleur bon marchĂ©;
  • en arrière-plan, il y a un paquet de paires torsadĂ©es - au stade de la rĂ©novation de l'appartement, j'ai immĂ©diatement prĂ©vu des prises RJ45 aux endroits oĂą l'Ă©quipement Ă©tait censĂ© ĂŞtre situĂ©, afin de ne pas dĂ©pendre de l'encombrement WiFi.


Donc, nous avons l'Ă©quipement, nous devons le configurer:







  • la configuration initiale du routeur prend environ 2 minutes, nous indiquons les paramètres de connexion au fournisseur (mon terminal optique est commutĂ© en mode pont, la connexion PPPoE est Ă©tablie par le routeur), le nom du rĂ©seau WiFi et le mot de passe - en gros tout, le routeur dĂ©marre et fonctionne.






Nous avons proposé la redirection des ports externes vers les ports du routeur lui-même dans la section "Règles réseau - Transfert":











Vous pouvez maintenant passer à la partie "avancée", ce que je voulais du routeur:



  1. fonctionnalité d'un petit NAS pour un réseau domestique;
  2. agissant en tant que serveur Web pour plusieurs pages privées;
  3. fonctionnalité de cloud personnel pour accéder aux données personnelles de n'importe où dans le monde.


Le premier est implémenté dans des outils intégrés, nécessitant peu d'efforts:









Ensuite, nous connectons le lecteur au routeur et l'observons sur l'écran du moniteur système.







Cliquez sur "Disques et imprimantes USB" dans la section "Applications" et configurez un partage dans la section "RĂ©seau Windows":







Et nous avons une ressource réseau qui peut être utilisée avec ordinateurs sous Windows, connexion si nécessaire en tant que disque: net use y: \\ 192.168.1.1 \ SSD / persistent: oui



La vitesse d'un tel NAS improvisé est tout à fait suffisante pour un usage domestique, il utilise tout le gigabit sur le fil, sur WiFi la vitesse est d'environ 400-500 mégabits.







La configuration du stockage est l'une des étapes nécessaires pour configurer le serveur, alors nous devons:

- acheter un domaineet une adresse IP statique (vous pouvez vous en passer en utilisant le DNS dynamique, mais j'avais déjà une adresse IP statique, il s'est donc avéré plus facile d'utiliser les services Yandex gratuits - en déléguant un domaine là - bas , nous obtenons un hébergement DNS et du courrier sur notre domaine);







- configurer les serveurs DNS et ajouter des enregistrements A pointant vers votre adresse IP: il







faut plusieurs heures pour que les paramètres de domaine et de délégation DNS prennent effet, nous configurons donc simultanément le routeur.



Tout d'abord, vous devez installer le référentiel Entware, à partir duquel nous pouvons installer les packages nécessaires sur le routeur. J'ai suivi cette instruction, seulement n'a pas téléchargé le package d'installation via FTP, mais a créé un dossier directement sur le lecteur réseau précédemment connecté et y a copié le fichier de la manière habituelle.



Après avoir obtenu l'accès via SSH, nous changeons le mot de passe avec la commande passwd et installons tous les packages nécessaires avec la commande opkg install [noms de packages]:







Lors de la configuration, les packages suivants ont été installés sur le routeur (la sortie de la commande opkg list-installed):



Liste des paquets
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



Il y a peut-ĂŞtre quelque chose de superflu ici, mais il y a beaucoup d'espace sur le lecteur, donc je ne l'ai pas compris.



Après avoir installé les packages, nous configurons nginx, j'ai essayé avec deux domaines - le second est configuré avec https et pendant que le stub est suspendu. 81 et 433 ports internes au lieu de 80 et 443 sont utilisés, car les panneaux d'administration du routeur sont accrochés aux ports normaux.



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;
            }
        }
}




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;






Pour que le site fonctionne sur https, j'ai utilisé le script déshydraté bien connu, en l'installant selon cette instruction . Ce processus n'a pas posé de difficultés, je suis seulement tombé sur le fait que dans le texte du script pour travailler sur mon routeur, vous devez commenter la ligne dans le fichier /opt/etc/ssl/openssl.cnf:



[openssl_conf]
#engines=engines


Et je note que la génération de dhparams.pem avec la commande "openssl dhparam -out dhparams.pem 2048" sur mon routeur prend plus de 2 heures, sans l'indicateur de progression, j'aurais perdu patience et redémarré.



Après avoir reçu les certificats, redémarrez nginx avec la commande "/opt/etc/init.d/S80nginx restart". En principe, cela termine la configuration, mais le site n'existe pas encore - si nous mettons le fichier index.html dans le répertoire / share / nginx / html, nous verrons un stub.



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




Pour placer joliment les informations, il est plus facile pour un non-professionnel comme moi d'utiliser des modèles prêts à l'emploi, après une longue recherche dans divers répertoires, j'ai trouvé templatemo.com - il existe une bonne sélection de modèles gratuits qui ne nécessitent pas d'attribution obligatoire (ce qui est rare sur Internet, la plupart des modèles de la licence vous obligent à garder un lien vers la ressource d'où ils ont été obtenus).



Nous sélectionnons le modèle approprié - il existe pour une variété de cas, téléchargez l'archive et décompressez-la dans le répertoire / share / nginx / html, vous pouvez le faire à partir de votre ordinateur, puis éditer le modèle (ici, vous avez besoin de connaissances minimales en HTML afin de ne pas casser la structure) et remplacez les graphiques comme indiqué dans l'image ci-dessous.







Résumé: le routeur est tout à fait adapté pour héberger un site léger dessus, en principe - si une charge lourde n'est pas attendue, vous pouvez installer php et expérimenter des projets plus complexes (je regarde nextcloud / owncloud, il semble qu'il y ait des installations réussies sur un tel matériel). La possibilité d'installer des packages augmente son utilité - par exemple, lorsqu'il était nécessaire de protéger le port RDP du PC sur le réseau local, de mettre le routeur à la porte - et la redirection de port vers le PC n'a été ouverte qu'après coup de port.



Pourquoi un routeur et pas un PC ordinaire? Un routeur est l'un des rares matériels informatiques qui fonctionne 24 heures sur 24 dans de nombreux appartements, un routeur domestique est généralement absolument silencieux et un site léger avec moins d'une centaine de visites par jour ne le fatiguera pas du tout.



All Articles