Ich wollte schon lange die Internetdienste selbst erleben, indem ich einen Webserver von Grund auf einrichte und ihn ins Internet bringe. In diesem Artikel möchte ich meine Erfahrungen teilen, wie ich meinen Heimrouter von einem engen Funktionsgerät in einen nahezu vollwertigen Server verwandelt habe.
Alles begann damit, dass mein treuer TP-Link TL-WR1043ND-Router nicht mehr den Anforderungen meines Heimnetzwerks genügte. Ich wollte das 5-GHz-Band und einen schnellen Zugriff auf die Dateien auf dem an den Router angeschlossenen Speicher. Nach dem Durchsehen von Fachforen (4pda, ixbt), Bewertungsseiten und dem Angebot lokaler Geschäfte entschied ich mich, den Keenetic Ultra zu kaufen.
Für dieses Gerät sprachen die positiven Erfahrungen anderer Nutzer:
- keine Überhitzungsprobleme (hier musste ich auf Asus-Produkte verzichten);
- Zuverlässigkeit im Betrieb (TP-Link wurde hier ausgeschlossen);
- einfache Einrichtung (ich hatte Bedenken, es nicht zu schaffen, daher fiel die Wahl auf MikroTik).
Ich musste mich mit einigen Nachteilen abfinden:
- kein WiFi6, ich wollte ein Gerät mit einem gewissen Zukunftsspielraum;
- 4 LAN-Ports, ich hätte gerne mehr, aber das gehört nicht mehr zur Heimklasse.
So sieht das Ergebnis aus:

- links der optische Terminal von Rostelecom;
- rechts unser Versuchsrouter;
- ein m.2 SSD mit 128 GB, das in ein USB3-Gehäuse von AliExpress gesteckt ist, ist über ein Kabel mit dem Router verbunden und jetzt sicher an der Wand befestigt;
- im Vordergrund eine Steckdosenleiste mit unabhängiger Steckdosenabschaltung, von ihr führt ein Kabel zu einem günstigen UPS;
- im Hintergrund ein Bündel vom Twisted-Pair — während der Renovierung der Wohnung habe ich direkt RJ45-Steckdosen an den Stellen eingeplant, wo die Geräte platziert werden sollen, um nicht auf eine überlastete WiFi-Verbindung angewiesen zu sein.
Also, wir haben die Ausrüstung, jetzt müssen wir sie einrichten:

- die Erstkonfiguration des Routers dauert etwa 2 Minuten; wir geben die Verbindungsparameter zum Anbieter an (mein optisches Terminal ist in den Bridge-Modus versetzt, die PPPoE-Verbindung wird vom Router hergestellt), den Namen des WiFi-Netzwerks und das Passwort — im Prinzip ist das alles, der Router startet und funktioniert.

Wir richten die Portweiterleitung von externen Ports zu den Ports des Routers im Abschnitt ‚Netzwerkregeln – Portweiterleitung‘ ein:


Jetzt können wir zum 'fortgeschrittenen' Teil übergehen, das, was ich vom Router wollte:
- Funktionalität eines kleinen NAS für das Heimnetzwerk;
- Ausführung von Webserverfunktionen für mehrere private Seiten;
- Die Funktionalität einer persönlichen Cloud ermöglicht den Zugriff auf persönliche Daten von überall auf der Welt.
Die erste Methode wird durch integrierte Mittel realisiert, ohne besonderen Aufwand:
- Wir nehmen ein für diesen Zweck vorgesehenes Speichermedium (USB-Stick, Speicherkarte im Kartenleser, externe Festplatte oder SSD) und formatieren es mit Ext4 mithilfe von (ich habe gerade keinen Computer mit Linux zur Verfügung, dort kann man das mit integrierten Mitteln machen). Soweit ich verstehe, schreibt das System beim Betrieb nur Protokolle auf den USB-Stick; daher kann man, wenn man diese nach der Konfiguration des Systems einschränkt, auch Speicherkarten verwenden. Wenn man häufig viele Daten auf das Speichermedium schreiben möchte, sind SSD oder HDD besser.

Anschließend schließen wir das Speichermedium an den Router an und beobachten es auf dem Bildschirm des Systemmonitors.

Wir wechseln durch einen Klick auf "USB-Laufwerke und Drucker" in den Bereich "Anwendungen" und konfigurieren die gemeinsame Ressource im Abschnitt "Windows-Netzwerk":

Und wir haben eine Netzwerkressource, die von Windows-Computern aus verwendet werden kann, indem wir sie bei Bedarf als Laufwerk verbinden: net use y: \\192.168.1.1SSD /persistent:yes
Die Geschwindigkeit eines solchen improvisierten NAS reicht für den Heimgebrauch vollkommen aus; über Kabel nutzt es die volle Gigabit-Geschwindigkeit, während die Geschwindigkeit über WiFi etwa 400-500 Megabit beträgt.

