SSH, sFTP oder FTP Dienste hinter DS Lite verfügbar machen
Heute befassen wir uns damit, wie wir hinter einem DS Lite Anschluss wir auf unseren Heimserver zugreifen können, sei es per SSH, sFTP, FTP, und wie wir diese für externe Verbindungen zugänglich machen. In einem vorherigen Tutorial haben wir bereits gezeigt, wie Webdienste hinter einem DS-Lite-Anschluss verfügbar gemacht werden können. Nun widmen wir uns weiteren Möglichkeiten, um zusätzliche Dienste einzubinden.
Anforderungen
Wireguard installieren
Das Tutorial basiert wie bereits erwähnt auf dem Vorgänger-Artikel welchen ihr hier findet. Installiert euch einen Wireguard Server wie beschrieben, und richtet euch, für euren Dienst eine Konfiguration ein. Auf dem zu erreichenden Dienst, muss natürlich der Wireguard Client ebenso installiert sein, und erfolgreich mit dem Wireguard Server verbunden sein.
Ports öffnen
Ausserdem müssen natürlich die entsprechenden Ports, die ihr öffnen möchtet, in der Firewall des VPS Server geöffnet werden.
Zwischen Socat oder iptables auswählen
Ihr könnt bei solchen Diensten theoretisch und praktisch einfach iptables
verwenden, da die Dienste immer einen anderen Port verwenden.
Einfach und praktisch ist aber auch ein bidirektionaler Relay Dienst wie Socat.
Nginx funktioniert hier nicht, da es auf der Anwendungsschicht (Layer 7 im OSI-Modell) arbeitet, und es deshalb nur mit Anwendungsprotokollen umgehen kann, die auf HTTP oder HTTPS basieren. Protokolle wie FTP oder SSH arbeiten jedoch auf der Transportschicht (Layer 4) und verwenden kein HTTP, wodurch Nginx solche Verbindungen nicht versteht.
Was ist iptables und Konfigurations-Beispiel anhand SSH/sFTP
iptables
ist ein Kommandozeilenwerkzeug zur Konfiguration der Netfilter-Firewall im Linux-Kernel. Es arbeitet auf Layer 3/4 (Netzwerk- und Transportschicht) und ermöglicht Routing, Paketfilterung und NAT (Network Address Translation).
Anwendungsfälle von iptables
- Weiterleitung von Ports und Diensten.
- Paketfilterung und Zugangsbeschränkungen.
- NAT und Routing über verschiedene Netzwerke.
Beispiel: SFTP-Weiterleitung mit iptables
Für Verbindungen mit SSH/SFTP müsst ihr Anfragen auf einen anderen Port als 22 weiterleiten, da der Port 22 bereits durch eure Verbindung zur VPS benötigt wird. Ihr könnt z.B Port 8022
des VPS an einen internen Server (10.7.0.2:22
) weiterleiten. Mit iptables würde das zum Beispiel so aussehen:
iptables -t nat -A PREROUTING -p tcp --dport 8022 -j DNAT --to-destination 10.7.0.2:22
iptables -t nat -A POSTROUTING -j MASQUERADE
Erklärung:
- PREROUTING: Leitet eingehende Anfragen (Port
8022
) an den internen Server weiter. - DNAT: Destination NAT ändert das Ziel der Anfrage.
- POSTROUTING/MASQUERADE: Stellt sicher, dass Rückantworten über den VPS laufen.
Vorteile von iptables
- Leichtgewichtig und performant: Läuft direkt im Kernel.
- Persistent: Regeln bleiben bestehen, wenn sie mit Tools wie
iptables-persistent
gespeichert werden. - Flexibel: Unterstützt alle TCP/UDP-Protokolle und bietet viele Optionen (z. B. Port-Translation, SNAT/DNAT).
Nachteile von iptables
- Komplexität: Erfordert Kenntnisse der Netzwerkebene.
- Keine Protokollanalyse: Arbeitet nur mit Ziel-IP und -Port, keine Layer-7-Analyse.
- Keine einfache Fehlerbehebung: Fehlkonfigurationen können schwierig zu diagnostizieren sein.
Was ist socat und Konfigurations-Beispiel Anhand sFTP/SSH
socat
ist ein vielseitiges Werkzeug, das Verbindungen auf Layer 4 herstellt. Es agiert wie ein "Schweizer Taschenmesser" für Netzwerke und kann Verbindungen zwischen Ports, Sockets und Streams herstellen.
Anwendungsfälle von Socat
- Direkte Weiterleitung von Diensten (z. B. SSH, SFTP, HTTP, etc.).
- Einfaches Prototyping von Netzwerklösungen.
- Erstellen eines TCP/UDP-Proxies.
Beispiel: SFTP-Weiterleitung mit Socat
Angenommen, der interne Server mit SFTP oder SSH läuft auf 10.7.0.2:22
und ihr möchtet ihn über den VPS auf Port 8022
zugänglich machen:
socat TCP-LISTEN:8022,reuseaddr,fork TCP:10.7.0.2:22
Erklärung
TCP-LISTEN:8022
: Öffnet Port8022
auf dem VPS.reuseaddr
: Erlaubt, dass der Port mehrfach verwendet werden kann.fork
: Erlaubt mehrere parallele Verbindungen.TCP:10.7.0.2:22
: Weiterleitung an den internen SFTP-Server.
Vorteile von Socat
- Einfach zu konfigurieren: Ein einzelnes Kommando reicht aus.
- Flexibel: Unterstützt nicht nur TCP und UDP, sondern auch andere Protokolle wie Unix-Sockets.
- Kein Root-Zugriff erforderlich: Kann von normalen Benutzern gestartet werden (sofern der Port > 1024 ist).
Nachteile von Socat
- Nicht persistent: Läuft nicht automatisch nach einem Neustart weiter, es sei denn, wir nutzen
systemd
oder einen Daemon. - Keine Protokollanalyse: Arbeitet auf Layer 4 und bietet keine Funktionen wie Load-Balancing oder SSL-Terminierung.
- Performance: Weniger effizient bei hohen Lasten im Vergleich zu iptables.
Socat systemd Service aufsetzen
Wie bereits beschrieben, muss socat dauerhaft laufen, damit es die Verbindungen jederzeit weiterleiten kann. Dazu erstellen wir ein systemd Service, welches wir bei Bedarf aktivieren, und auch wieder einfach deaktivieren könnten. Für unsere SSH Verbindung zum Client erstellen wir beispielsweise folgenden Eintrag. Zuerst erstellen wir eine systemd Service:
sudo nano /etc/systemd/system/socat-ssh.service
Darin kommt folgender Inhalt:
[Unit]
Description=Socat SSH Forwarding
After=network.target
[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:8022,reuseaddr,fork TCP:10.7.0.2:22
Restart=always
[Install]
WantedBy=multi-user.target
Den Dienst starten wir mit:
sudo systemctl daemon-reload
sudo systemctl enable socat-ssh.service
sudo systemctl start socat-ssh.service
Stoppen können wir den Dienst, und damit auch die Verbindungen sofort wieder mit:
sudo systemctl stop socat-ssh.service
Weitere Dienste weiterleiten
Um weitere Dienste weiterleiten zu können zum Beispiel einen eigenen öffentlichen DNS Server erstellt ihr neue iptable Rules, oder für socat ganz einfach einen neuen systemd Service mit den angepassten Ports. Ein DNS Server zum Beispiel muss direkt via Port 53 erreichbar sein, also müsste der Systemd Service dementsprechend aussehen:
[Unit]
Description=Socat DNS UDP Forwarder
After=network.target
[Service]
ExecStart=/usr/bin/socat -T15 -u UDP-LISTEN:53,reuseaddr,fork UDP:10.7.0.2:53
Restart=always
[Install]
WantedBy=multi-user.target
Für IP Tables sehe das so aus:
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 10.7.0.2:53
iptables -t nat -A POSTROUTING -p udp --dport 53 -j MASQUERADE
Fazit
Die Herausforderung, Dienste hinter einem DS Lite-Anschluss (Dual-Stack Lite) im Internet verfügbar zu machen, lässt sich effektiv lösen, indem ein VPS (Virtual Private Server) als Brücke genutzt wird. Dabei ist WireGuard eine ausgezeichnete Wahl, um eine sichere Verbindung zwischen eurem lokalen Netzwerk und dem VPS herzustellen. Für die eigentliche Weiterleitung der Dienste gibt es mehrere Ansätze, darunter iptables und socat, die je nach Anwendungsfall Vor- und Nachteile haben:
Feature | socat | iptables |
---|
Einsatzzweck | Port- und Dienstweiterleitung | NAT, Portweiterleitung, Firewall |
Protokollanalyse | Nein | Nein |
Flexibilität | Sehr flexibel (Streams, Sockets, etc.) | Beschränkt auf Layer 3/4 |
Einfachheit | Einfach zu starten | Eher komplex |
Performance | Weniger effizient | Sehr effizient (Kernel-basiert) |
Persistenz | Erfordert zusätzliche Konfiguration | Kann persistent gespeichert werden |
Sicherheit | Keine Firewall-Funktionen | Integrierte Paketfilterung |
Zusatztools nötig? | Ja, z. B. systemd für Persistenz | Nein, direkt persistent möglich |
Mit WireGuard als Tunnel und den vielseitigen Werkzeugen wie iptables oder socat könnt ihr nahezu jeden Dienst hinter einem DSLite-Anschluss verfügbar machen. Die Wahl zwischen iptables und socat hängt von euren spezifischen Anforderungen ab: Effizienz und Stabilität mit iptables oder Flexibilität und Einfachheit mit socat. Beide Optionen bieten robuste Lösungen, um die Einschränkungen eines DS-Lite-Netzwerks effektiv zu umgehen.