Hosta en webbplats på din hemrouter

Jag har länge velat "röra mina händer" på Internettjänster genom att sätta upp en webbserver från början och släppa den till Internet. I den här artikeln vill jag dela med mig av min erfarenhet av att förvandla en hemrouter från en mycket funktionell enhet till en nästan fullfjädrad server.

Allt började med det faktum att TP-Link TL-WR1043ND-routern, som hade tjänat troget, inte längre uppfyllde behoven hos ett hemnätverk; jag ville ha ett 5 GHz-band och snabb tillgång till filer på en lagringsenhet ansluten till routern . Efter att ha tittat igenom specialiserade forum (4pda, ixbt), webbplatser med recensioner och tittat på sortimentet av lokala butiker, bestämde jag mig för att köpa Keenetic Ultra.

Bra recensioner från ägarna fungerade till förmån för just denna enhet:

  • inga problem med överhettning (här var vi tvungna att överge Asus-produkter);
  • driftsäkerhet (här strök jag över TP-Link);
  • lätt att ställa in (jag var rädd att jag inte kunde hantera det och strök över Microtik).

Jag var tvungen att förlika mig med nackdelarna:

  • ingen WiFi6, jag ville ta utrustning med en reserv för framtiden;
  • 4 LAN-portar, jag ville ha fler, men det här är inte längre en hemkategori.

Som ett resultat fick vi denna "server":

Hosta en webbplats på din hemrouter

  • till vänster är Rostelecoms optiska terminal;
  • till höger är vår experimentella router;
  • en 2 GB m.128 SSD liggande, placerad i en USB3-box från Aliexpress, kopplas till routern med en sladd, nu är den snyggt monterad på väggen;
  • i förgrunden är en förlängningssladd med oberoende frånkopplade uttag, ledningen från den går till en billig UPS;
  • i bakgrunden finns ett gäng partvinnade kablar - i stadiet av renoveringen av lägenheten planerade jag omedelbart RJ45-uttag på de ställen där utrustningen skulle vara placerad, för att inte vara beroende av att WiFi var nedskräpat.

Så vi har utrustningen, vi måste konfigurera den:

Hosta en webbplats på din hemrouter

  • Den initiala installationen av routern tar cirka 2 minuter, vi anger anslutningsparametrarna till leverantören (min optiska terminal växlas till bryggläge, PPPoE-anslutningen lyfter routern), namnet på WiFi-nätverket och lösenordet - i princip det är det , routern startar och fungerar.

Hosta en webbplats på din hemrouter

Vi ställer in vidarebefordran av externa portar till portarna på själva routern i avsnittet "Nätverksregler - Vidarebefordran":

Hosta en webbplats på din hemrouter

Hosta en webbplats på din hemrouter

Nu kan vi gå vidare till den "avancerade" delen, vad jag ville ha från routern:

  1. funktionaliteten hos en liten NAS för ett hemnätverk;
  2. utföra webbserverfunktioner för flera privata sidor;
  3. personlig molnfunktion för åtkomst till personlig data från var som helst i världen.

