Blog für IT'ler und Nerds - wildeflorian.de // chillmaster.eu // heimatdrohne.de

Linux, Raspberry Pi, Server, Tutorial

Einen Server daheim ohne öffentliche IPv4 Adresse – DS Lite

Es gab einmal eine Zeit, in der das Internet bidirektional war und jeder einen Server an seinem Ende betreiben konnte. Leider sind diese Zeiten längst vorbei und viele ISPs heute, insbesondere Kabelanbieter, weisen ihren Kunden keine öffentliche IPv4-Adresse zu. Nicht einmal, wenn man sie nett darum bittet. Nicht einmal gegen Geld, es sei denn, Sie sind ein Geschäftskunde, der bereit ist, für dieses Privileg tief in die Tasche zu greifen. Glücklicherweise gibt es eine Möglichkeit, Server zu Hause zu betreiben und sie für die Außenwelt zugänglich zu machen, und zwar eine einfache.

Das Programm, mit dem dies problemlos möglich ist, ist ssh, die Secure Shell. Trotz seines Namens ist ssh das Schweizer Taschenmesser, wenn es darum geht, Tunnel zwischen verschiedenen Teilen des Internets aufzubauen, durch die TCP-Pakete weitergeleitet werden können.

Um also einen Server zu Hause trotz eines Provider-Doppel-NAT verfügbar zu machen, kann man einen Server mit einer öffentlichen IP-Adresse mieten, am besten von einem lokalen Cloud-Anbieter, und diesen dann zur Weiterleitung von Paketen nutzen. In meinem Fall zahle ich 1 € im Monat für einen solchen Server bei 1&1 Ionos. Hier ein Link zu diesem Server (Achtung Werbelink)

Serverumleitung mit SSH

Das Bild hier zeigt das Prinzip und die folgenden Befehle zeigen, wie der Tunnel konfiguriert wird. Im Beispiel verwendet der Server zu Hause den TCP-Port 80, soll aber aus dem Internet über den TCP-Port 80 erreichbar sein. Ich verwende den TCP-Port 39122 für ssh auf dem entfernten Server anstelle von Port 22, da mein Zugriffsprotokoll sonst voll wäre mit Verbindungsanfragen von Bots, die auf einer Mission sind.

Wenn alles funktioniert, kann man autossh und crontab verwenden, um den Tunnelprozess in den Hintergrund zu stellen, um den Tunnel automatisch wiederherzustellen, wenn er ausfällt, und um sogar Neustarts ohne administrative Eingriffe zu überleben.

Zu allererst benötigen wir aber ein paar Sachen dafür.

Vorbereitung / Voraussetzungen

Hier eine Checkliste:

  • Einen Server mit einer öffentlichen IPv4 Adresse (findet ihr hier – Werbelink)
  • Einen Server in eurem Homelab bzw. bei euch zuhause (Raspberry Pi)
  • ein bisschen Linux Kentnisse
    In einer Linux-Konfiguration solltet ihr schon einmal gewesen sein und diese schon einmal bearbeitet haben.

Ihr beginnt auf eurer Linux-Kiste zuhause mit folgenden Befehlen:

ssh-keygen -t rsa -b 4096

Mit diesem Befehl, erzeugt ihr ein neues SSH Schlüsselpaar. Wie in diesem Beitrag bereits berichtet.

Sobald ihr dieses Schlüsselpaar erzeug habt, könnt ihr euch eueren Public-Schlüssel einmal anzeigen lassen.

cat ~/.ssh/id_rsa.pub

Sieht dann wie folgt aus:

Befehle am Server im RZ

Diesen oben erstellten Schlüssel müsst ihr an folgende Stelle bei eurem root Account auf eurem Server im Rechenzentrum einfügen:

sudo nano /root/.ssh/authorized_keys

