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
- FreeGuard CLI — volledige commandoreferentie
- Handleiding ontwikkelaarsworkflow — integreer VPN in uw ontwikkeltools
- Prijzen — serverimplementaties werken met elk abonnement
Laatst bijgewerkt: maart 2026