Debian – Automatiser le déploiement d’un VPN

Debian – Automatiser le déploiement d’un VPN

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 😉

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *