Umísťujeme web na domácím routeru

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í:

Umísťujeme web na domácím routeru

  • 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:

Umísťujeme web na domácím routeru

  • 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.

Umísťujeme web na domácím routeru

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

Umísťujeme web na domácím routeru

Umísťujeme web na domácím routeru

Nyní se můžeme posunout k „pokročilé“ části, co jsem chtěl od routeru:

  1. funkcionalita malého NAS pro domácí síť;
  2. provádění funkcí webového serveru pro několik soukromých stránek;
  3. 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í MiniTool Partition Wizard Free Edition (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.

Umísťujeme web na domácím routeru

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

Umísťujeme web na domácím routeru

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

Umísťujeme web na domácím routeru

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ů.

Umísťujeme web na domácím routeru

Nastavení úložiště je jedním z nezbytných kroků pro konfiguraci serveru, dále potřebujeme:
— získat doménu 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 bezplatné služby od Yandexu — a delegovat doménu tam,získáme DNS hosting a e-mail na naší doméně);

Umísťujeme web na domácím routeru

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

Umísťujeme web na domácím routeru

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 tento návod, 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:

Umísťujeme web na domácím routeru

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 této instrukce. 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 je třeba zakomentovat řádek v souboru /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

A 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 templatemo.com — 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.

Umísťujeme web na domácím routeru

Shrnutí: router je zcela vhodný pro hostování jednoduché webové stránky, v zásadě — pokud se neplánuje velké zatížení, lze nainstalovat i php, 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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster