Hosten einer Website auf einem Heimrouter

Ich wollte schon lange Internetdienste selbst in die Hand nehmen, indem ich einen Webserver von Grund auf neu einrichtete und ihn für das Internet freigab. In diesem Artikel möchte ich meine Erfahrungen bei der Umwandlung eines Heimrouters von einem hochfunktionalen Gerät in einen nahezu vollwertigen Server teilen.

Alles begann damit, dass der TP-Link-Router TL-WR1043ND, der treu gedient hatte, nicht mehr den Anforderungen eines Heimnetzwerks entsprach; ich wollte ein 5-GHz-Band und schnellen Zugriff auf Dateien auf einem an den Router angeschlossenen Speichergerät . Nachdem ich Fachforen (4pda, ixbt), Websites mit Bewertungen und das Sortiment lokaler Geschäfte durchgesehen hatte, entschied ich mich für den Kauf von Keenetic Ultra.

Gute Bewertungen der Besitzer sprachen für dieses spezielle Gerät:

  • keine Probleme mit Überhitzung (hier mussten wir auf Asus-Produkte verzichten);
  • Betriebssicherheit (hier habe ich TP-Link durchgestrichen);
  • einfach einzurichten (ich hatte Angst, dass ich damit nicht zurechtkomme und habe Microtik durchgestrichen).

Ich musste mich mit den Nachteilen abfinden:

  • kein WiFi6, ich wollte Geräte mit Reserve für die Zukunft mitnehmen;
  • 4 LAN-Ports, ich wollte mehr, aber das ist keine Heimkategorie mehr.

Als Ergebnis haben wir diesen „Server“ erhalten:

Hosten einer Website auf einem Heimrouter

  • links ist das optische Terminal von Rostelecom;
  • rechts ist unser experimenteller Router;
  • Eine herumliegende 2-GB-m.128-SSD, platziert in einer USB3-Box von Aliexpress, wird per Kabel mit dem Router verbunden, nun ist sie ordentlich an der Wand montiert;
  • im Vordergrund steht ein Verlängerungskabel mit unabhängig getrennten Steckdosen, dessen Kabel zu einer kostengünstigen USV führt;
  • Im Hintergrund gibt es einen Haufen Twisted-Pair-Kabel – bei der Renovierung der Wohnung habe ich sofort RJ45-Buchsen an den Stellen geplant, an denen sich die Geräte befinden sollten, um nicht darauf angewiesen zu sein, dass das WLAN verunreinigt wird.

Wir haben also die Ausrüstung und müssen sie konfigurieren:

Hosten einer Website auf einem Heimrouter

  • Die Ersteinrichtung des Routers dauert ca. 2 Minuten, wir geben dem Provider die Verbindungsparameter an (mein optisches Endgerät wird in den Bridge-Modus geschaltet, die PPPoE-Verbindung hebt der Router auf), den Namen des WLAN-Netzwerks und das Passwort – im Grunde ist das alles , der Router startet und funktioniert.

Hosten einer Website auf einem Heimrouter

Im Abschnitt „Netzwerkregeln – Weiterleitung“ stellen wir die Weiterleitung externer Ports an die Ports des Routers selbst ein:

Hosten einer Website auf einem Heimrouter

Hosten einer Website auf einem Heimrouter

Jetzt können wir zum „erweiterten“ Teil übergehen, was ich vom Router wollte:

  1. Funktionalität eines kleinen NAS für ein Heimnetzwerk;
  2. Ausführen von Webserverfunktionen für mehrere private Seiten;
  3. Persönliche Cloud-Funktionalität für den Zugriff auf persönliche Daten von überall auf der Welt.

Ersteres lässt sich ohne großen Aufwand mit integrierten Tools umsetzen:

  • Wir nehmen ein dafür vorgesehenes Laufwerk (Flash-Laufwerk, Speicherkarte im Kartenleser, Festplatte oder SSD in einer externen Box) und formatieren es mit Ext4 MiniTool Partition Wizard Kostenlose Edition (Ich habe keinen Computer mit Linux zur Hand, mit eingebauten Tools ist das möglich). Soweit ich weiß, schreibt das System während des Betriebs nur Protokolle auf das Flash-Laufwerk. Wenn Sie diese also nach der Einrichtung des Systems einschränken, können Sie auch Speicherkarten verwenden, wenn Sie vorhaben, viel und oft auf das Laufwerk zu schreiben – eine SSD oder Festplatte ist besser.

Hosten einer Website auf einem Heimrouter

Danach schließen wir das Laufwerk an den Router an und beobachten es auf dem Systemmonitor

Hosten einer Website auf einem Heimrouter

Klicken Sie im Abschnitt „Anwendungen“ auf „USB-Laufwerke und Drucker“ und konfigurieren Sie die Freigabe im Abschnitt „Windows-Netzwerk“:

Hosten einer Website auf einem Heimrouter

Und wir haben eine Netzwerkressource, die von Windows-Computern aus genutzt werden kann und bei Bedarf als Festplatte verbunden werden kann: ​​net use y: \192.168.1.1SSD /persistent:yes

Die Geschwindigkeit eines solchen improvisierten NAS reicht für den Heimgebrauch völlig aus, über ein Kabel verbraucht es das gesamte Gigabit, über WLAN liegt die Geschwindigkeit bei etwa 400-500 Megabit.

Hosten einer Website auf einem Heimrouter

