VPN implementeren op headless servers
FreeGuard CLI draait native op headless Linux-servers zonder desktopomgeving. Of u nu een cloud-instantie beveiligt, een thuislab beschermt of containerverkeer via VPN routeert, deze handleiding behandelt installatie, authenticatie, serviceconfiguratie en monitoring voor productieserverimplementaties.

VPN implementeren op headless servers

FreeGuard CLI draait native op headless Linux-servers zonder desktopomgeving. Of u nu een cloud-instantie beveiligt, een thuislab beschermt of containerverkeer via VPN routeert, deze handleiding behandelt installatie, authenticatie, serviceconfiguratie en monitoring voor productieserverimplementaties.

Waarom VPN op een server draaien?

Servers verwerken gevoelig verkeer: databaseverbindingen, API-aanroepen, back-upoverdrachten en communicatie tussen services. Het draaien van VPN op de server zelf zorgt ervoor dat al het uitgaande verkeer versleuteld is zonder individuele applicaties te configureren.

Veelvoorkomende toepassingen:

  • Cloud-instanties die toegang hebben tot geografisch beperkte API’s
  • CI/CD-runners die een consistente netwerkidentiteit nodig hebben
  • Zelf gehoste diensten die profiteren van IP-maskering
  • Ontwikkelservers die door gedistribueerde teams worden gebruikt

Installatie

Ubuntu / Debian

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

Of installeer vanuit de APT-repository:

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

Of gebruik de RPM-repository:

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-gebruikers moeten mogelijk eerst libc6-compat installeren:

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

Installatie verifiëren

freeguard --version

Headless authenticatie

Op servers zonder browser kunt u de standaard OAuth-inlogstroom niet gebruiken. FreeGuard CLI biedt e-mailauthenticatie voor headless omgevingen.

E-mailinlog

freeguard login --method email

De CLI vraagt u om het e-mailadres van uw account in te voeren. Er wordt een verificatiecode naar dat adres gestuurd. Voer de code in de terminal in om de authenticatie te voltooien.

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

Token-gebaseerde inlog

Voor geautomatiseerde implementaties gebruikt u een servicetoken:

freeguard login --method token --token YOUR_SERVICE_TOKEN

Genereer servicetokens vanuit uw accountdashboard. Tokens kunnen worden beperkt tot specifieke servers en hebben een configureerbare vervaldatum.

Authenticatie verifiëren

freeguard status --json | jq '.authenticated'

Draaien als systemd-service

Voor productie-implementaties draait u FreeGuard CLI als systemd-service zodat deze opstart bij het booten en herstart bij fouten.

Servicebestand aanmaken

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

Inschakelen en starten

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

Servicestatus controleren

sudo systemctl status freeguard

Logs bekijken

sudo journalctl -u freeguard -f

Scripting met --json en --no-color

Productiescripts moeten gestructureerde output parsen in plaats van menselijk leesbare tekst.

JSON-output

Elk commando ondersteunt --json:

# Connection status
freeguard status --json

Output:

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

Kleurloze modus

Verwijder ANSI-kleurcodes voor schone logbestanden:

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

Scriptvoorbeeld

Een health-check script dat opnieuw verbindt bij fouten:

#!/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

Voeg het toe aan cron voor regelmatige controles:

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

Monitoring en health checks

Basis health check

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

Geeft true of false terug. Eenvoudig genoeg voor elk monitoringsysteem.

Integratie met monitoringtools

Exporteer de status naar Prometheus, Datadog of elk monitoringsysteem dat shell-commando’s kan uitvoeren:

#!/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

Waarschuwingen

Combineer de health check met uw waarschuwingssysteem. Voorbeeld met een eenvoudige 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

Beveiligingsoverwegingen

  • Draaien als root: De VPN-tunnel vereist root-rechten om netwerkroutes te wijzigen. De systemd-service draait standaard als root.
  • Tokenopslag: Servicetokens worden opgeslagen in ~/.config/freeguard/. Zorg voor de juiste bestandsrechten (chmod 600).
  • Firewallregels: Als u UFW of iptables gebruikt, zorg ervoor dat de VPN-tunnelinterface is toegestaan.
  • Kill switch: Schakel de kill switch in om al het verkeer te blokkeren als de VPN-verbinding wegvalt: freeguard config set kill-switch true.

Volgende stappen

Laatst bijgewerkt: maart 2026