Déployer un VPN sur des serveurs headless
FreeGuard CLI fonctionne nativement sur les serveurs Linux headless sans environnement de bureau requis. Que vous sécurisiez une instance cloud, protégiez un laboratoire domestique ou acheminiez le trafic de conteneurs via VPN, ce guide couvre l’installation, l’authentification, la configuration du service et la surveillance pour les déploiements en production.
Pourquoi exécuter un VPN sur un serveur ?
Les serveurs gèrent du trafic sensible : connexions aux bases de données, appels API, transferts de sauvegardes et communication inter-services. Exécuter un VPN sur le serveur lui-même garantit que tout le trafic sortant est chiffré sans configurer les applications individuellement.
Cas d’utilisation courants :
- Instances cloud accédant à des API géo-restreintes
- Runners CI/CD nécessitant une identité réseau constante
- Services auto-hébergés bénéficiant du masquage d’IP
- Serveurs de développement utilisés par des équipes distribuées
Installation
Ubuntu / Debian
curl -fsSL https://cli.freeguard.com/install.sh | bash
Ou installer depuis le dépôt APT :
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
Ou utiliser le dépôt RPM :
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
Les utilisateurs d’Alpine devront peut-être installer libc6-compat d’abord :
apk add libc6-compat
curl -fsSL https://cli.freeguard.com/install.sh | bash
Vérifier l’installation
freeguard --version
Authentification headless
Sur les serveurs sans navigateur, vous ne pouvez pas utiliser le flux de connexion OAuth par défaut. FreeGuard CLI fournit une authentification par e-mail pour les environnements headless.
Connexion par e-mail
freeguard login --method email
Le CLI vous demande de saisir l’e-mail de votre compte. Un code de vérification est envoyé à cette adresse. Entrez le code dans le terminal pour terminer l’authentification.
$ freeguard login --method email
Enter your email: [email protected]
Verification code sent. Check your inbox.
Enter code: 483291
Login successful.
Connexion par token
Pour les déploiements automatisés, utilisez un token de service :
freeguard login --method token --token YOUR_SERVICE_TOKEN
Générez des tokens de service depuis votre tableau de bord. Les tokens peuvent être limités à des serveurs spécifiques et avoir une expiration configurable.
Vérifier l’authentification
freeguard status --json | jq '.authenticated'
Exécution en tant que service systemd
Pour les déploiements en production, exécutez FreeGuard CLI en tant que service systemd afin qu’il démarre au boot et redémarre en cas d’échec.
Créer le fichier de service
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
Activer et démarrer
sudo systemctl daemon-reload
sudo systemctl enable freeguard
sudo systemctl start freeguard
Vérifier le statut du service
sudo systemctl status freeguard
Consulter les logs
sudo journalctl -u freeguard -f
Scripting avec --json et --no-color
Les scripts de production doivent analyser une sortie structurée plutôt que du texte lisible par l’homme.
Sortie JSON
Chaque commande prend en charge --json :
# Connection status
freeguard status --json
Sortie :
{
"connected": true,
"server": "us-east-1",
"server_name": "New York",
"protocol": "hysteria2",
"uptime": 86400,
"bytes_sent": 1048576,
"bytes_received": 5242880
}
Mode sans couleur
Supprimez les codes de couleur ANSI pour des fichiers de log propres :
freeguard status --no-color >> /var/log/freeguard-status.log
Exemple de script
Un script de vérification de santé qui se reconnecte en cas d’échec :
#!/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
Ajoutez-le à cron pour des vérifications régulières :
# Check VPN health every 5 minutes
*/5 * * * * /opt/scripts/freeguard-health.sh
Surveillance et vérifications de santé
Vérification de santé basique
freeguard status --json | jq -r '.connected'
Retourne true ou false. Suffisamment simple pour n’importe quel système de surveillance.
Intégration avec les outils de surveillance
Exportez le statut vers Prometheus, Datadog ou tout système de surveillance capable d’exécuter des commandes shell :
#!/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
Alertes
Combinez la vérification de santé avec votre système d’alertes. Exemple avec un simple 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
Considérations de sécurité
- Exécution en tant que root : Le tunnel VPN nécessite les privilèges root pour modifier les routes réseau. Le service systemd s’exécute en tant que root par défaut.
- Stockage des tokens : Les tokens de service sont stockés dans
~/.config/freeguard/. Assurez-vous que les permissions de fichiers sont appropriées (chmod 600). - Règles de pare-feu : Si vous utilisez UFW ou iptables, assurez-vous que l’interface du tunnel VPN est autorisée.
- Kill switch : Activez le kill switch pour bloquer tout le trafic si le VPN se déconnecte :
freeguard config set kill-switch true.
Étapes suivantes
- FreeGuard CLI — référence complète des commandes
- Guide du workflow développeur — intégrez le VPN dans vos outils de développement
- Tarifs — les déploiements serveur fonctionnent avec tous les plans
Dernière mise à jour : mars 2026