Lange wilde ik de internetservices 'met mijn eigen handen' ervaren door een webserver vanaf nul in te stellen en deze op het internet te lanceren. In dit artikel wil ik mijn opgedane ervaring delen van het omtoveren van een thuisrouter van een eenfunctioneel apparaat naar een vrijwel volwaardige server.
Het begon allemaal met de betrouwbare TP-Link TL-WR1043ND-router, die niet meer voldeed aan de behoeften van mijn thuisnetwerk; ik wilde de 5GHz-band en snelle toegang tot bestanden op de van de router aangesloten opslag. Na het bekijken van gespecialiseerde forums (4pda, ixbt), opinie-websites en het aanbod in lokale winkels besloot ik de Keenetic Ultra aan te schaffen.
De keuze voor dit specifieke apparaat werd beïnvloed door de goede recensies van gebruikers:
- geen problemen met oververhitting (hier moest ik de producten van Asus laten vallen);
- betrouwbaarheid in gebruik (hier viel TP-Link af);
- gemak van installatie (ik was bang dat ik het niet zou kunnen en liet Microtik vallen).
Ik moest me verzoenen met de nadelen:
- geen WiFi6, ik wilde apparatuur met een toekomstbestendige reserve;
- 4 LAN-poorten, ik had er meer gewild, maar dit valt al niet meer onder de thuiscategorie.
Uiteindelijk is dit wat er toen ontstond:

- links de optische terminal van Rostelecom;
- rechts onze proefrouter;
- met een kabel verbonden aan de router is een ongebruikte m.2 SSD van 128 GB, geplaatst in een USB3-kastje van AliExpress, dat nu netjes aan de muur is bevestigd;
- op de voorgrond een verlengsnoer met onafhankelijke schakelbare stopcontacten, waarvan de kabel naar een goedkope UPS gaat;
- op de achtergrond een bundel netwerkkabel — tijdens de renovatie van het appartement had ik al RJ45-stopcontacten gepland op de plaatsen waar ik de apparatuur zou plaatsen, om niet afhankelijk te zijn van een rommelige WiFi-verbinding.
Dus, we hebben de apparatuur, nu moeten we deze instellen:

- de initiële configuratie van de router duurt ongeveer 2 minuten, we geven de verbindingsparameters aan de provider op (mijn optische terminal is in bridge-modus gezet, de PPPoE-verbinding wordt door de router opgezet), de naam van het WiFi-netwerk en het wachtwoord — in principe is dat alles, de router gaat aan en functioneert.

We stellen port forwarding in naar de poorten van de router in het gedeelte 'Netwerkregels - Doorsturen':


