Héberger un site Web sur votre routeur domestique

J'ai longtemps voulu « toucher mes mains » aux services Internet en créant un serveur Web à partir de zéro et en le diffusant sur Internet. Dans cet article, je souhaite partager mon expérience dans la transformation d'un routeur domestique d'un appareil hautement fonctionnel en un serveur presque à part entière.

Tout a commencé avec le fait que le routeur TP-Link TL-WR1043ND, qui avait fidèlement servi, ne répondait plus aux besoins d'un réseau domestique ; je voulais une bande 5 GHz et un accès rapide aux fichiers sur un périphérique de stockage connecté au routeur. . Après avoir parcouru des forums spécialisés (4pda, ixbt), des sites de critiques et examiné l'assortiment de magasins locaux, j'ai décidé d'acheter Keenetic Ultra.

Les bonnes critiques des propriétaires ont joué en faveur de cet appareil particulier :

  • aucun problème de surchauffe (ici nous avons dû abandonner les produits Asus) ;
  • fiabilité opérationnelle (ici j'ai barré TP-Link) ;
  • facile à mettre en place (j'avais peur de ne pas pouvoir le gérer et j'ai barré Microtik).

J'ai dû composer avec les inconvénients :

  • pas de WiFi6, je souhaitais prendre du matériel avec une réserve pour l'avenir ;
  • 4 ports LAN, j'en voulais plus, mais ce n'est plus une catégorie maison.

En conséquence, nous avons obtenu ce « serveur » :

Héberger un site Web sur votre routeur domestique

  • à gauche se trouve le terminal optique de Rostelecom ;
  • à droite se trouve notre routeur expérimental ;
  • un SSD m.2 de 128 Go qui traîne, placé dans un boitier USB3 d'Aliexpress, est connecté au routeur avec un fil, maintenant il est soigneusement monté au mur ;
  • au premier plan se trouve une rallonge avec des prises déconnectées indépendamment, dont le fil va à un UPS bon marché ;
  • en arrière-plan il y a un tas de câbles à paires torsadées - au stade de la rénovation de l'appartement, j'ai tout de suite prévu des prises RJ45 aux endroits où les équipements étaient censés se trouver, afin de ne pas dépendre du WiFi encombré.

Donc, nous avons le matériel, il faut le configurer :

Héberger un site Web sur votre routeur domestique

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

Héberger un site Web sur votre routeur domestique

Nous définissons la redirection des ports externes vers les ports du routeur lui-même dans la section « Règles réseau - Redirection » :

Héberger un site Web sur votre routeur domestique

Héberger un site Web sur votre routeur domestique

Nous pouvons maintenant passer à la partie « avancée », ce que je souhaitais du routeur :

  1. fonctionnalité d'un petit NAS pour un réseau domestique ;
  2. exécuter des fonctions de 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.

La première est mise en œuvre à l'aide d'outils intégrés, sans nécessiter beaucoup d'efforts :

  • On prend un disque destiné à ce rôle (lecteur flash, carte mémoire dans un lecteur de carte, disque dur ou SSD dans un boitier externe et on le formate en Ext4 en utilisant MiniTool Partition Wizard Édition gratuite (Je n'ai pas d'ordinateur avec Linux sous la main, c'est possible avec les outils intégrés). Si je comprends bien, pendant le fonctionnement, le système n'écrit que les journaux sur le lecteur flash, donc si vous les limitez après avoir configuré le système, vous pouvez également utiliser des cartes mémoire si vous envisagez d'écrire beaucoup et souvent sur le lecteur - un SSD ou Le disque dur est meilleur.

Héberger un site Web sur votre routeur domestique

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

Héberger un site Web sur votre routeur domestique

Cliquez sur « Clés USB et imprimantes » dans la section « Applications » et configurez le partage dans la section « Réseau Windows » :

Héberger un site Web sur votre routeur domestique

Et nous disposons d'une ressource réseau qui peut être utilisée depuis des ordinateurs Windows, en se connectant en tant que disque si nécessaire : ​​net use y : \192.168.1.1SSD /persistent : oui

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

Héberger un site Web sur votre routeur domestique

La configuration du stockage est l'une des étapes nécessaires pour configurer le serveur, nous avons alors besoin de :
- acheter un domaine et une adresse IP statique (vous pouvez vous en passer en utilisant Dynamic DNS, mais j'avais déjà une IP statique, donc cela s'est avéré plus facile à utiliser services Yandex gratuits - en y déléguant le domaine, nous recevons un hébergement DNS et du courrier sur notre domaine) ;

Héberger un site Web sur votre routeur domestique

- configurer les serveurs DNS et ajoutez des enregistrements A pointant vers votre IP :

Héberger un site Web sur votre routeur domestique

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, nous devons installer le référentiel Entware, à partir duquel nous pouvons installer les packages nécessaires sur le routeur. j'ai profité cette consigne, n'a tout simplement 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 accédé via SSH, modifiez le mot de passe avec la commande passwd et installez tous les packages nécessaires avec la commande opkg install [packagenames] :

Héberger un site Web sur votre routeur domestique

Lors de l'installation, les packages suivants ont été installés sur le routeur (résultat de la commande opkg list-installed) :

Liste des forfaits
coup - 5.0-3
boîte occupée - 1.31.1-1
ca-bundle - 20190110-2
ca-certificats - 20190110-2
coreutils-8.31-1
coreutils-mktemp - 8.31-1
cron-4.1-3
boucle - 7.69.0-1
diffutils-3.7-2
dropbear - 2019.78-3
version 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
bibliothèque - 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
liberté - 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
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
boîte à pauvres - 1.31.1-2
terminfo-6.2-1
zlib-1.2.11-3
zoneinfo-asie - 2019c-1
zoneinfo-europe - 2019c-1

Il y avait peut-être quelque chose de superflu ici, mais il y avait beaucoup d'espace sur le lecteur, donc je n'ai pas pris la peine d'y jeter un coup d'œil.

Après avoir installé les packages, nous configurons nginx, je l'ai essayé avec deux domaines - le second est configuré avec https, et pour l'instant il y a un stub. Les ports internes 81 et 433 sont utilisés à la place de 80 et 443, car le panneau d'administration du routeur se bloque sur les 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;
            }
        }
}
</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;

