Už dlouho jsem chtěl „osahat si“ internetové služby, nastavit webový server od nuly a uvést ho do internetu. V tomto článku se chci podělit o získané zkušenosti s přeměnou domácího routeru z úzce funkčního zařízení na téměř plnohodnotný server.
Všechno začalo tím, že router TP-Link TL-WR1043ND, který sloužil bezchybně, přestal vyhovovat potřebám domácí sítě. Potřeboval jsem frekvenci 5 GHz a rychlý přístup k souborům na úložišti připojeném k routeru. Po prohlédnutí odborných fór (4pda, ixbt), webů s recenzemi a pohledu na nabídku místních obchodů jsem se rozhodl koupit Keenetic Ultra.
Pro tento přístroj hovořily dobré recenze vlastníků:
- absence přehřívání (tady jsem musel odmítnout produkty Asus);
- spolehlivost v provozu (tady jsem odškrtnul TP-Link);
- snadnost nastavení (bál jsem se, že nezvládnu a vyřadil jsem Microtik).
Musel jsem se smířit s nevýhodami:
- není WiFi6, chtěl jsem zařízení s rezervou do budoucna;
- 4 LAN porty, chtělo by to víc, ale to už není domácí kategorie.
Nakonec jsem skončil s takovou „serverovou“ konfigurací:

- vlevo optický terminál Rostelekomu;
- vpravo náš experimentální router;
- k routeru je připojen nevyužívaný m.2 SSD o kapacitě 128 GB, umístěný v USB3 krabici z AliExpressu, nyní je bezpečně upevněn na zdi;
- v popředí prodlužovačka s nezávislým vypínáním zásuvek, kabel od ní jde k levnému UPS;
- v pozadí svazek kroucené dvojice — při rekonstrukci bytu jsem hned naplánoval RJ45 zásuvky v místech, kde se má technika umístit, abych se nemusel spoléhat na přeplněnost WiFi.
Takže máme zařízení, je třeba ho nastavit:

- počáteční nastavení routeru trvá asi 2 minuty, uvádíme parametry připojení k poskytovateli (můj optický terminál je přepnut do režimu bridge, PPPoE připojení zřizuje router), název WiFi sítě a heslo — v podstatě vše, router se spouští a funguje.

Nastavíme přesměrování externích portů na porty samotného routeru v sekci „Síťová pravidla — Přesměrování“:


Nyní se můžeme posunout k „pokročilé“ části, co jsem chtěl od routeru:
- funkcionalita malého NAS pro domácí síť;
- provádění funkcí webového serveru pro několik soukromých stránek;
- funkcionalita osobního cloudu pro přístup k osobním údajům odkudkoli na světě.
První se realizuje pomocí integrovaných prostředků, aniž by to vyžadovalo zvláštní úsilí:
- vezmeme úložné zařízení určené k této roli (flash disk, paměťovou kartu ve čtečce, pevný disk nebo SSD v externím boxu) a naformátujeme jej na Ext4 pomocí (nemám po ruce počítač s linuxem, tam to lze provést pomocí integrovaných prostředků). Jak chápu, při práci systém zapisuje na flash disk pouze logy, takže pokud je omezíme po nastavení systému — můžeme používat i paměťové karty, ale pokud plánujete na úložiště často a hodně psát — lepší je SSD nebo HDD.

Poté připojujeme úložiště k routeru a pozorujeme jej na obrazovce systémového monitoru.

Kliknutím na „USB disky a tiskárny“ přecházíme do sekce „Aplikace“ a nastavujeme sdílený zdroj v sekci „Síť Windows“:

A máme síťový zdroj, který lze použít z počítačů se systémem Windows, přičemž v případě potřeby jej připojíme jako disk: net use y: \\192.168.1.1SSD /persistent:yes
Rychlost takového improvizovaného NAS je zcela dostatečná pro domácí použití, po kabelu využívá celou gigabitovou kapacitu, po WiFi je rychlost přibližně 400-500 megabitů.