in meinem Fall:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDOmwvZUQKKOXWl5Zi4PjlLAm94gW9EQWJn/jshz/Fn+rPaqPLYi+hsWuzLWFlDY0G/sTT+F/L4sOYdGxB3aF1A5EYg4qPVx3bbWfHzxd0rUslzrSzQCxtuFLOAtPNgBtM2BtXSKbkVU8Lx87Mtgk42YOyCQABxmK+bSA/cbf1HAOusOxCC+N3s6sv3cugcZI9g7aNPmA+7OrJNqjIu5zDVNqpSR8Dz1bVJyDGvQUXlT/PI/iCbzlBMbrwAsRYgw869kmkEhHTppzme84fUjsu4f2gtieWlzL6gr5cuLumxyYyK1T++ei4kzxpa9vLAC7EsoSHONLAuHvNduptOMc/RkmEmRPBH7cCZG2jPZZjO0scFbCF8MJmBOv63f6F/nB05dgnYCCkmYm3Sb5T0nBi0FqtjaelawJ2cOIt7g2kRQ9zhCgh3FQoA1a/W95vjat6sPuTvEJUANYWZtPYt/nebB44+k5183iiMtuX9ek0JgYDldg5lCQ1357kybYmlVOaZk6qlhdbcG64yJrpaMo6gPuYLTO6Pent5GIamUrO8OJCQvIX/lxofWGqANk37gVFfbhSCGROTUZNt6RK4EDVUZIErYvQop/OnAUoJHkzhqE1DpCb2jVo+EuzTUuozcnDeLCdH2F/t5WEc3xHBLB+f70JOk+JSj9vcCUpqklFXjQ== root@www-reverseproxy

Im nächsten Schritt müsst ihr die SSH Konfiguration eures Server im Rechenzentrum noch ein wenig anpassen.
Ihr öffnet eure SSHD Konfiguration mit dem Nano-Editor:

sudo nano /etc/ssh/sshd_config

Am besten fügt ihr folgende Zeilen am Ende eurer Konfiguration ein:

GatewayPorts yes
ClientAliveInterval 60
ClientAliveCountMax=2

und dann starten wir den SSH-Daemon einmal neu

sudo service sshd restart

Nun könnt ihr mit folgendem Befehl am Server im Rechenzentrum überwachen welche Ports geöffnet sind:

watch -n 0.5 "netstat -tulpn"

Vielleicht ist bei euch auch noch kein netstat installiert dann solltet ihr die net-tools in eurer Distribution (ich nutze Debian oder Ubuntu) installieren, sowie in meinem Fall:

apt install net-tools

Befehle am Server im Homelab

Nach der Konfiguration an eurem Server im RZ (Rechenzentrum) müsst ihr versuchen die Verbindung von eurem lokalen Server per ssh aufzubauen:

ssh -p 39122 -N -R 80:localhost:80 root@ip-des-remote-servers.de

Hier der Befehl kurz erklärt:
-p = Portangabe eures SSH Ports
-R = Portforwarding vom Remote-Host mit Angabe des Ports (in diesem Fall Port 80) mit Weiterleitung an den localhost auch auf Port 80
und am Ende noch den Server Hostnamen oder die IP mit dem Root Benutzer angeben

Während ihr diese Zeile ausführt, sollte an eurem Server im RZ ein weiterer Port geöffnet werden.
Dann sollte es bei euch wie folgt aussehen.

Die gelb markierte Zeile, zeigt den geöffneten Port 80.

Sobald das funktioniert, könnt ihr den ssh Befehl mit STRG+C wieder stoppen und wir können das ganze automatisieren. Dafür benötigen wir aber das Tool autossh. Dieses müssen wir ebenfalls erst wieder installieren. Also los.

apt install autossh

Jetzt können wir das ganze mit dem autossh Befehl einmal testen.

autossh -M 0 -f -o ConnectTimeout=10 -o ServerAliveInterval=60 -o ServerAliveCountMax=2 -p 39122 -N -R 80:localhost:80 root@ip-des-remote-servers.de

Sollte auch dies funktionieren, könnt ihr den Befehl nun in eure Aufgabenplanung (Crontab) aufnehmen.

crontab -e

@reboot autossh -M 0 -f -o ConnectTimeout=10 -o ServerAliveInterval=60 -o ServerAliveCountMax=2 -p 39122 -N -R 80:localhost:80 root@ip-des-remote-servers.de

Das war auch schon das ganze Hexenwerk. Solltet ihr mehrere Ports benötigen, müsstet ihr den Befehl lediglich mehrfach mit den verschiedenen Ports bei euch in der Crontab (Aufgabenplanung) eintragen sowie in der Firewall freischalten.
Eine Firewall zu verwenden sehe ich als essentiell.

Nun solltet ihr über die öffentliche IP mit Port 80 euren lokalen Raspi oder Linux-Server erreichen können.

Falls nicht, könnt ihr mich gerne kontaktieren und wir finden eine Lösung!

Manchmal ist es aber auch einfach nur die Firewall im 1&1 Ionos Portal die Port 80 nicht durchlässt.

Schreibe eine Antwort