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: Aktivieren Sie den Kill Switch, um bei VPN-Trennung den gesamten Datenverkehr zu blockieren: freeguard config set kill-switch true.

Nächste Schritte

Zuletzt aktualisiert: März 2026