Weboldal elhelyezése otthoni routeren

Már régóta vágytam arra, hogy "kézzelfoghatóan" tapasztaljam meg az internetes szolgáltatásokat, beállítva egy webszervert a nulláról, és elindítva azt az interneten. E cikkben szeretném megosztani a tapasztalataimat arról, hogyan alakítottam át egy otthoni routert egy szinte teljes értékű szerverré.

Minden azzal kezdődött, hogy a megbízható TP-Link TL-WR1043ND routerem már nem felelt meg a háztartási hálózat igényeinek, vágytam az 5 GHz-es frekvenciára és a csatlakoztatott tárolón lévő fájlok gyors elérésére. Átnézve a szakmai fórumokat (4pda, ixbt), véleményeket olvasva, és a helyi boltok kínálatát nézve — úgy döntöttem, hogy beszerzem a Keenetic Ultra-t.

Egyértelműen ezt az eszközt választottam, mert jó véleményeket olvastam a tulajdonosoktól:

  • nincs probléma a túlmelegedéssel (itt le kellett mondanom az Asus termékekről);
  • megbízhatóság (itt a TP-Link visszalépett);
  • könnyű beállítás (nem akartam kudarcot vallani, ezért a Microtik-et is kihagytam).

El kellett fogadnom a hátrányokat:

  • nincs WiFi6, szerettem volna olyan eszközt választani, ami a jövőre is elegendő teljesítményt nyújt;
  • 4 LAN port, szerettem volna többet, de ez már nem a háztartási kategória.

A végeredmény egy ilyen "szerveres" lett:

Weboldal elhelyezése otthoni routeren

  • bal oldalon a Rosztelkom optikai terminálja;
  • jobb oldalon a kísérleti routerünk;
  • a routerhez csatlakoztatva van egy régi m.2 SSD 128 GB kapacitással, ami egy USB3 dobozba került az Aliexpressről, most szépen rögzítve van a falon;
  • az előtérben egy hosszabbító független kapcsolókkal, amelynek vezetékét egy olcsó UPS-hez csatlakoztattam;
  • a háttérben egy csomó csavart érpár — a lakás felújítása során előre terveztem az RJ45 aljzatokat a gépek tervezett elhelyezésének helyén, hogy ne függjek a WiFi zsúfoltságától.

Nos, megvan a berendezés, be kell állítanunk:

Weboldal elhelyezése otthoni routeren

  • a router első beállítása körülbelül 2 percet vesz igénybe, megadjuk a szolgáltatónkhoz való csatlakozás paramétereit (nálam az optikai terminál bridg üzemmódban van, a PPPoE kapcsolatot a router emeli), a WiFi hálózat nevét és a jelszót — alapvetően ennyi, a router elindul és működik.

Weboldal elhelyezése otthoni routeren

Beállítjuk a külső portok továbbítását a router saját portjaira a "Hálózati szabályok - Továbbítás" részben:

Weboldal elhelyezése otthoni routeren

Weboldal elhelyezése otthoni routeren

Most áttérhetünk a "fejlettebb" részre, amit a routertől szerettem volna:

  1. egy kis NAS funkcionalitás a háztartási hálózat számára;
  2. webszerver funkciók ellátása néhány magánoldal számára;
  3. a személyes felhőtöltés funkció a személyes adatok bármely helyről történő eléréséhez.

Az első beépített eszközökkel valósul meg, különösebb erőfeszítések nélkül:

  • elvesszük a szerepre szánt tárolót (pendrive, memóriakártya a kártyaolvasóban, külső házban lévő merevlemez vagy SSD) és formázás előtt Ext4-re a MiniTool Partition Wizard Free Edition (nincsen linuxos gépem kéznél, ott beépített eszközökkel is megoldható). Ahogy értem, a rendszer a flash meghajtóra csak naplókat ír, ezért ha a beállítás után korlátozzuk őket – használhatunk memória kártyát is, de ha sokat és gyakran írunk a tárolóra – a jobb az SSD vagy HDD.

Weboldal elhelyezése otthoni routeren

Ezután csatlakoztatjuk a tárolót a routerhez, és figyeljük a rendszermonitor képernyőjén

Weboldal elhelyezése otthoni routeren

Kattintsunk a „USB-meghajtók és nyomtatók” menüpontra az „Alkalmazások” részben, és állítsuk be a megosztott erőforrást a „Windows Hálózat” részében:

Weboldal elhelyezése otthoni routeren

Felhasználója van egy hálózati erőforrásunknak, amelyet Windows számítógépekről használhatunk, szükség esetén meghajtóként csatlakoztatva: net use y: \\192.168.1.1SSD /persistent:yes

Az ilyen improvizált NAS sebessége teljesen elegendő otthoni használatra, kábelen kihasználja a teljes gigabitet, WiFi-n a sebesség körülbelül 400-500 megabit.

Weboldal elhelyezése otthoni routeren