Nu kunnen we doorgaan naar het 'geavanceerde' deel, datgene wat ik van de router verwachtte:
- functionaliteit van een kleine NAS voor het thuisnetwerk;
- de functies van een webserver voor enkele persoonlijke pagina's uitvoeren;
- de functionaliteit van een persoonlijke cloud voor toegang tot persoonlijke gegevens vanaf elke locatie ter wereld.
Het eerste wordt gerealiseerd met ingebouwde middelen, zonder veel inspanning:
- we nemen een opslagmiddel dat hiervoor bedoeld is (een USB-stick, een geheugenkaart in een kaartlezer, een externe harde schijf of SSD en formatteren deze naar Ext4 met behulp van (ik heb geen computer met Linux bij de hand, daar kan dit met ingebouwde middelen). Voor zover ik begrijp, schrijft het systeem alleen logs naar de USB-stick, dus als we deze na het instellen van het systeem beperken — kunnen we ook geheugenkaarten gebruiken, maar als je vaak veel naar het opslagmedium wilt schrijven, is een SSD of HDD de betere keuze.

Daarna sluiten we het opslagmedium aan op de router en zien we het op het scherm van de systeemmonitor.

We gaan met een klik op 'USB-sticks en printers' naar de sectie 'Toepassingen' en configureren de gedeelde bron in de sectie 'Windows-netwerk':

En we hebben een netwerkmiddel dat we kunnen gebruiken met computers onder Windows, die indien nodig als schijf kan worden verbonden: net use y: \192.168.1.1SSD /persistent:yes
De snelheid van zo'n geïmproviseerde NAS is voldoende voor thuisgebruik, via kabel gebruikt hij volledige gigabit snelheid, via WiFi is de snelheid ongeveer 400-500 megabit.

De configuratie van de opslag is een van de noodzakelijke stappen voor de serverconfiguratie, daarna moeten we:
— en een statisch IP-adres (dit kan ook zonder, met behulp van Dynamic DNS, maar ik had al een statisch IP, dus het bleek eenvoudiger te zijn om gebruik te maken van — , we krijgen DNS-hosting en e-mail op ons domein);

— en A-records toevoegen die naar jouw IP verwijzen:

Het in werking treden van de instellingen voor domeindelegatie en DNS duurt enkele uren, dus we zijn tegelijkertijd bezig met de routerconfiguratie.
Als eerste moet je het Entware-repository installeren, waar we de benodigde pakketten op de router kunnen installeren. Ik heb gebruik gemaakt van , maar ik heb het installatiepakket niet via FTP geüpload, maar ik heb direct op de eerder aangesloten netwerkschijf een map aangemaakt en het bestand op de gebruikelijke manier daarheen gekopieerd.
Na toegang te hebben verkregen via SSH, veranderen we het wachtwoord met het commando passwd en installeren met het commando opkg install [pakketnamen] alle benodigde pakketten:

Tijdens de configuratie op de router bleken de volgende pakketten geïnstalleerd te zijn (resultaat van de opkg list-installed opdracht):
Lijst van pakketten
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
Er kan hier iets overbodigs zijn, maar er is veel ruimte op de schijf, dus ik heb er niet verder naar gekeken.
Na het installeren van de pakketten configureren we nginx. Ik heb het met twee domeinen geprobeerd - op de tweede is https ingesteld, en er staat nu een placeholder. Intern worden de poorten 81 en 433 in plaats van 80 en 443 gebruikt, omdat de adminpanelen van de router op de normale poorten draaien.
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;Om de site via https te laten werken, heb ik gebruikgemaakt van het bekende script dehydrated, dat ik heb geïnstalleerd volgens . Dit proces veroorzaakte geen problemen, ik stuitte alleen op het feit dat in de tekst van het script voor gebruik op mijn router /opt/etc/ssl/openssl.cnf:
[openssl_conf]
#engines=enginesEn ik wil opmerken dat het genereren van dhparams.pem met het commando "openssl dhparam -out dhparams.pem 2048" op mijn router meer dan 2 uur duurt. Als het geen voortgangsindicator was geweest, had ik mijn geduld verloren en had ik opnieuw opgestart.
Na het verkrijgen van de certificaten herstarten we nginx met het commando "/opt/etc/init.d/S80nginx restart". In principe is de configuratie hiermee afgesloten, maar de site is er nog niet — als we een bestand index.html in de map /share/nginx/html plaatsen, zien we een tussenpagina.
index.html
<!DOCTYPE html>
<html>
<head>
<title>Testpagina!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Testpagina!</h1>
<p>Dit is een eenvoudige statische testpagina, absoluut niets interessants.</p>
</body>
</html>Om informatie mooi te presenteren, kan een niet-professional zoals ik beter gebruikmaken van kant-en-klare sjablonen. Na een lange zoektocht in verschillende catalogi vond ik Er is een behoorlijke keuze aan gratis sjablonen beschikbaar, waarvoor geen verplichting bestaat om de auteur te vermelden (wat zeldzaam is op internet, de meeste sjablonen vereisen in hun licentie dat je de link naar de bron behoudt waar ze zijn verkregen).
Kies een geschikt sjabloon — er is voor verschillende situaties iets beschikbaar, download het archief en pak het uit in de map /share/nginx/html. Dit kan al vanaf je computer; bewerk vervolgens het sjabloon (hiervoor zijn minimale HTML-kennis vereist om de structuur niet te verstoren) en vervang de afbeeldingen, zoals hieronder weergegeven.

Samenvatting: de router is prima geschikt voor het hosten van een lichte website, in principe — als er geen hoge belasting wordt verwacht, kan je , en experimenteren met complexere projecten (ik kijk naar nextcloud/owncloud, lijkt wel succesvolle installaties op deze hardware te zijn). De mogelijkheid om pakketten te installeren verhoogt de nuttigheid — bijvoorbeeld, toen ik het RDP-poort van de pc in het lokale netwerk moest beveiligen, installeerde ik knockd op de router — en de poortforwarding naar de pc opende zich alleen na port knocking.
Waarom juist een router en geen gewone pc? Een router is een van de weinige computerapparaten die dag en nacht actief zijn in veel appartementen; een thu router is meestal volledig geruisloos en een lichte website met minder dan honderd bezoekers per dag zal hem absoluut niet belasten.
Bron: habr.com
