Už dávno som chcel "osobne zažiť" internetové služby, nastaviť webový server od nuly a pustiť ho do internetu. V tomto článku sa chcem podeliť o skúsenosti s premenou domáceho routera z úzko funkčného zariadenia na takmer plnohodnotný server.
Všetko sa začalo tým, že môj verný router TP-Link TL-WR1043ND prestal vyhovovať potrebám domácej siete, zatúžil som po 5 GHz pásme a rýchlom prístupe k súborom na úložisku pripojenom k routeru. Po prezretí špecializovaných fór (4pda, ixbt), recenzií a pozeraní na sortiment miestnych obchodov som sa rozhodol zakúpiť Keenetic Ultra.
Pre toto zariadenie hovorili dobré recenzie od majiteľov:
- žiadne problémy s prehriatím (týmto som sa musel vzdať výrobkov Asus);
- spoľahlivosť v práci (tu som vyškrtl TP-Link);
- jednoduchosť pri nastavovaní (obával som sa, že to nezvládnem a vyškrtl som Microtik).
Musel som sa zmieriť s negatívami:
- žiadne WiFi6, chcel som získať zariadenie s rezervou na budúcnosť;
- 4 LAN porty, chcel som viac, ale to už nie je domáca kategória.
Nakoniec vznikla takáto "serverová" konfigurácia:

- vľavo optický terminál od Rostelekom;
- vpravo náš pokusný router;
- kábel k routeru je pripojený m.2 SSD s kapacitou 128 GB, umiestnený v USB3 boxe z AliExpressu, teraz je pekne upevnený na stene;
- v popredí predlžovačka s nezávislým vypínaním zásuviek, kábel od nej smeruje k lacnému UPS;
- v pozadí zväzok skrútenej dvojice — pri renovácii bytu som hneď naplánoval RJ45 zásuvky na miestach predpokladaného umiestnenia techniky, aby som nebol závislý od zahltenia WiFi.
Takže máme zariadenie, teraz ho musíme nastaviť:

- prvé nastavenie routera trvá asi 2 minúty, uvedieme parametre pripojenia k poskytovateľovi (mám optický terminál prepnúť do režimu bridge, PPPoE pripojenie sa spúšťa routerom), názov WiFi siete a heslo — v podstate všetko, router sa spustí a funguje.

Nastavíme presmerovanie vonkajších portov na porty samotného routera v sekcii "Sieťové pravidlá — Presmerovanie":


