VPN auf Headless-Servern bereitstellen
FreeGuard CLI läuft nativ auf Headless-Linux-Servern ohne Desktop-Umgebung. Ob Sie eine Cloud-Instanz absichern, ein Heimlabor schützen oder Container-Traffic über VPN leiten — dieser Leitfaden behandelt Installation, Authentifizierung, Dienstkonfiguration und Überwachung für produktive Server-Deployments.

VPN auf Headless-Servern bereitstellen

FreeGuard CLI läuft nativ auf Headless-Linux-Servern ohne Desktop-Umgebung. Ob Sie eine Cloud-Instanz absichern, ein Heimlabor schützen oder Container-Traffic über VPN leiten — dieser Leitfaden behandelt Installation, Authentifizierung, Dienstkonfiguration und Überwachung für produktive Server-Deployments.

Warum VPN auf einem Server betreiben?

Server verarbeiten sensiblen Datenverkehr: Datenbankverbindungen, API-Aufrufe, Backup-Übertragungen und Kommunikation zwischen Diensten. Der Betrieb von VPN direkt auf dem Server stellt sicher, dass der gesamte ausgehende Datenverkehr verschlüsselt ist, ohne einzelne Anwendungen konfigurieren zu müssen.

Häufige Anwendungsfälle:

  • Cloud-Instanzen, die auf geo-eingeschränkte APIs zugreifen
  • CI/CD-Runner, die eine konsistente Netzwerkidentität benötigen
  • Selbst gehostete Dienste, die von IP-Maskierung profitieren
  • Entwicklungsserver, die von verteilten Teams genutzt werden

Installation

Ubuntu / Debian

curl -fsSL https://cli.freeguard.com/install.sh | bash

Oder über das APT-Repository installieren:

curl -fsSL https://cli.freeguard.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/freeguard.gpg
echo "deb [signed-by=/usr/share/keyrings/freeguard.gpg] https://apt.freeguard.com stable main" | sudo tee /etc/apt/sources.list.d/freeguard.list
sudo apt update
sudo apt install freeguard-cli

CentOS / RHEL / Fedora

curl -fsSL https://cli.freeguard.com/install.sh | bash

Oder das RPM-Repository verwenden:

sudo rpm --import https://cli.freeguard.com/gpg.key
sudo tee /etc/yum.repos.d/freeguard.repo <<EOF
[freeguard]
name=FreeGuard CLI
baseurl=https://rpm.freeguard.com/stable
gpgcheck=1
gpgkey=https://cli.freeguard.com/gpg.key
EOF
sudo yum install freeguard-cli

Alpine Linux

curl -fsSL https://cli.freeguard.com/install.sh | bash

Alpine-Benutzer müssen möglicherweise zuerst libc6-compat installieren:

apk add libc6-compat
curl -fsSL https://cli.freeguard.com/install.sh | bash

Installation überprüfen

freeguard --version

Headless-Authentifizierung

Auf Servern ohne Browser können Sie den Standard-OAuth-Anmeldefluss nicht verwenden. FreeGuard CLI bietet E-Mail-basierte Authentifizierung für Headless-Umgebungen.

E-Mail-Anmeldung

freeguard login --method email

Die CLI fordert Sie auf, Ihre Konto-E-Mail einzugeben. Ein Bestätigungscode wird an diese Adresse gesendet. Geben Sie den Code im Terminal ein, um die Authentifizierung abzuschließen.

$ freeguard login --method email
Enter your email: [email protected]
Verification code sent. Check your inbox.
Enter code: 483291
Login successful.

Token-basierte Anmeldung

Für automatisierte Deployments verwenden Sie einen Service-Token:

freeguard login --method token --token YOUR_SERVICE_TOKEN

Generieren Sie Service-Tokens über Ihr Konto-Dashboard. Tokens können auf bestimmte Server beschränkt werden und haben eine konfigurierbare Ablaufzeit.

Authentifizierung überprüfen

freeguard status --json | jq '.authenticated'

Als systemd-Dienst ausführen