Pour que le site fonctionne via https, j'ai utilisé le célèbre script déshydraté, en l'installant en utilisant ce manuel. Ce processus n'a posé aucune difficulté, 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 constate que générer 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, la configuration est terminée, mais il n'y a pas encore de site Web - si nous mettons le fichier index.html dans le répertoire /share/nginx/html, nous verrons un 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>

Pour bien placer 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 différents catalogues, j'ai trouvé modèlemo.com - il existe une bonne sélection de modèles gratuits qui ne nécessitent pas d'attribution (ce qui est rare sur Internet ; la plupart des modèles sous licence nécessitent d'enregistrer un lien vers la ressource à partir de laquelle ils ont été obtenus).

Nous sélectionnons un modèle approprié - il y en a 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 depuis votre ordinateur, puis modifiez le modèle (ici, vous aurez besoin d'un minimum de connaissances du HTML afin de ne pas casser la structure) et remplacez les graphiques comme indiqué dans la figure ci-dessous.

Héberger un site Web sur votre routeur domestique

Résumé : le routeur est tout à fait adapté pour y héberger un site Web léger, en principe - si vous ne vous attendez pas à une charge importante, vous pouvez installer et php, et expérimentez des projets plus complexes (je regarde nextcloud/owncloud, il semble y avoir 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 d'un PC sur un réseau local, j'ai installé knockd sur le routeur - et la redirection de port vers le PC n'a été ouverte qu'après la frappe du port.

Pourquoi un routeur et pas un PC classique ? Un routeur est l'un des rares équipements informatiques qui fonctionne XNUMX heures sur XNUMX 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 dérangera pas du tout.

Source: habr.com

Ajouter un commentaire