Skip to main content

Dokumentation

AutoSSH – Hochverfügbare Reverse-Tunnel-Anbindung (Heimnetz)

Zweck dieser Komponente

AutoSSH stellt die externe Erreichbarkeit des Heimnetzes über einen VPS sicher, ohne dass Ports im Heimnetz geöffnet werden müssen.

Die Verbindung ist:

  • verschlüsselt

  • bootfest

  • redundant

  • selbstheilend

Diese AutoSSH-Architektur ist ein zentraler Bestandteil der Heimnetz-Sicherheits- und HA-Strategie.

Grundprinzip

Die Tunnel funktionieren als Reverse SSH Tunnels:

  • Das Heimnetz baut aktiv eine SSH-Verbindung zum VPS auf

  • Der VPS stellt darüber lokale Ports bereit

  • Nginx auf dem VPS nutzt diese Ports als Backend

  • Externe Clients sehen ausschließlich den VPS

➡️ Kein eingehender Traffic ins Heimnetz


Architekturübersicht

Beteiligte Systeme

Rolle System
Edge / DMZ VPS (212.227.30.204)
Tunnel 1 VM auf Proxmox Node 1
Tunnel 2 LXC auf Proxmox Node 2
Routing intern Nginx auf Tunnel-Systemen
Routing extern Nginx auf VPS

Netzwerkfluss

Client (Internet)
  ↓ HTTPS
VPS (Nginx + TLS)
  ↓ localhost
AutoSSH Reverse Tunnel
  ↓
Interner Nginx (Tunnel-VM/LXC)
  ↓
Heimnetz-Dienste

Redundanzkonzept

Tunnel-Instanzen

Tunnel Host VPS-Port
Tunnel 1 (primär) VM (Node 1) 29000
Tunnel 2 (Backup) LXC (Node 2) 39000

Beide Tunnel:

  • laufen permanent

  • nutzen getrennte SSH-Keys

  • starten automatisch beim Boot


Failover-Mechanismus

  • VPS-Nginx verwendet ein upstream mit backup

  • Fällt Tunnel 1 aus, wird automatisch Tunnel 2 genutzt

  • Umschaltzeit: wenige Sekunden

  • Keine manuelle Intervention nötig


Sicherheitsmodell

Keine offenen Heimnetz-Ports

  • Alle Tunnel-Ports auf dem VPS sind nur an 127.0.0.1 gebunden

  • Kein direkter Internetzugriff auf Tunnel-Ports möglich

Getrennte SSH-Keys

  • Jede Tunnel-Instanz nutzt einen eigenen Key

  • Keys können unabhängig gesperrt/ersetzt werden

SSH-Nutzung

  • Nur Reverse-Forwarding

  • Kein Shell-Zugriff notwendig

  • Kein Agent-Forwarding


AutoSSH – Funktionsweise

AutoSSH überwacht die SSH-Verbindung und:

  • erkennt Verbindungsabbrüche

  • baut die Verbindung automatisch neu auf

  • toleriert Netzwerk- und DNS-Probleme

  • toleriert VPS-Neustarts

Die Überwachung erfolgt ohne zusätzlichen Monitoring-Port (-M 0).

systemd-Service (Referenzkonfiguration)

Beispiel: Backup-Tunnel (Node 2)



[Unit] Description=Reverse SSH Tunnel zu IONOS VPS (Backup Tunnel) After=network-online.target Wants=network-online.target StartLimitIntervalSec=0 [Service] Type=simple User=root Environment="AUTOSSH_GATETIME=0" Environment="AUTOSSH_POLL=30" ExecStart=/usr/bin/autossh \ -M 0 \ -o ServerAliveInterval=30 \ -o ServerAliveCountMax=3 \ -o ExitOnForwardFailure=yes \ -o ConnectTimeout=10 \ -i /root/.ssh/id_ed25519_tunnel2 \ -N \ -R 127.0.0.1:39000:127.0.0.1:18080 \ haos_tunnel@212.227.30.204 Restart=always RestartSec=15 KillMode=process TimeoutStopSec=10 [Install] WantedBy=multi-user.target

Anpassungen für Tunnel 1

  • Key: id_ed25519_tunnel1

  • Port: 29000


Erklärung wichtiger Parameter

-R 127.0.0.1:PORT:127.0.0.1:18080

  • bindet den Tunnel nur lokal auf dem VPS

  • leitet Traffic an den internen Proxy weiter

  • verhindert externe Port-Exposition

ExitOnForwardFailure=yes

  • stellt sicher, dass AutoSSH nicht „still“ läuft

  • bei Fehlern wird sofort neu gestartet

ServerAliveInterval / CountMax

  • erkennt stille Verbindungsabbrüche

  • wichtig bei NAT, DSL, Mobilfunk

Restart=always

  • garantiert Wiederherstellung nach:

    • Stromausfall

    • Netzwerkverlust

    • VPS-Neustart

    • SSH-Fehler


Boot-Verhalten

Proxmox

  • Tunnel-VM/LXC ist auf „Start at boot“ gesetzt

  • definierte Startreihenfolge

systemd

  • Service ist enabled

  • wartet auf network-online.target

  • blockiert nicht bei temporärem Netzausfall

➡️ Nach Komplettausfall kommt der Tunnel automatisch zurück.


Zusammenspiel mit Nginx (VPS)

Upstream-Definition



upstream homelab_tunnel_backend { server 127.0.0.1:29000; server 127.0.0.1:39000 backup; }

Nutzung in vHosts



proxy_pass http://homelab_tunnel_backend;

Der AutoSSH-Tunnel ist für Nginx transparent austauschbar.


Wartung & Betrieb

Status prüfen (VPS)



ss -lntp | grep 29000 ss -lntp | grep 39000

Funktionstest



curl -I http://127.0.0.1:29000/ -H 'Host: wiki.emken-cloud.de' || true curl -I http://127.0.0.1:39000/ -H 'Host: wiki.emken-cloud.de' || true

Service-Status (Tunnel-System)



systemctl status haos-tunnel.service journalctl -u haos-tunnel.service

Backup & Recovery

  • AutoSSH-Konfiguration ist vollständig in:

    • /etc/systemd/system/haos-tunnel.service

    • /root/.ssh/

  • Bestandteil der wöchentlichen Proxmox-Backups

  • Wiederherstellung:

    1. VM/LXC restore

    2. Service startet automatisch

    3. Tunnel wieder aktiv


Design-Entscheidungen (Begründung)

Entscheidung Grund
Reverse SSH Keine offenen Ports
Zwei Tunnel HA bei Node-Ausfall
Nginx-Failover Einfach, stabil
Getrennte Keys Sicherheit & Wartbarkeit
Kein Monitoring-Port Weniger Angriffsfläche

Zusammenfassung

Die AutoSSH-Architektur bietet:

  • sichere externe Erreichbarkeit

  • automatische Wiederherstellung

  • echte Redundanz

  • minimale Wartung

  • saubere Trennung von Verantwortung

Status: produktiv, stabil, HA-fähig.