Für Produktiv-Deployments führen Sie FreeGuard CLI als systemd-Dienst aus, damit er beim Booten startet und bei Fehlern neu startet.

Dienstdatei erstellen

sudo tee /etc/systemd/system/freeguard.service <<EOF
[Unit]
Description=FreeGuard VPN
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/freeguard connect --server us-east --no-color
ExecStop=/usr/local/bin/freeguard disconnect
Restart=on-failure
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target
EOF

Aktivieren und starten

sudo systemctl daemon-reload
sudo systemctl enable freeguard
sudo systemctl start freeguard

Dienststatus prüfen

sudo systemctl status freeguard

Logs anzeigen

sudo journalctl -u freeguard -f

Skripting mit --json und --no-color

Produktions-Skripte sollten strukturierte Ausgaben parsen statt menschenlesbaren Text.

JSON-Ausgabe

Jeder Befehl unterstützt --json:

# Connection status
freeguard status --json

Ausgabe:

{
  "connected": true,
  "server": "us-east-1",
  "server_name": "New York",
  "protocol": "hysteria2",
  "uptime": 86400,
  "bytes_sent": 1048576,
  "bytes_received": 5242880
}

No-Color-Modus

ANSI-Farbcodes für saubere Log-Dateien entfernen:

freeguard status --no-color >> /var/log/freeguard-status.log

Skripting-Beispiel

Ein Health-Check-Skript, das bei Fehler neu verbindet:

#!/bin/bash
STATUS=$(freeguard status --json 2>/dev/null)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')

if [ "$CONNECTED" != "true" ]; then
  echo "$(date): VPN disconnected, reconnecting..." >> /var/log/freeguard-health.log
  freeguard connect --server us-east --json >> /var/log/freeguard-health.log 2>&1
fi

Zum Cron hinzufügen für regelmäßige Prüfungen:

# Check VPN health every 5 minutes
*/5 * * * * /opt/scripts/freeguard-health.sh

Überwachung und Health Checks

Einfacher Health Check

freeguard status --json | jq -r '.connected'

Gibt true oder false zurück. Einfach genug für jedes Überwachungssystem.

Integration mit Überwachungstools

Status an Prometheus, Datadog oder jedes Überwachungssystem exportieren, das Shell-Befehle ausführen kann:

#!/bin/bash
# prometheus-exporter.sh
STATUS=$(freeguard status --json)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')
UPTIME=$(echo "$STATUS" | jq -r '.uptime')

if [ "$CONNECTED" = "true" ]; then
  echo "freeguard_connected 1"
  echo "freeguard_uptime_seconds $UPTIME"
else
  echo "freeguard_connected 0"
  echo "freeguard_uptime_seconds 0"
fi

Benachrichtigungen

Kombinieren Sie den Health Check mit Ihrem Benachrichtigungssystem. Beispiel mit einem einfachen Webhook:

#!/bin/bash
CONNECTED=$(freeguard status --json | jq -r '.connected')
if [ "$CONNECTED" != "true" ]; then
  curl -X POST https://hooks.example.com/alert \
    -H "Content-Type: application/json" \
    -d '{"text": "FreeGuard VPN disconnected on '"$(hostname)"'"}'
fi

Sicherheitshinweise

  • Als root ausführen: Der VPN-Tunnel benötigt Root-Rechte zum Ändern von Netzwerkrouten. Der systemd-Dienst läuft standardmäßig als root.
  • Token-Speicherung: Service-Tokens werden in ~/.config/freeguard/ gespeichert. Stellen Sie angemessene Dateiberechtigungen sicher (chmod 600).
  • Firewall-Regeln: Bei Verwendung von UFW oder iptables stellen Sie sicher, dass die VPN-Tunnel-Schnittstelle zugelassen ist.
  • Kill Switch: Integriert, ohne dass etwas aktiviert werden muss. Solange FreeGuard läuft, wird der über FreeGuard geleitete Datenverkehr bei einem Ausfall des VPN unterbrochen, statt über die reguläre Verbindung des Servers zu laufen, bis FreeGuard die Verbindung wiederherstellt.

Nächste Schritte

Zuletzt aktualisiert: März 2026