# OPNsense Load Balancing: Skalierbare Dienste mit mehreren Backends

TL;DR / Management Summary Ein einzelner Server ist ein Single Point of Failure. Mit Load Balancing verteilt OPNsense eingehende Anfragen auf eine Gruppe von Backend-Servern (Pool). Fällt ein Server aus, wird er automatisch aus dem Verbund entfernt. Ein Senior Admin nutzt dafür heute primär das HAProxy Plugin, da es neben einfachem Round-Robin auch intelligentes Layer-7 Switching, SSL-Terminierung und Health-Checks bietet.


# 1. Einführung & Architektur

Vom Gateway zum Balancer.

Load Balancing in OPNsense kann auf zwei Arten erfolgen:

  1. Relay (L4): Einfache Verteilung von TCP/UDP-Paketen (Port-basiert).
  2. Reverse Proxy (L7): Versteht den Inhalt (z.B. HTTP-Header). Ermöglicht Session-Persistence (“Sticky Sessions”).

# Architektur-Übersicht (Mermaid)

graph TD
    CLIENT[User / Internet] -->|HTTPS 443| VIP[Virtual IP / OPNsense]
    VIP -->|HAProxy| BAL[Load Balancer Logic]
    BAL -->|Health Check| S1[Web Server 01]
    BAL -->|Health Check| S2[Web Server 02]
    BAL -->|Health Check| S3[Web Server 03]
    
    subgraph "Backend Pool"
    S1
    S2
    S3
    end

# 2. Einrichtung mit HAProxy

Die Enterprise-Lösung.

# Schritt 1: Plugin installieren

System -> Firmware -> Plugins. Installieren Sie os-haproxy.

# Schritt 2: Real Servers definieren

Services -> HAProxy -> Backend Pool -> Real Servers. Legen Sie die IP-Adressen Ihrer internen Server (z.B. 10.0.1.51, 10.0.1.52) fest.

# Schritt 3: Backend Pool erstellen

Fassen Sie die Real Servers zusammen und definieren Sie den Health Check (z.B. “Antwortet der Server auf /health.php mit HTTP 200?”).

# Schritt 4: Frontend erstellen

Hier legen Sie fest, auf welcher IP und welchem Port OPNsense lauscht (z.B. WAN-IP Port 443). Verknüpfen Sie das Frontend mit dem Backend Pool.


# 3. Deep Dive: Health Checks & Algorithmen

Intelligenz in der Verteilung.

# Load Balancing Algorithmen

# Health Checks (Liveness Probes)

Ein guter Loadbalancer prüft nicht nur, ob der Port offen ist, sondern ob die Applikation sinnvoll antwortet.


# 4. Day-2 Operations: SSL-Offloading

Den Backend-Server entlasten.

Warum SSL auf jedem einzelnen Webserver konfigurieren?


# 5. Troubleshooting & “War Stories”

Wenn der Pool leer bleibt.

# Top 3 Fehlerbilder

  1. Symptom: Alle Backend-Server werden als Offline angezeigt.

    • Ursache: Firewall-Regel auf dem LAN-Interface blockiert den Traffic von der Firewall-IP zum Backend.
    • Lösung: Regel Source: LAN address -> Destination: Backend_Net erlauben.
  2. Symptom: User fliegen ständig aus der Web-Session.

    • Ursache: Fehlende Persistence. User wechselt bei jedem Klick den Server.
    • Lösung: “Sticky Table” oder “AppSession” im HAProxy Backend aktivieren.
  3. Symptom: “503 Service Unavailable”.

    • Ursache: Backend-Server überlastet oder Health-Check Pfad falsch geschrieben.

# “War Story”: Der “Infinite” Health-Check

Ein Admin konfigurierte einen Health-Check, der eine komplexe SQL-Abfrage startete. Das Ergebnis: Da der Check jede Sekunde von beiden OPNsense-Knoten kam, verbrauchte die SQL-Datenbank 30% ihrer CPU nur für die Health-Checks. Lösung: Wir änderten den Check auf eine statische .txt Datei, die nur vom Backup-Skript des SQL-Servers gelöscht wurde, falls ein Problem auftrat. Lehre: Health-Checks müssen aussagekräftig, aber leichtgewichtig sein.


# 6. Monitoring & Reporting

Echtzeit-Statistiken.

# HAProxy Statistics Page

Aktivieren Sie die Statistik-Seite unter Services -> HAProxy -> Settings -> Statistics.


# 7. Fazit & Empfehlung

OPNsense mit HAProxy ersetzt teure dedizierte Loadbalancer.


# Anhang: Cheatsheet

Aufgabe Pfad
Plugin os-haproxy
Health Check HAProxy -> Backend Pool -> Health Checks
SSL Certs System -> Trust -> Certificates
Live Logs HAProxy -> Diagnostics -> Log File

# Referenzen