Die Einrichtung des Speichers ist einer der notwendigen Schritte zur Konfiguration des Servers. Danach müssen wir:
— und eine statische IP-Adresse (dies kann auch ohne diese auskommen, indem man Dynamic DNS verwendet, aber ich hatte bereits eine statische IP, daher war es einfacher, — , erhalten wir DNS-Hosting und E-Mail auf unserer Domain);

— und A-Records hinzufügen, die auf Ihre IP verweisen:

Die Aktivierung der Delegierungseinstellungen für die Domain und DNS dauert einige Stunden, also kümmern wir uns parallel um die Router-Konfiguration.
Zunächst muss das Entware-Repository installiert werden, aus dem wir die erforderlichen Pakete für den Router installieren können. Ich habe , nur dass ich das Installationspaket nicht über FTP hochgeladen habe, sondern direkt einen Ordner auf dem zuvor verbundenen Netzlaufwerk erstellt und die Datei auf herkömmliche Weise dorthin kopiert habe.
Nachdem Sie über SSH Zugriff erhalten haben, ändern Sie das Passwort mit dem Befehl passwd und installieren Sie mit dem Befehl opkg install [имена пакетов] alle benötigten Pakete:

Bei der Einrichtung waren auf dem Router die folgenden Pakete installiert (Ausgabe des Befehls opkg list-installed):
Paketliste
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
Eventuell ist hier etwas Überflüssiges dabei, aber da viel Speicher verfügbar ist, habe ich nicht weiter untersucht.
Nach der Installation der Pakete konfigurieren wir nginx. Ich habe es mit zwei Domains ausprobiert – bei der zweiten ist https eingerichtet, jedoch wird momentan eine Platzhalterseite angezeigt. Die internen Ports 81 und 433 werden anstelle von 80 und 443 verwendet, da auf den Standardports die Router-Adminoberflächen laufen.
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;Um sicherzustellen, dass die Website über HTTPS funktioniert, habe ich das bekannte Skript dehydrated verwendet und es gemäß installiert. Der Prozess bereitete keine Schwierigkeiten; ich hatte nur einen kurzen Moment Schwierigkeiten, weil im Skripttext für den Betrieb auf meinem Router /opt/etc/ssl/openssl.cnf:
[openssl_conf]
#engines=enginesIch möchte anmerken, dass die Generierung von dhparams.pem mit dem Befehl „openssl dhparam -out dhparams.pem 2048“ auf meinem Router über 2 Stunden dauert. Ohne den Fortschrittsindikator hätte ich die Geduld verloren und neu gestartet.
Nach dem Erhalt der Zertifikate starten wir nginx mit dem Befehl "/opt/etc/init.d/S80nginx restart" neu. Im Prinzip ist die Konfiguration damit abgeschlossen, aber die Website existiert noch nicht – wenn wir eine Datei index.html in das Verzeichnis /share/nginx/html legen, sehen wir die Platzhalterseite.
index.html
<!DOCTYPE html>
<html>
<head>
<title>Testseite!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Testseite!</h1>
<p>Dies ist eine einfache statische Testseite, absolut nichts Interessantes.</p>
</body>
</html>Um die Informationen ansprechend zu präsentieren, ist es für Laien wie mich einfacher, auf fertige Vorlagen zurückzugreifen. Nach langer Suche in verschiedenen Verzeichnissen habe ich gefunden – dort gibt es eine ordentliche Auswahl an kostenlosen Vorlagen, die keine verpflichtende Angabe der Urheberschaft erfordern (was im Internet selten ist, da die meisten Vorlagen in ihren Lizenzen verlangen, dass der Link zur Quelle erhalten bleibt).
Wählen Sie die passende Vorlage aus – es gibt sie für die unterschiedlichsten Anlässe. Laden Sie das Archiv herunter und entpacken Sie es in das Verzeichnis /share/nginx/html. Das kann bereits von Ihrem eigenen Computer aus erfolgen. Anschließend bearbeiten Sie die Vorlage (hierbei sind grundlegende HTML-Kenntnisse erforderlich, um die Struktur nicht zu beschädigen) und ersetzen die Grafiken, wie im Bild unten gezeigt.

Zusammenfassung: Der Router eignet sich ganz gut zur Bereitstellung einer kleinen Website. Wenn keine großen Lasten erwartet werden, ist das durchaus möglich. als auch mit komplexeren Projekten experimentieren (ich schaue mir Nextcloud/Owncloud an, scheinbar gibt es erfolgreiche Installationen auf solcher Hardware). Die Möglichkeit, Pakete zu installieren, erhöht den Nutzen erheblich – zum Beispiel, als ich den RDP-Port des PCs im lokalen Netzwerk sichern musste, stellte ich Knockd auf dem Router ein – und der Port zu meinem PC wurde nur nach dem Port-Knocking geöffnet.
Warum gerade ein Router und kein gewöhnlicher PC? Ein Router ist eines der wenigen Computergeräte, die rund um die Uhr in vielen Wohnungen betrieben werden. Ein Heimrouter ist in der Regel völlig geräuschlos, und eine kleine Website mit weniger als hundert Besuchern pro Tag wird ihn nicht überlasten.
Quelle: habr.com