Nastavení úložiště je jedním z nezbytných kroků pro konfiguraci serveru, dále potřebujeme:
— a statickou IP adresu (můžete se obejít i bez ní, pokud používáte Dynamic DNS, ale statickou IP jsem už měl, takže bylo jednodušší použít — získáme DNS hosting a e-mail na naší doméně);

— a přidat A záznamy ukazující na vaši IP:

Vstup v platnost nastavení delegace domény a DNS trvá několik hodin, takže se mezitím věnujeme nastavení routeru.
Nejprve je třeba nainstalovat repozitář Entware, z něhož budeme moci na router nainstalovat potřebné balíčky. Využil jsem , pouze jsem nenahrával instalační balíček přes FTP, ale vytvořil jsem složku přímo na dříve připojeném síťovém disku a zkopíroval tam soubor běžným způsobem.
Získáním přístupu přes SSH měníme heslo příkazem passwd a pomocí příkazu opkg install [název balíčků] instalujeme všechny potřebné balíčky:

Během nastavení na routeru byly nainstalovány následující balíčky (výstup příkazu opkg list-installed):
Seznam balíčků
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
Možná se zde něco přimotalo, ale na úložišti je hodně místa, takže jsem se tím nezabýval.
Po instalaci balíčků nastavíme nginx, zkoušel jsem to s dvěma doménami — na druhé je nastaven https a zatím se zobrazuje zástupce. Interní porty 81 a 433 místo 80 a 443 se používají, protože na běžných portech běží administrační rozhraní routeru.
etc/nginx/nginx.conf
uživatel nikdo;
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 podpora
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 přes https, použil jsem známý skript dehydrated, který jsem nainstaloval podle . Tento proces mi nepřinesl žádné potíže, jen jsem se zasekl na tom, že v textu skriptu pro práci na mém routeru /opt/etc/ssl/openssl.cnf:
[openssl_conf]
#engines=enginesA poznamenám, že generování dhparams.pem příkazem „openssl dhparam -out dhparams.pem 2048“ na mém routeru trvá více než 2 hodiny, kdyby nebylo indikátoru pokroku — ztratil bych trpělivost a restartoval.
Po získání certifikátů restartujeme nginx příkazem "/opt/etc/init.d/S80nginx restart". V zásadě je tímto nastavení u konce, ale web stále neexistuje — pokud umístíme do složky /share/nginx/html soubor index.html, uvidíme zástupce.
index.html
<!DOCTYPE html>
<html>
<head>
<title>Testovací stránka!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Testovací stránka!</h1>
<p>Toto je jednoduchá statická testovací stránka, naprosto nic zajímavého.</p>
</body>
</html>Abych umístil informace dobře, je pro neprofesionála jako jsem já snazší využít hotové šablony, po dlouhém procházení různými katalogy jsem našel — je tam slušný výběr bezplatných šablon, které nevyžadují povinné uvedení autora (což je v internetu vzácnost, většina šablon v licencích vyžaduje uchování odkazu na zdroj, odkud byly získány).
Vybereme vhodnou šablonu — jsou tam různé varianty, stáhneme archiv a rozbalíme ho do adresáře /share/nginx/html, lze to udělat již z vlastního počítače, pak upravíme šablonu (tady budou potřeba minimální znalosti HTML, abychom neporušili strukturu) a nahradíme grafiku, jak je ukázáno na obrázku níže.

Shrnutí: router je zcela vhodný pro hostování jednoduché webové stránky, v zásadě — pokud se neplánuje velké zatížení, lze , a experimentovat s složitějšími projekty (dívám se na nextcloud/owncloud, údajně existují úspěšné instalace na takovém hardwaru). Možnost instalace balíčků zvyšuje jeho užitečnost — například, když bylo potřeba zabezpečit RDP port PC v místní síti, nainstaloval jsem knockd na router — a přesměrování portu k PC se otevíralo pouze po port knocking.
Proč právě router, a ne běžný PC? Router je jedním z mála počítačových zařízení, které pracují non-stop v mnoha bytech, domácí router obvykle naprosto neslyšně a lehká stránka s počtem návštěv za den méně než sto ho rozhodně nezatíží.
Zdroj: habr.com
