#!/bin/bash set -euo pipefail # Fonctions de log pour messages colorés log_info() { echo -e "\e[32m[INFO] $*\e[0m" } log_warn() { echo -e "\e[33m[WARN] $*\e[0m" } log_error() { echo -e "\e[31m[ERROR] $*\e[0m" } # Fonction d'utilisation usage() { echo "Usage: $0 -c -s -i -a [-p ] [-f ]" echo "Exemple (configuration complète par défaut):" echo " $0 -c \"clé_privée_client\" -s \"clé_publique_serveur\" -i \"192.168.1.100\" -a \"10.0.0.2/24\" -p \"8022\"" echo "Exemple (seulement génération du fichier de configuration):" echo " $0 -c \"clé_privée_client\" -s \"clé_publique_serveur\" -i \"192.168.1.100\" -a \"10.0.0.2/24\" -p \"8022\" -f \"custom.conf\"" exit 1 } # Vérification des privilèges root if [ "$(id -u)" -ne 0 ]; then log_error "Ce script doit être exécuté en tant que root." exit 1 fi # Initialisation des variables CLIENT_PRIV="" SERVER_PUB="" SERVER_IP="" CLIENT_IP="" SERVER_PORT="8022" # Port par défaut CONFIG_FILE="wg0.conf" CONFIG_PARAM_PROVIDED=false # Traitement des options en ligne de commande while getopts ":c:s:i:a:p:f:h" opt; do case $opt in c) CLIENT_PRIV="$OPTARG" ;; s) SERVER_PUB="$OPTARG" ;; i) SERVER_IP="$OPTARG" ;; a) CLIENT_IP="$OPTARG" ;; p) SERVER_PORT="$OPTARG" ;; f) CONFIG_FILE="$OPTARG" CONFIG_PARAM_PROVIDED=true ;; h) usage ;; \?) log_error "Option invalide: -$OPTARG" usage ;; :) log_error "L'option -$OPTARG requiert un argument." usage ;; esac done # Vérification des options obligatoires if [ -z "$CLIENT_PRIV" ] || [ -z "$SERVER_PUB" ] || [ -z "$SERVER_IP" ] || [ -z "$CLIENT_IP" ]; then log_error "Les clés client privé (-c), serveur public (-s), l'IP serveur (-i) et l'IP client (-a) sont obligatoires." usage fi # Si l'IP client ne contient pas de masque, on ajoute /24 par défaut if [[ "$CLIENT_IP" != *"/"* ]]; then log_warn "Aucun masque spécifié pour l'IP client, ajout de /24 par défaut." CLIENT_IP="${CLIENT_IP}/24" fi # Installation de WireGuard (uniquement si configuration complète par défaut) if [ "$CONFIG_PARAM_PROVIDED" = false ]; then log_info "Installation de WireGuard..." apt update && apt install -y wireguard fi # Création du répertoire de configuration WireGuard WG_DIR="/etc/wireguard" mkdir -p "$WG_DIR" chmod 700 "$WG_DIR" WG_CONF="$WG_DIR/$CONFIG_FILE" log_info "Création de la configuration WireGuard pour le client ($WG_CONF)..." cat > "$WG_CONF" < /etc/iptables/rules.v4 log_info "Installation et configuration du client terminée." else log_info "Configuration générée dans $WG_CONF. Les étapes d'activation automatique, de démarrage de l'interface et de configuration d'iptables ne sont pas exécutées." fi