Den första implementeras med inbyggda verktyg, utan att kräva mycket ansträngning:

  • Vi tar en enhet avsedd för denna roll (flash-enhet, minneskort i en kortläsare, hårddisk eller SSD i en extern box och formaterar den till Ext4 med hjälp av MiniTool Partition Wizard Free Edition (Jag har ingen dator med Linux till hands, det är möjligt med inbyggda verktyg). Som jag förstår det, under drift skriver systemet bara loggar till flashenheten, så om du begränsar dem efter att du har ställt in systemet kan du även använda minneskort om du planerar att skriva mycket och ofta till enheten - en SSD eller HDD är bättre.

Hosta en webbplats på din hemrouter

Efter detta ansluter vi enheten till routern och observerar den på systemskärmen

Hosta en webbplats på din hemrouter

Klicka på "USB-enheter och skrivare" till avsnittet "Program" och konfigurera resursen i avsnittet "Windows Network":

Hosta en webbplats på din hemrouter

Och vi har en nätverksresurs som kan användas från Windows-datorer, ansluta som en disk vid behov: nätanvändning y: \192.168.1.1SSD /persistent:yes

Hastigheten på en sådan improviserad NAS är ganska tillräcklig för hemmabruk, över en tråd använder den hela gigabiten, över WiFi är hastigheten cirka 400-500 megabit.

Hosta en webbplats på din hemrouter

Att konfigurera lagring är ett av de nödvändiga stegen för att konfigurera servern, då behöver vi:
- köpa en domän och en statisk IP-adress (du kan klara dig utan detta genom att använda dynamisk DNS, men jag hade redan en statisk IP-adress, så det visade sig vara lättare att använda gratis Yandex-tjänster - genom att delegera domänen dit, vi tar emot DNS-värd och e-post på vår domän);

Hosta en webbplats på din hemrouter

- konfigurera DNS-servrar och lägg till A-poster som pekar på din IP:

Hosta en webbplats på din hemrouter

Det tar flera timmar för domän- och DNS-delegeringsinställningarna att träda i kraft, så vi ställer in routern samtidigt.

Först måste vi installera Entware-förvaret, från vilket vi kan installera de nödvändiga paketen på routern. Jag utnyttjade denna instruktion, laddade bara inte upp installationspaketet via FTP, utan skapade en mapp direkt på den tidigare anslutna nätverksenheten och kopierade filen dit på vanligt sätt.

Efter att ha fått åtkomst via SSH, ändra lösenordet med kommandot passwd och installera alla nödvändiga paket med kommandot opkg install [paketnamn]:

Hosta en webbplats på din hemrouter

Under installationen installerades följande paket på routern (utgången av kommandot opkg list-installed):

Lista över paket
bash - 5.0-3
busybox - 1.31.1-1
ca-bunt - 20190110-2
ca-certifikat - 20190110-2
coreutils - 8.31-1
coreutils-mktemp - 8.31-1
cron - 4.1-3
curl - 7.69.0-1
diffutiler - 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
libuid - 2.35.1-1
libxml2 - 2.9.10-1
språk - 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

Kanske var det något överflödigt här, men det fanns mycket utrymme på enheten, så jag brydde mig inte om att titta på det.

Efter att ha installerat paketen konfigurerar vi nginx, jag provade det med två domäner - den andra är konfigurerad med https, och för tillfället finns det en stubb. Interna portar 81 och 433 används istället för 80 och 443, eftersom routerns adminpanel hänger på normala portar.

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;

För att sidan skulle fungera via https använde jag det välkända dehydrerade skriptet och installerade det med hjälp av denna instruktion. Den här processen orsakade inga svårigheter, jag snubblade bara på det faktum att i texten till skriptet för att arbeta på min router du måste kommentera raden i filen /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

Och jag noterar att generering av dhparams.pem med kommandot "openssl dhparam -out dhparams.pem 2048" på min router tar mer än 2 timmar, om inte förloppsindikatorn hade hänt, skulle jag ha tappat tålamodet och startat om.

Efter att ha mottagit certifikaten, starta om nginx med kommandot "/opt/etc/init.d/S80nginx restart". I princip är installationen klar, men det finns ingen hemsida ännu - om vi lägger filen index.html i katalogen /share/nginx/html kommer vi att se en stubb.

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>

För att placera information vackert är det lättare för en icke-professionell som jag att använda färdiga mallar; efter en lång sökning i olika kataloger hittade jag templatemo.com - det finns ett bra urval av gratis mallar som inte kräver tillskrivning (vilket är sällsynt på Internet; de flesta mallarna i licensen kräver att du sparar en länk till resursen från vilken de hämtades).

Vi väljer en lämplig mall - det finns sådana för en mängd olika fall, ladda ner arkivet och packa upp det i /share/nginx/html-katalogen, du kan göra detta från din dator och sedan redigera mallen (här behöver du minimal kunskap av HTML för att inte bryta strukturen) och byt ut grafiken som visas i figuren nedan.

Hosta en webbplats på din hemrouter

Sammanfattning: routern är ganska lämplig för att vara värd för en lätt webbplats på den, i princip - om du inte förväntar dig en stor belastning kan du installera och php, och experimentera med mer komplexa projekt (jag tittar på nextcloud/owncloud, det verkar finnas framgångsrika installationer på sådan hårdvara). Möjligheten att installera paket ökar dess användbarhet - till exempel när det var nödvändigt att skydda RDP-porten på en PC i ett lokalt nätverk, installerade jag knockd på routern - och portvidarebefordran till PC:n öppnades först efter portknackning.

Varför en router och inte en vanlig PC? En router är en av få datordelar som fungerar dygnet runt i många lägenheter, en hemrouter är vanligtvis helt tyst och en lätt plats med mindre än hundra besök per dag kommer inte att störa det alls.

Källa: will.com

Lägg en kommentar