Das Einrichten des Speichers ist einer der notwendigen Schritte zur Konfiguration des Servers. Dann benötigen wir:
- eine Domain kaufen und eine statische IP-Adresse (Sie können darauf verzichten, indem Sie Dynamic DNS verwenden, aber ich hatte bereits eine statische IP, sodass es einfacher zu verwenden war kostenlose Yandex-Dienste - indem Sie die Domain dorthin delegieren, wir erhalten DNS-Hosting und E-Mails auf unserer Domain);

Hosten einer Website auf einem Heimrouter

- Konfigurieren Sie DNS-Server und fügen Sie A-Einträge hinzu, die auf Ihre IP verweisen:

Hosten einer Website auf einem Heimrouter

Es dauert mehrere Stunden, bis die Domänen- und DNS-Delegierungseinstellungen wirksam werden, daher richten wir gleichzeitig den Router ein.

Zuerst müssen wir das Entware-Repository installieren, von dem aus wir die notwendigen Pakete auf dem Router installieren können. Ich habe es ausgenutzt diese Anweisung, habe das Installationspaket einfach nicht per FTP hochgeladen, sondern direkt auf dem zuvor verbundenen Netzlaufwerk einen Ordner erstellt und die Datei wie gewohnt dorthin kopiert.

Nachdem Sie über SSH Zugriff erhalten haben, ändern Sie das Passwort mit dem Befehl passwd und installieren Sie alle erforderlichen Pakete mit dem Befehl opkg install [Paketnamen]:

Hosten einer Website auf einem Heimrouter

Während des Setups wurden die folgenden Pakete auf dem Router installiert (die Ausgabe des Befehls opkg list-installed):

Liste der Pakete
Bash – 5.0-3
Busybox – 1.31.1-1
ca-bundle – 20190110-2
CA-Zertifikate - 20190110-2
coreutils – 8.31-1
coreutils-mktemp – 8.31-1
cron - 4.1-3
Locken - 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
liblau – 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
Schauplätze – 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
Termininfo - 6.2-1
zlib – 1.2.11-3
Zoneinfo-Asien – 2019c-1
Zoneinfo-Europa – 2019c-1

Vielleicht war hier etwas überflüssig, aber auf dem Laufwerk war viel Platz, also habe ich mir nicht die Mühe gemacht, hineinzuschauen.

Nach der Installation der Pakete konfigurieren wir Nginx. Ich habe es mit zwei Domänen versucht – die zweite ist mit https konfiguriert, und vorerst gibt es einen Stub. Es werden die internen Ports 81 und 433 anstelle von 80 und 443 verwendet, da das Admin-Panel des Routers an normalen Ports hängt.

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;

Damit die Site über https funktioniert, habe ich das bekannte dehydrierte Skript verwendet und es mit installiert diese Anleitung. Dieser Vorgang bereitete keine Schwierigkeiten, ich bin nur darüber gestolpert, dass im Text des Skripts für die Arbeit an meinem Router steht Sie müssen die Zeile in der Datei auskommentieren /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

Und ich stelle fest, dass das Generieren von dhparams.pem mit dem Befehl „openssl dhparam -out dhparams.pem 2048“ auf meinem Router mehr als 2 Stunden dauert. Ohne die Fortschrittsanzeige hätte ich die Geduld verloren und neu gestartet.

Nach Erhalt der Zertifikate starten Sie nginx mit dem Befehl „/opt/etc/init.d/S80nginx restart“ neu. Im Prinzip ist die Einrichtung abgeschlossen, aber es gibt noch keine Website – wenn wir die Datei index.html in das Verzeichnis /share/nginx/html legen, sehen wir einen Stub.

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>

Um Informationen schön zu platzieren, ist es für einen Laien wie mich einfacher, vorgefertigte Vorlagen zu verwenden; nach einer langen Suche in verschiedenen Katalogen habe ich sie gefunden templatemo.com - Es gibt eine gute Auswahl an kostenlosen Vorlagen, für die keine Quellenangabe erforderlich ist (was im Internet selten vorkommt; bei den meisten Vorlagen in der Lizenz müssen Sie einen Link zu der Ressource speichern, von der sie bezogen wurden).

Wir wählen eine passende Vorlage aus – es gibt solche für verschiedene Fälle, laden das Archiv herunter und entpacken es in das Verzeichnis /share/nginx/html, Sie können dies von Ihrem Computer aus tun, dann bearbeiten Sie die Vorlage (hier sind nur minimale Kenntnisse erforderlich). von HTML, um die Struktur nicht zu zerstören) und ersetzen Sie die Grafiken wie in der Abbildung unten gezeigt.

Hosten einer Website auf einem Heimrouter

Fazit: Der Router eignet sich grundsätzlich gut zum Hosten einer leichten Website darauf – wenn Sie keine große Auslastung erwarten, können Sie dies tun installieren und php, und experimentieren Sie mit komplexeren Projekten (ich schaue mir nextcloud/owncloud an, es scheint erfolgreiche Installationen auf solcher Hardware zu geben). Die Möglichkeit, Pakete zu installieren, erhöht seinen Nutzen – als es beispielsweise notwendig war, den RDP-Port eines PCs in einem lokalen Netzwerk zu schützen, habe ich knockd auf dem Router installiert – und die Portweiterleitung zum PC wurde erst nach Port-Knocking geöffnet.

Warum ein Router und kein normaler PC? Ein Router ist eine der wenigen Computer-Hardwarekomponenten, die in vielen Wohnungen rund um die Uhr funktioniert; ein Heimrouter ist normalerweise absolut geräuschlos und ein heller Standort mit weniger als hundert Besuchen pro Tag wird ihm überhaupt nichts ausmachen.

Source: habr.com

Kommentar hinzufügen