Teraz sa môžeme presunúť k "pokročilej" časti, čo som chcel od routera:
- funkcionalita malého NAS pre domácu sieť;
- vykonávanie funkcií webového servera pre niekoľko súkromných stránok;
- funkcionalita osobného cloudu pre prístup k osobným údajom z ktorejkoľvek časti sveta.
Prvá sa realizuje vstavanými nástrojmi, nevyžadujúcimi osobitné úsilie:
- vezmeme úložisko určené na tento účel (pendrive, pamäťovú kartu v čítačke, pevný disk alebo SSD vo vonkajšom boxe a naformátujeme ho na Ext4 pomocou (nemám pri ruke počítač s linuxom, tam je možné použiť vstavané nástroje). Ako chápem, pri práci systém zapisuje na pendrive iba logy, preto ak ich po nastavení systému obmedzíme — môžeme používať aj pamäťové karty, ak plánujete veľa a často zapisovať na úložisko — najlepšie SSD alebo HDD.

Potom pripojíme úložisko k routeru a sledujeme ho na obrazovke systémového monitora.

Prejdeme kliknutím na 'USB disk a tiskárne' do sekcie 'Aplikácie' a nastavíme zdieľaný zdroj v sekcii 'Sieť Windows':

A máme sieťový zdroj, ktorý môžeme používať s počítačmi so systémom Windows, pripojením ak je to potrebné ako disk: net use y: \\192.168.1.1SSD /persistent:yes
Rýchlosť takéhoto improvizovaného NAS je úplne dostatočná pre domáce použitie, cez kábel využíva celý gigabit, cez WiFi rýchlosť dosahuje okolo 400-500 megabitov.

Nastavenie úložiska je jedným z nevyhnutných krokov pri nastavovaní servera, ďalej potrebujeme:
— a statickú IP adresu (môžeme sa zaobísť aj bez nej, používaním Dynamic DNS, ale statická IP už bola, preto sa zdalo jednoduchšie využiť — , získavame DNS hosting a email na našej doméne);

— a pridať A záznamy, ktoré odkazujú na vašu IP:

Nadobudnutie účinnosti nastavení delegovania domény a DNS trvá niekoľko hodín, preto sa súčasne zaoberáme nastavovaním routeru.
Na začiatok je potrebné nainštalovať repozitár Entware, z ktorého si môžeme nainštalovať potrebné balíky na router. Ja som využil , len som nenahrával inštalačný balík cez FTP, ale som vytvoril priečinok priamo na predtým pripojenom sieťovom disku a skopíroval tam súbor bežným spôsobom.
Po získaní prístupu cez SSH zmeníme heslo príkazom passwd a príkazom opkg install [názvy balíkov] nainštalujeme všetky potrebné balíky:

V priebehu nastavenia na routeri boli nainštalované nasledujúce balíky (výsledok príkazu opkg list-installed):
Zoznam balíčkov
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
Mohlo sa tu niečo zbytočné dostať, ale na disku je veľa miesta, preto som sa tým nezaoberal.
Po inštalácii balíkov nastavujeme nginx, skúšal som to s dvoma doménami — na druhej je nastavené https a zatiaľ tam visí zástupca. Používajú sa interné porty 81 a 433 namiesto 80 a 443, pretože na normálnych portoch bežia administrátorské rozhrania routera.
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;Aby web fungoval cez https, použil som známy skript dehydrated, ktorý som nainštaloval podľa . Tento proces nespôsobil ťažkosti, iba som sa zasekol na tom, že v texte skriptu pre fungovanie na mojom routeri /opt/etc/ssl/openssl.cnf:
[openssl_conf]
#engines=enginesA poznamenám, že generovanie dhparams.pem príkazom „openssl dhparam -out dhparams.pem 2048“ na mojom routeri trvá viac ako 2 hodiny, keby nebolo indikátora postupu — stratil by som trpezlivosť a reštartoval.
Po získaní certifikátov reštartujeme nginx príkazom " /opt/etc/init.d/S80nginx restart ". V podstate je touto konfiguráciou koniec, ale stránka ešte neexistuje — ak položíme do adresára /share/nginx/html súbor index.html, uvidíme zástupcu.
index.html
<!DOCTYPE html>
<html>
<head>
<title>Testovacia stránka!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Testovacia stránka!</h1>
<p>Toto je jednoduchá statická testovacia stránka, úplne nič zaujímavé.</p>
</body>
</html>Aby som umiestnil informácie pekne, pre neprofesionála ako som ja je jednoduchšie využiť hotové šablóny, po dlhom prehľadávaní rôznych adresárov som našiel — tam je slušný výber bezplatných šablón, ktoré nevyžadujú povinné uvedenie autora (čo je v internete zriedkavé, väčšina šablón v licenciách vyžaduje zachovať odkaz na zdroj, odkiaľ boli získané).
Vyberáme vhodnú šablónu — sú tu na najrozličnejšie prípady, stiahneme archív a rozbalíme ho do adresára /share/nginx/html, je možné to urobiť už z vlastného počítača, potom upravujeme šablónu (tu budú potrebné minimálne znalosti HTML, aby sa nenarušila štruktúra) a nahrádzame grafiku, ako je ukázané na obrázku nižšie.

Zhrnutie: router je úplne vhodný na umiestnenie ľahkej webovej stránky, v podstate — ak sa nepredpokladá veľká záťaž, môžeme , a experimentovať so zložitejšími projektmi (pozerám na nextcloud/owncloud, zdá sa, že sú úspešné inštalácie na takom hardvéri). Možnosť inštalácie balíkov zvyšuje jeho užitočnosť — napríklad, keď bolo potrebné zabezpečiť RDP port PC v lokálnej sieti, nainštaloval som knockd na router — a presmerovanie portu na PC sa otvorilo iba po port knocking.
Prečo práve router, a nie bežný počítač? Router je jedným z mála počítačových zariadení, ktoré fungujú nonstop v mnohých bytoch, domáci router je zvyčajne úplne bezhlučný a ľahká stránka s počtom návštev za deň menej než sto ho úplne nezaťaží.
Zdroj: habr.com