A tároló beállítása – az egyik szükséges lépés a szerver konfigurálásához, ezután szükségünk van:
— domain vásárlására és statikus IP-címre (without this, you can use Dynamic DNS, but I already had a static IP, so it was easier to use Yandex free services — a domén delegálásával, így DNS hostingot és e-mailt kapunk a saját domainünkre);

Weboldal elhelyezése otthoni routeren

— DNS szerverek beállítása és A rekordok hozzáadása, amelyek az Ön IP-címét mutatják:

Weboldal elhelyezése otthoni routeren

A domain delegálásának és DNS beállításának életbe lépéséhez néhány órára van szükség, ezért párhuzamosan foglalkozunk a router beállításával.

Először szükséges telepíteni az Entware repót, ahonnan telepíthetjük a szükséges csomagokat a routerre. Én ezt a utasítást, csak nem FTP-n töltöttem fel az installációs csomagot, hanem közvetlenül a korábban csatlakoztatott hálózati meghajtón létrehoztam egy mappát, és oda másoltam a fájlt.

SSH-n való hozzáférés után a passwd parancs segítségével megváltoztatjuk a jelszót, majd az opkg install [csomag nevek] parancs segítségével telepítjük az összes szükséges csomagot:

Weboldal elhelyezése otthoni routeren

A router beállítása során a következő csomagok voltak telepítve (az opkg list-installed parancs kimenetének eredménye):

Csomagok listája
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

Lehet, hogy itt van valami felesleges, de sok hely van a tárolón, ezért nem foglalkoztam vele.

A csomagok telepítése után beállítjuk az nginx-et, próbáltam két domain-nel — a másodikon https van beállítva, és jelenleg egy állóképet mutat. Az 81 és 433 belső portokat használunk a 80 és 443 helyett, mivel a normál portokon a router admin felülete fut.

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;

Ahhoz, hogy a webhely HTTPS-en működjön, egy ismert dehydrated szkriptet használtam, és ezt telepítettem ezek szerint az útmutatóban.. Ez a folyamat nem okozott nehézséget, csak azon akadtam el, hogy a szkripttel kapcsolatban az én routeremen meg kell kommentelni egy sort a fájlban /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

És megjegyzem, hogy a dhparams.pem generálása az "openssl dhparam -out dhparams.pem 2048" parancs segítségével az én routeremen több mint 2 órát vesz igénybe; ha nem lett volna előrehaladási jelző, türelmemet vesztettem volna és újraindítottam volna.

A tanúsítványok megszerzése után indítsuk újra az nginx-t a "\/opt\/etc\/init.d\/S80nginx restart" paranccsal. Elvileg ezzel a beállítás befejeződött, de még nincs webhely — ha az /share/nginx/html mappába elhelyezünk egy index.html fájlt, egy tartalékoldalt látunk.

index.html

<!DOCTYPE html>
<html>
<head>
<title>Tesztoldal!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Tesztoldal!</h1>
<p>Ez egy egyszerű statikus tesztoldal, teljesen unalmas.</p>
</body>
</html>

Annak érdekében, hogy a tartalom szépen nézzen ki, nekem, mint nem szakembernek, könnyebb előre elkészített sablonokat használni; hosszas böngészés után különböző könyvtárakban találtam templatemo.com — ott jó választék található ingyenes sablonokból, amelyek nem igényelnek kötelező szerzői megjelölést (ami ritkaság az interneten, a sablonok nagy része kötelezi az forrásra mutató hivatkozás megőrzésére).

Válasszunk egy megfelelő sablont — mindenféle esetre található, letöltjük a tömörített fájlt, és kicsomagoljuk a /share/nginx/html mappába, ezt már a saját számítógépünkről is elvégezhetjük, majd szerkesztjük a sablont (ehhez minimális HTML ismeretek szükségesek, hogy ne sértsük meg a struktúrát) és kicseréljük a grafikát, ahogy az alábbi képen látható.

Weboldal elhelyezése otthoni routeren

Összegzés: a router teljesen alkalmas könnyű weboldal hostolására, alapvetően — ha nem számítunk nagy terhelésre, lehet. php-t is telepíthetünk, és kísérletezhetünk bonyolultabb projektekkel (nézem a nextcloud/owncloud-ot, úgy tűnik, hogy sikeres telepítések vannak ilyen hardveren). A csomagok telepítési lehetősége növeli a hasznosságát — például amikor meg kellett védeni a RDP portot egy helyi hálózaton, a knockd-t telepítettem a routerre — és a port átirányítása a PC-re csak port knocking után nyílt meg.

Miért éppen router, és nem egy normál PC? A router az egyik ritka számítógépes eszköz, amely a legtöbb lakásban 24/7 működik, a házi router általában teljesen hangtalan, és egy nap alatt a száz látogatásnál kevesebbet elérő könnyű weboldal számára ez nem jelent terhelést.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster