Automatiser le déploiement des certificats et des services VPN permet de gagner un temps précieux tout en réduisant les risques d’erreurs humaines. Cette approche garantit une configuration cohérente et rapide, essentielle pour des déploiements à grande échelle ou des environnements nécessitant des mises à jour fréquentes.
Étape 1 :
Mettez à jour les paquets et installez openvpn
apt-get update
apt-get install -y openvpn
Étape 2 :
Déplacez le certificat .ovpn vers le dossier /etc/openvpn/client
mv test01.ovpn /etc/openvpn/client/
Étape 3 :
Maintenant, nous allons créer un service pour démarrer initier la connexion vpn à chaque démarrage.
Éditez le fichier /etc/systemd/system/openvpn-test01-sd01.service
nano /etc/systemd/system/openvpn-test01-sd01.service
[Unit]
Description=OpenVPN test01
After=network.target
[Service]
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/client/test01.ovpn
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
Enregistrez et quittez !
Ensuite, on recharge les services systemd
systemctl daemon-reload
Puis, on active le service et on le démarre
systemctl enable openvpn-test01-sd01.service
systemctl start openvpn-test01-sd01.service
Et enfin, on test que la connexion est valide :
ping 10.8.0.1
Et si, on automatisait tout ça ?
Pour cette exemple, connectez-vous en tant que root et placez le certificat .ovpn dans le repertoire /root
nano setup_vpn.sh
#!/bin/bash
# Vérification des droits root
if [ "$(id -u)" -ne 0 ]; then
echo "Ce script doit être exécuté en tant que root. Utilisez sudo."
exit 1
fi
# Installation du paquet OpenVPN
echo "Installation du paquet OpenVPN..."
apt-get update
apt-get install -y openvpn
if [ $? -ne 0 ]; then
echo "L'installation d'OpenVPN a échoué. Vérifiez votre connexion internet ou les droits utilisateur."
exit 1
fi
# Demander le nom du fichier .ovpn
read -p "Entrez le nom du fichier .ovpn (sans extension): " filename
if [[ ! "$filename" =~ ^[a-zA-Z0-9._-]+$ ]]; then
echo "Nom de fichier invalide. Utilisez uniquement des caractères alphanumériques, points, tirets ou underscores."
exit 1
fi
# Déplacer le fichier .ovpn
if [ -f "/root/${filename}.ovpn" ]; then
echo "Déplacement du fichier ${filename}.ovpn vers /etc/openvpn/client/"
mkdir -p /etc/openvpn/client/
mv "/root/${filename}.ovpn" "/etc/openvpn/client/"
else
echo "Le fichier /root/${filename}.ovpn n'existe pas. Vérifiez et réessayez."
exit 1
fi
# Création du fichier de service systemd
service_path="/etc/systemd/system/openvpn-${filename}-sd01.service"
echo "Création du fichier de service systemd : $service_path"
cat <<EOF > "$service_path"
[Unit]
Description=OpenVPN ${filename} sd01
After=network.target
[Service]
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/client/${filename}.ovpn
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
EOF
# Rechargement des fichiers systemd et activation du service
echo "Rechargement des services systemd..."
systemctl daemon-reload
echo "Activation du service openvpn-${filename}-sd01..."
systemctl enable "openvpn-${filename}-sd01.service"
echo "Démarrage du service openvpn-${filename}-sd01..."
systemctl start "openvpn-${filename}-sd01.service"
# Vérification de l'état du service
echo "Vérification de l'état du service..."
# Test de la connexion avec un ping
read -p "Souhaitez-vous tester la connexion avec un ping à 10.8.0.1 ? (y/n): " ping_test
if [[ "$ping_test" == "y" ]]; then
echo "Test de connexion avec un ping à 10.8.0.1..."
ping -c 4 10.8.0.1
fi
echo "Nettoyage des fichiers temporaires..."
rm -f /tmp/*.tmp
echo "--------------------------------------------------"
echo "L'installation et la configuration OpenVPN sont terminées."
echo "Service OpenVPN activé : openvpn-${filename}-sd01"
echo "Pour vérifier l'état du service, exécutez : systemctl status openvpn-${filename}-sd01.service"
echo "--------------------------------------------------"
Donnez les droits d’exécution sur le script
chmod +x setup_vpn.sh
Exécutez le script
./setup_vpn.sh
Testez-le 😉