Depuis longtemps, j'avais envie de « toucher du doigt » les services Internet, en configurant un serveur web depuis zéro et en le lançant sur Internet. Dans cet article, je souhaite partager mon expérience sur la transformation d'un routeur domestique, passant d'un appareil à fonction limitée à un véritable serveur.
Tout a commencé avec le routeur TP-Link TL-WR1043ND, qui m'a fidÚlement servi mais n'était plus à la hauteur des besoins de mon réseau domestique. J'avais envie de la bande 5GHz et d'un accÚs rapide aux fichiers sur le disque dur connecté au routeur. AprÚs avoir consulté des forums spécialisés (4pda, ixbt), des sites d'avis, et examiné les offres des magasins locaux, j'ai décidé d'acheter le Keenetic Ultra.
Les avis positifs des propriétaires ont pesé en faveur de cet appareil :
- absence de problĂšmes de surchauffe (j'ai dĂ» renoncer aux produits Asus);
- fiabilité en fonctionnement (j'ai éliminé TP-Link);
- simplicité de configuration (j'ai eu peur de ne pas y arriver et j'ai écarté Microtik).
Il a fallu se résigner à quelques inconvénients :
- pas de WiFi6, j'aurais souhaité un équipement avec une marge pour l'avenir;
- 4 ports LAN, j'aurais préféré en avoir plus, mais ce n'est plus dans la catégorie domestique.
Finalement, voici à quoi ressemble ma « configuration serveur » :

- Ă gauche, le terminal optique de Rostelecom;
- Ă droite, notre routeur d'essai;
- par cùble, un SSD m.2 de 128 Go, que j'avais sous la main, connecté dans un boßtier USB3 provenant d'AliExpress, maintenant il est soigneusement fixé au mur;
- au premier plan, une multiprise à interrupteurs indépendants, le cùble de celle-ci va vers un UPS bon marché;
- Ă l'arriĂšre-plan, un faisceau de cĂąbles enroulĂ©s â lors des travaux de rĂ©novation de l'appartement, j'avais planifiĂ© des prises RJ45 aux emplacements prĂ©vus pour l'Ă©quipement, afin de ne pas dĂ©pendre d'un WiFi encombrĂ©.
Donc, nous avons le matériel, il faut maintenant le configurer :

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

Nous mettons en place la redirection des ports externes vers les ports du routeur dans la section « RĂšgles rĂ©seau â Redirection » :


Il est maintenant temps de passer à la partie « avancée », ce que je voulais du routeur :
- les fonctionnalités d'un petit NAS pour le réseau domestique;
- l'exécution des fonctions de serveur web pour plusieurs petites pages personnelles;
- les fonctionnalitĂ©s du cloud personnel pour accĂ©der Ă vos donnĂ©es personnelles de n'importe oĂč dans le monde.
La premiÚre s'effectue à l'aide des outils intégrés, sans nécessiter d'efforts particuliers :
- nous prenons un périphérique prévu à cet effet (clé USB, carte mémoire dans un lecteur, disque dur ou SSD dans un boßtier externe) et formatons en Ext4 à l'aide de ((je n'ai pas d'ordinateur avec Linux sous la main, là , on peut utiliser les outils intégrés). Comme je le comprends, lors de l'utilisation, le systÚme n'écrit sur la clé USB que des journaux, donc, si on les limite aprÚs la configuration du systÚme - on peut aussi utiliser des cartes mémoire, si vous prévoyez d'écrire beaucoup et souvent sur le périphérique - il est préférable d'opter pour un SSD ou un HDD.

AprÚs cela, nous connectons le périphérique au routeur et observons son apparition sur l'écran du moniteur systÚme.

Nous cliquons sur « USB-disques et imprimantes » dans la section « Applications » et configurons la ressource partagée dans la section « Réseau Windows » :

Et nous avons une ressource réseau que nous pouvons utiliser depuis des ordinateurs sous Windows, en la connectant au besoin comme un disque : net use y: \\192.168.1.1SSD /persistent:yes
La vitesse de ce NAS improvisé est tout à fait suffisante pour un usage domestique, par cùble il utilise toute la capacité de 1 gigabit, via WiFi la vitesse est d'environ 400-500 mégaoctets.

La configuration du stockage est l'une des étapes nécessaires pour configurer le serveur, ensuite nous devons :
â et une adresse IP statique (on peut s'en passer en utilisant Dynamic DNS, mais j'avais dĂ©jĂ une IP statique, donc il m'a semblĂ© plus facile de profiter â , nous obtenons un hĂ©bergement DNS et une messagerie sur notre domaine) ;

â et ajouter des enregistrements A pointant vers votre IP :

La mise en application des paramÚtres de délégation de domaine et DNS prend plusieurs heures, donc nous nous occupons parallÚlement de la configuration du routeur.
Tout d'abord, il est nécessaire d'installer le dépÎt Entware, à partir duquel nous pourrons installer les paquets nécessaires sur le routeur. J'ai utilisé , seulement je n'ai pas chargé le paquet d'installation par FTP, mais j'ai créé un dossier directement sur le disque réseau précédemment connecté et j'y ai copié le fichier de façon classique.
Une fois l'accÚs SSH obtenu, nous changeons le mot de passe avec la commande passwd et nous installons avec la commande opkg install [noms des paquets] tous les paquets nécessaires :

Au cours de la configuration, les paquets suivants étaient installés sur le routeur (résultat 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 est possible qu'il y ait quelque chose en trop ici, mais il y a beaucoup d'espace de stockage, donc je n'ai pas pris la peine de le vérifier.
AprĂšs l'installation des paquets, je configure nginx. J'ai essayĂ© avec deux domaines â le second est configurĂ© en https, et pour l'instant, un placeholder est affichĂ©. Les ports internes 81 et 433 sont utilisĂ©s Ă la place de 80 et 443, car les interfaces d'administration du routeur sont 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;
}
}
}
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 en https, j'ai utilisé le script connu dehydrated, l'ayant installé selon . Ce processus n'a posé aucune difficulté, je n'ai eu qu'un petit souci avec le texte du script pour qu'il fonctionne sur mon routeur /opt/etc/ssl/openssl.cnf:
[openssl_conf]
#engines=enginesEt 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 obtenu les certificats, nous redĂ©marrons nginx avec la commande "/opt/etc/init.d/S80nginx restart". En principe, la configuration est terminĂ©e, mais le site n'existe pas encore â si nous plaçons un fichier index.html dans le rĂ©pertoire /share/nginx/html, nous verrons un Ă©cran d'arrĂȘt.
index.html
<!DOCTYPE html>
<html>
<head>
<title>Page de test !</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Page de test !</h1>
<p>C'est une simple page de test statique, absolument rien d'intéressant.</p>
</body>
</html>Pour afficher les informations de maniĂšre Ă©lĂ©gante, il est plus simple pour un non-professionnel comme moi d'utiliser des modĂšles prĂȘts Ă l'emploi. AprĂšs une longue recherche dans divers catalogues, j'ai trouvĂ© â il y a un bon choix de modĂšles gratuits, ne nĂ©cessitant pas de mention d'auteur obligatoire (ce qui est rare sur Internet, la plupart des modĂšles sous licence exigent de conserver un lien vers la ressource d'origine).
Choisissons un modĂšle adaptĂ© â il y en a pour toutes sortes de cas, tĂ©lĂ©chargeons l'archive, et dĂ©compressons-la dans le rĂ©pertoire /share/nginx/html, cela peut ĂȘtre fait depuis votre ordinateur, puis nous modifions le modĂšle (des connaissances minimales en HTML seront nĂ©cessaires pour ne pas altĂ©rer la structure) et remplaçons les graphiques, comme indiquĂ© sur l'image ci-dessous.

RĂ©sumĂ© : le routeur est tout Ă fait adaptĂ© pour hĂ©berger un site lĂ©ger, en principe â si aucune forte charge n'est prĂ©vue, on peut , et expĂ©rimenter avec des projets plus complexes (je pense Ă nextcloud/owncloud, il semble qu'il y ait des installations rĂ©ussies sur ce matĂ©riel). La possibilitĂ© d'installer des paquets augmente son utilitĂ© â par exemple, lorsque je devais protĂ©ger le port RDP d'un PC dans le rĂ©seau local, j'ai installĂ© knockd sur le routeur â et le transfert de port vers le PC ne s'ouvrait qu'aprĂšs le port knocking.
Pourquoi un routeur et pas un PC ordinaire ? Le routeur est l'un des rares appareils informatiques qui fonctionne 24 heures sur 24 dans de nombreux appartements, le routeur domestique est généralement totalement silencieux et un site léger avec moins de cent visites par jour ne le mettra absolument pas à l'épreuve.
Source : habr.com
